第1章 程序设计基本概念 1
1.1 程序和程序设计 1
1.1.1 C程序 1
1.1.2 程序设计 2
1.2 算法 2
1.3 结构化程序设计和模块化结构 3
1.3.1 结构化程序 3
1.3.2 模块化结构 6
习题 7
第2章 C程序设计的初步知识 8
2.1 简单C语言程序的构成和格式 9
2.2 标识符、常量和变量 10
2.2.1 标识符 10
2.2.2 常量 11
2.2.3 符号常量 11
2.2.4 变量 12
2.3 整型数据 12
2.3.1 整型常量 12
2.3.2 整型变量 13
2.3.3 整型数据的分类 13
2.3.4 整数在内存中的存储形式 14
2.4 实型数据 15
2.4.1 实型常量 15
2.4.2 实型变量 15
2.5 算术表达式 16
2.5.1 基本的算术运算符 16
2.5.2 运算符的优先级、结合性和算术表达式 16
2.5.3 强制类型转换表达式 17
2.6 赋值表达式 18
2.6.1 赋值运算符和赋值表达式 18
2.6.2 复合赋值表达式 19
2.6.3 赋值运算中的类型转换 19
2.7 自加、自减运算符和逗号运算符 20
2.7.1 自加运算符“+++”和自减运算符“--” 20
2.7.2 逗号运算符和逗号表达式 21
习题 21
第3章 顺序结构 23
3.1 赋值语句 23
3.2 数据输出 24
3.2.1 printf函数的一般调用形式 24
3.2.2 printf函数中常用的格式说明 25
3.2.3 使用printf函数时的注意事项 28
3.3 数据输入 29
3.3.1 scanf函数的一般调用形式 29
3.3.2 scanf函数中常用的格式说明 29
3.3.3 通过scanf函数从键盘输入数据 30
3.4 复合语句和空语句 32
3.4.1 复合语句 32
3.4.2 空语句 32
3.5 程序举例 32
习题 34
第4章 选择结构 37
4.1 关系运算和逻辑运算 38
4.1.1 C语言的逻辑值 38
4.1.2 关系运算符和关系表达式 38
4.1.3 逻辑运算符和逻辑表达式 39
4.2 if语句和用if语句构成的选择结构 40
4.2.1 if语句 40
4.2.2 嵌套的if语句 43
4.3 条件表达式构成的选择结构 45
4.4 switch语句以及用switch语句和break语句构成的选择结构 46
4.4.1 switch语句 46
4.4.2 switch语句的执行过程 46
4.4.3 在switch语句体中使用break语句 47
4.5 语句标号和goto语句 48
4.5.1 语句标号 48
4.5.2 goto语句 48
习题 49
第5章 循环结构 53
5.1 while语句和用while语句构成的循环结构 53
5.1.1 while循环的一般形式 53
5.1.2 while循环的执行过程 54
5.2 do-while语句和用do-while语句构成的循环结构 57
5.2.1 do-while语句构成的循环结构 57
5.2.2 do-while循环的执行过程 57
5.3 for语句和用for语句构成的循环结构 58
5.3.1 for语句构成的循环结构 58
5.3.2 for循环的执行过程 59
5.3.3 有关for语句的说明 59
5.4 循环结构的嵌套 60
5.5 break和continue语句在循环体中的作用 63
5.5.1 break语句 63
5.5.2 continue语句 63
5.6 程序举例 64
习题 66
第6章 字符型数据 71
6.1 字符型常量 72
6.1.1 字符常量 72
6.1.2 转义字符常量 72
6.1.3 字符串常量 73
6.1.4 可对字符量进行的运算 73
6.2 字符变量 73
6.3 字符的输入和输出 74
6.3.1 调用printf和scanf函数输出和输入字符 74
6.3.2 调用putchar和getchar函数输出和输入字符 75
6.4 程序举例 76
习题 78
第7章 函数 81
7.1 库函数 82
7.2 函数的定义和返回值 83
7.2.1 函数定义的语法 83
7.2.2 函数的返回值 84
7.3 函数的调用 84
7.3.1 函数的两种调用方式 84
7.3.2 函数调用时的语法要求 85
7.4 函数的说明 85
7.4.1 函数说明的形式 85
7.4.2 函数说明的位置 86
7.5 调用函数和被调用函数之间的数据传递 86
7.6 程序举例 88
习题 93
第8章 地址和指针 97
8.1 变量的地址和指针 97
8.2 指针变量的定义和指针变量的基类型 99
8.3 给指针变量赋值 100
8.3.1 给指针变量赋地址值 100
8.3.2 给指针变量赋“空”值 101
8.4 对指针变量的操作 101
8.4.1 通过指针来引用一个存储单元 101
8.4.2 移动指针 103
8.4.3 指针比较 104
8.5 函数之间地址值的传递 104
8.5.1 形参为指针变量时实参和形参之间的数据传递 104
8.5.2 通过传送地址值在被调用函数中直接改变调用函数中的变量的值 105
8.5.3 函数返回地址值 106
习题 107
第9章 数组 111
9.1 一维数组的定义和一维数组元素的引用 112
9.1.1 一维数组的定义 112
9.1.2 一维数组元素的引用 113
9.1.3 一维数组的初始化 113
9.1.4 通过赋初值定义数组的大小 114
9.1.5 一维数组的定义和数组元素引用举例 114
9.2 一维数组和指针 115
9.2.1 一维数组和数组元素的地址 115
9.2.2 通过数组的首地址引用数组元素 116
9.2.3 通过指针引用一维数组元素 116
9.2.4 用带下标的指针变量引用一维数组元素 117
9.3 函数之间对一维数组和数组元素的引用 117
9.3.1 数组元素作实参 117
9.3.2 数组名作实参 117
9.3.3 数组元素地址作为实参 119
9.3.4 函数的指针形参和函数体中数组的区别 120
9.4 一维数组应用举例 121
9.5 二维数组的定义和二维数组元素的引用 129
9.5.1 二维数组的定义 129
9.5.2 二维数组元素的引用 130
9.5.3 二维数组的初始化 130
9.5.4 通过赋初值定义二维数组的大小 131
9.5.5 二维数组的定义和数组元素引用举例 131
9.6 二维数组和指针 132
9.6.1 二维数组和数组元素的地址 132
9.6.2 通过地址引用二维数组元素 133
9.6.3 通过建立一个指针数组引用二维数组元素 134
9.6.4 通过建立一个行指针引用二维数组元素 135
9.7 二维数组名和指针数组作为实参 135
9.7.1 二维数组名作为实参时实参和形参之间的数据传递 135
9.7.2 指针数组作为实参时实参和形参之间的数据传递 136
9.8 二维数组程序举例 136
习题 139
第10章 字符串 147
10.1 用一维字符数组存放字符串 148
10.1.1 通过赋初值的方式给一维字符数组赋字符串 149
10.1.2 在C程序执行过程中给一维字符数组赋字符串 150
10.2 使指针指向一个字符串 151
10.2.1 通过赋初值的方式使指针指向一个字符串 151
10.2.2 通过赋值运算使指针指向一个字符串 151
10.2.3 用字符数组作为字符串和用指针指向的字符串之间的区别 151
10.3 字符串的输入和输出 152
10.3.1 输入和输出字符串时的必要条件 152
10.3.2 用格式说明符%s进行整串输入和输出 152
10.3.3 调用gets、puts函数在终端输入或输出一行字符串 153
10.4 字符串数组 153
10.5 用于字符串处理的函数 155
10.6 程序举例 155
习题 159
第11章 对函数的进一步讨论 164
11.1 传给main函数的参数 164
11.2 通过实参向函数传递函数名或指向函数的指针变量 166
11.3 函数的递归调用 167
习题 170
第12章 C语言中用户标识符的作用域和存储类 174
12.1 局部变量、全局变量和存储分类 174
12.1.1 用户标识符的作用域 174
12.1.2 局部变量、全局变量和存储分类 175
12.2 局部变量及其作用域和生存期 175
12.2.1 auto变量 175
12.2.2 register变量 176
12.2.3 静态存储类的局部变量 177
12.3 全局变量及其作用域和生存期 177
12.3.1 全局变量的作用域和生存期 177
12.3.2 在同一编译单位内用extern说明符扩展全局变量的作用域 179
12.3.3 在不同编译单位内用extern说明符扩展全局变量的作用域 179
12.3.4 静态全局变量 180
12.4 函数的存储分类 180
12.4.1 用extern说明函数 180
12.4.2 用static说明函数 181
习题 181
第13章 编译预处理和动态存储分配 184
13.1 编译预处理 184
13.1.1 宏替换 185
13.1.2 文件包含 187
13.2 动态存储分配 187
13.2.1 malloc函数和free函数 188
13.2.2 calloc函数 189
习题 189
第14章 结构体、共用体和用户定义类型 192
14.1 用typedef说明一种新类型名 193
14.2 结构体类型 194
14.2.1 结构体类型的说明 194
14.2.2 结构体类型的变量、数组和指针变量的定义 195
14.2.3 给结构体变量、数组赋初值 197
14.2.4 引用结构体变量中的数据 198
14.2.5 函数之间结构体变量的数据传递 200
14.2.6 利用结构体变量构成链表 204
14.3 共用体 210
14.3.1 共用体类型的说明和变量定义 210
14.3.2 共用体变量的引用 211
习题 212
第15章 位运算 217
15.1 位运算符 217
15.2 位运算符的运算功能 218
习题 221
第16章 文件 222
16.1 C语言文件的概念 222
16.2 文件指针 224
16.3 打开文件 224
16.4 关闭文件 225
16.5 调用getc(fgetc)和putc(fputc)函数进行输入和输出 226
16.6 判断文件结束函数feof 228
16.7 fscanf函数和fprintf函数 228
16.8 fgets函数和fputs函数 229
16.9 fread函数和fwrite函数 230
16.10 文件定位函数 231
16.10.1 fseek函数 231
16.10.2 ftell函数 232
16.10.3 rewind函数 232
习题 232
附录1 考试指导 235
附录2 C语言的关键字 244
附录3 双目算术运算中两边运算量类型转换规律 245
附录4 运算符的优先级和结合性 246
附录5 常用字符与ASCII代码对照表 248
附录6 库函数 249
附录7 全国计算机等级考试二级C语言程序设计考试大纲(2018年版) 254
附录8 全国计算机等级考试二级C语言程序设计样题及参考答案 257
附录9 习题参考答案 270