C语言程序设计-重温底层语言(巩固基础)

最近南京疫情严重,已经居家办公了,就连往市里的三号线都关闭了。老实在家呆着不出门,闭关修炼。最近想看看C程序底层,巩固下基础,再去学习Swift语言。OC是C语言的超类。现在看谭浩强的C程序设计已经第五版了,之前上学时候是第四版。

  • 我是Mac笔记本使用的是Xcode,介绍下怎么用xcode编写C程序

    1、第一步,打开xcode
    打开xcode.png
    2、第二步,点击Create a new Xcode project
    点击Create a new Xcode project.png

    3、第三步,输入项目名称及语言类型
    基础配置和创建iOS一样.png
    4、第四步,就可以看到完整界面
    这几个步骤应该很详细了吧.png

一、第一章 程序设计和C语言

1.1 什么是计算机语言

介绍了计算的来龙去脉,次数省略好多个字。

1.2 什么是计算机语言
计算机语言:计算机的工作基于二进制,从根本上说,计算机只能识别和接受由0和1组成的指令。
1.4 最简单的C语言程序
1.4.1 最简单C语言程序举例

//
//  main.c
//  HHHH
//
//  Created by 纵昂 on 2021/8/3.
//

//这是编译预处理指令
#include  

int main(int argc, const char * argv[]) { 
/*
 程序分析:main是函数的名字,表示主函数,main前面的int表示此函数的类型是int类型(整形)。
 */
#pragma mark -  1.4 最简单的C语言程序
    // insert code here...

//  输出所指定的一行信息
    printf("Hello, World!\n");

    return 0;
//    每一个C语言程序都必须有一个main函数。函数体由花括号{}括起来。
}

运行结果
打印台输出结果.png
#理论总结
/*
 (1)、一个程序由一个或多个源程序文件组成
 1、预处理指令。
 如#include   或#define
 2、全局声明
 int a
 3、函数定义
 (2)、函数是C程序的主要组成部分
 (3)、一个函数包括两个部分
 1、函数首部。即函数的第一行,包括函数名、函数类型、函数属性、函数参数(形式参数)名、参数类型。
 例如:
  int      max      (int         x ,        int           y)
 函数类型   函数名   函数参数类型   函数参数名    函数参数类型    函数参数名
 一个函数名后面必须跟一堆圆括号,括号内写函数的参数名及其类型。如果函数没有参数,可以在括号中写void,也可以是空括号,如:
 int main(void) 或  int main()
 2、函数体。即函数首部下面的花括号内的部分。
 (4)、程序总是从main函数开始执行的。
 (5)、程序中对计算机的操作是由函数中的C语句完成的。
 (6)、在每个数据声明和语句的最后必须有一个分号。分号是C语句的必要组成部分。
 如:
 c = a + b;
 其中的分号是不可缺少的
 (7)、C语言本身不提供输入输出语句。输入和输出的操作由库函数scanf和printf等函数来完成的。
 (8)、程序应当包含注释
 */
  • 例 1.2 求两个整数之和。
    解题思路:设置三个变量,a和b用来存放两个整数,sum用来存放和数。用赋值运算符"="把相加的结果传送给sum。
//
//  main.c
//  HHHH
//
//  Created by 纵昂 on 2021/8/3.
//

#include 

int main(int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
#pragma mark - 例1.2 求两个整数之和
    int a,b,sum;
//下面两行是赋值语句
    a = 123;
    b = 456;

    sum = a + b;
    printf("sum is %d\n",sum);
    
    return 0;
}

运行结果

运行结果e.png
程序分析:int声明a和b和sum为整型(int)变量。下面两行为赋值语句,然后sum的值为a + b的和,最后输出结果为sum的值

1.4.2 C语言程序的结构

通过以上的程序例子,可以看到C语言程序结构有以下特点:

(1)、一个程序由一个或多个愿程序文件组成。
1. 预处理指令
2. 全局声明
3. 函数定义
(2)、函数是C程序的主要组成部分。(上面已经写了)

1.5 运行C程序的步骤与方法

看看我画图咋样(大佬前辈勿喷哈)
执行程序草图.png

这个一看就明白,不用太多文字表达。这里就不废话了。

1.6 程序设计的任务

从确定问题到最后完成任务,一般经历一下几个工作阶段:
(1)、问题分析。
(2)、设计算法。
(3)、编写程序。
(4)、对源程序进行编辑、编译和连接,可得到执行程序。
(5)、运行程序,分析结果。
(6)、编写程序文档。

第二章 算法-程序的灵魂

通过第一章的学习,了解C语言特点,看到了简单的C程序。现在从程序的内容方面进行讨论,也就是一个程序中应该包含什么信息。或者说,为了实现解题的要求,程序应当向计算机发送什么信息。
一个程序主要包括以下两方面信息:
(1)、对数据的描述。在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式。这就是数据结构(data structure)。
(2)、对操作的描述。即要求计算机进行操作的步骤,也就是算法(algorithm)。
数据是操作的对象,操作的目的是对数据进行加工处理,已得到期望的结果。打比喻是不可能的,这辈子都不能。
著名计算机科学家沃思提出一个公式:
算法 + 数据结构 = 程序
直到今天,这个公式对于过程话程序来说依然是适用的。

2.1 什么是算法

计算机算法可分为两大类别:数值运算法和非数值运算法。数值运算法的目的是求数值解,例如求方程的根、求一个函数的定积分等,都属于数值运算范围。非数值运算包括的面十分广泛,最常见的是用于事务管理领域,例如对一批职工按姓名排序、图书检索、人事管理和行车调度管理等。

第三章 最简单的C程序设计-顺序生程序设计

为了能编写出C语言程序,必须具备以下的知识和能力:
(1),要有正确的解题思路,即学会设计算法,否则无从下手。
(2),掌握C语言的语法,知道怎样使用C语言正确所提供的功能编写出一个完整的、正确的程序。也就是在设计好算法之后,能用C语言正确表示此算法。
(3),在写算法和编写程序时,要采用结构化程序设计方法,编写出结构化的程序。

3.1 顺序程序设计举例

例 3.1 有人用温度计测量出用华氏法表示的温度(如69度F),今要求把它转换为以摄氏法表示的温度(如20度C)。
解题思路:这个问题的算法的关键,在于找出二者之间的转换公式。根据物理学知识,知道以下转换公式:

转换公式.png

//        定义f和c为单精度浮点型变量
        float f,c;
//        指定f的值
        f = 64.0;
//        利用公式计算C的值
        c = (5.0/9) * (f-32);
//        输出c的值
        printf("f=%f\nc=%f\n",f,c);

打印结果
输出控制台.png

例 3.2 计算存款利息,有1000元,想存一年。有三种方法可选:
(1)活期,年利率为r1;
(2)一年期定期,年利率为r2;
(3)存两次半年定期,年利率为r3。请分别计算出一年后按3种方法所得到的本息和。
解题思路:确定计算本息的公式,数学知识可知,若存款额为p0时,则:
活期存款一年后本息和为p1=p0(1+r1)。
一年期定期存款,一年后本息和为p2=p0(1+r2)。
两次半年定期存款,一年后本息和为p3=p0(1+2分之r3)(1+2分之r3)

//      定义变量
        float p0 = 1000, r1 = 0.0036, r2 = 0.0225, r3=0.0198,p1,p2,p3;
//        计算活期本息和
        p1 = p0 * (1+r1);
//        计算一年定期定期本息和
        p2 = p0 * (1+r2);
//        计算存款两次半年定期的本息和
        p3 = p0 * (1+r3/2) * (1+r3/2);
//        输出结果
        printf("本息计算结果:p1=%f\np2=%f\np3=%f\n",p1,p2,p3);
        

打印结果
本息计算结果.png

3.2 数据的表现形式及其运算

有了以上写程序的基础,本节怼程序中最基本的成分作必要的介绍。

3.2.1 常量和变量

在计算机高级语言中,数据有两种表现形式:常量和变量。

1、常量
/*
  在程序运行过程中,其值不能被改变的量量成为常量。例如3、1,程序中的5、9、32和例3.2程序中的1000,0.0036是常量。数值常量就是数学中的常数。
 常用的常量有以下几类:
 (1),整形常量。如1000、12345、0、-345等都是整形常量。
 (2),实型常量。
 (3),字符常量。
 (4),字符串常量。如"boy","123"等,用双撇号把若干个字符括起来,字符穿常量是双撇号中的全部字符。
 (5),符号常量。用#define指令,指定用一个符号名称代表一个常量。如下:
  #define PI 3.1416   //注意行末没有分号
 经过以上的指定后,本文件中从此行开始所有的PI都代表1.1416。
 */
2、变量
#pragma mark - 2、变量
/*
如 例3.1程序中的c,f和3.2程序中的p0,p1,p2,p3,r1,r2等是变量。变量代表一个有名字的、具有特定属性 一个存储单元。也就是存放变量的值。在程序运行期间,变量的值是可以改变的。
 */
3、常变量
/*
 C允许使用常变量,如:
 const int a = 3;
 表示a被定义为一个整型变量,指定其值为3,而且在变量存在期间其值不能改变。
 常量与常变量的异同是:常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。可以说,常变量是有名字的不变量,而常量是没有名字的不变量。有名字就便于在程序中被引用。
 */
4、标识符
在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符(identifier)。
简单地说,标识符就是一个对象的名字。前面用到的变量名p1,p2,c,f,符号常量名PI,PRICE,函数名printf等都是标识符。
3.2.2 数据类型

C语言允许使用类型见图3.4,图中标红是C所增加的。
C语言允许使用类.png
其中基本类型(包括整整型和浮点型)和枚举类型变量的值都是数值,统称为算数类型(arithmetic type)。
算数类型和指针类型统称为纯量类型(scalar type),因为其变量的值是以数字来表示的。
枚举类型是程序中用户定义的整数类型。
数组类型和结构体类型统称为组合类型(aggregate type),共用体类型不属于组合类型,因为在同一时间内只有一个成员具有值。
函数是用来定义函数,描述一个函数的接口,包括函数返回值的数据类型和参数的类型。
3.2.3 整型数据
1、整型数据的分类
#pragma mark - 1、整型数据的分类
/*
 (1)、基本整型(int型)
 (2)、短整型(short int)
 (3)、长整型(long int)
 (4)、双长整型(long long int)
 */
2、整型变量的符号属性

以上介绍的几种类型,变量值在存储单元中都以补码形式存储的,存储单元中的第一个二进制代表符号。整型变量的值的范围包括负数到正数(见表3.2)

见表3.2.png
上面C程序代码运行小片段

3.2.4 字符型数据

由于字符是按其代码(整数)形式存储的,因此C把字符型数据作为整数类型的一种。但是,这种字符型数据在使用上有自己的特点,因此把它单独列为一节来介绍。

1、字符与字符代码

下次更新再说吧,出门记得带口罩,南京加油!!!

你可能感兴趣的:(C语言程序设计-重温底层语言(巩固基础))