第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
习题 6
第2章 C程序设计的初步知识 7
2.1 简单C语言程序的构成和格式 7
2.2 标识符、常量和变量 8
2.2.1 标识符 8
2.2.2 常量 9
2.2.3 符号常量 9
2.2.4 变量 10
2.3 整型数据 10
2.3.1 整型常量 10
2.3.2 整型变量 11
2.3.3 整型数据的分类 11
2.3.4 整数在内存中的存储形式 12
2.4 实型数据 13
2.4.1 实型常量 13
2.4.2 实型变量 13
2.5 算术表达式 14
2.5.1 基本的算术运算符 14
2.5.2 运算符的优先级、结合性和算术表达式 14
2.5.3 强制类型转换表达式 15
2.6 赋值表达式 16
2.6.1 赋值运算符和赋值表达式 16
2.6.2 复合赋值表达式 17
2.6.3 赋值运算中的类型转换 17
2.7 自加、自减运算符和逗号运算符 18
2.7.1 自加运算符“++”和自减运算符“--” 18
2.7.2 逗号运算符和逗号表达式 19
习题 19
第3章 顺序结构 22
3.1 赋值语句 22
3.2 数据输出 22
3.2.1 printf函数的一般调用形式 22
3.2.2 printf函数中常用的格式说明 23
3.2.3 使用printf函数时的注意事项 27
3.3 数据输入 27
3.3.1 scanf函数的一般调用形式 27
3.3.2 scanf函数中常用的格式说明 28
3.3.3 通过scanf函数从键盘输入数据 29
3.4 复合语句和空语句 30
3.4.1 复合语句 30
3.4.2 空语句 31
3.5 程序举例 31
习题 32
第4章 选择结构 35
4.1 关系运算和逻辑运算 35
4.1.1 C语言的逻辑值 35
4.1.2 关系运算符和关系表达式 35
4.1.3 逻辑运算符和逻辑表达式 36
4.2 if语句和用if语句构成的选择结构 37
4.2.1 if语句 37
4.2.2 嵌套的if语句 40
4.3 条件表达式构成的选择结构 42
4.4 switch语句以及用switch语句和break语句构成的选择结构 43
4.4.1 switch语句 43
4.4.2 switch语句的执行过程 44
4.4.3 在switch语句体中使用break语句 45
4.5 语句标号和goto语句 45
4.5.1 语句标号 45
4.5.2 goto语句 46
习题 46
第5章 循环结构 50
5.1 while语句和用while语句构成的循环结构 50
5.1.1 while循环的一般形式 50
5.1.2 while循环的执行过程 50
5.2 do-while语句和用do-while语句构成的循环结构 53
5.2.1 do-while语句构成的循环结构 53
5.2.2 do-while循环的执行过程 54
5.3 for语句和用for语句构成的循环结构 55
5.3.1 for语句构成的循环结构 55
5.3.2 for循环的执行过程 55
5.3.3 有关for语句的说明 55
5.4 循环结构的嵌套 57
5.5 break和continue语句在循环体中的作用 59
5.5.1 break语句 59
5.5.2 continue语句 60
5.6 程序举例 61
习题 62
第6章 字符型数据 67
6.1 字符型常量 67
6.1.1 字符常量 67
6.1.2 转义字符常量 67
6.1.3 字符串常量 68
6.1.4 可对字符量进行的运算 68
6.2 字符变量 69
6.3 字符的输入和输出 69
6.3.1 调用printf和scanf函数输出和输入字符 69
6.3.2 调用putchar和getchar函数输出和输入字符 70
6.4 程序举例 71
习题 73
第7章 函数 76
7.1 库函数 76
7.2 函数的定义和返回值 77
7.2.1 函数定义的语法 77
7.2.2 函数的返回值 78
7.3 函数的调用 79
7.3.1 函数的两种调用方式 79
7.3.2 函数调用时的语法要求 79
7.4 函数的说明 80
7.4.1 函数说明的形式 80
7.4.2 函数说明的位置 81
7.5 调用函数和被调用函数之间的数据传递 81
7.6 程序举例 83
习题 87
第8章 地址和指针 92
8.1 变量的地址和指针 92
8.2 指针变量的定义和指针变量的基类型 93
8.3 给指针变量赋值 94
8.3.1 给指针变量赋地址值 94
8.3.2 给指针变量赋“空”值 95
8.4 对指针变量的操作 95
8.4.1 通过指针来引用一个存储单元 95
8.4.2 移动指针 97
8.4.3 指针比较 98
8.5 函数之间地址值的传递 99
8.5.1 形参为指针变量时实参和形参之间的数据传递 99
8.5.2 通过传送地址值在被调用函数中直接改变调用函数中的变量的值 100
8.5.3 函数返回地址值 101
习题 101
第9章 数组 106
9.1 一维数组的定义和一维数组元素的引用 106
9.1.1 一维数组的定义 106
9.1.2 一维数组元素的引用 107
9.1.3 一维数组的初始化 107
9.1.4 通过赋初值定义数组的大小 108
9.1.5 一维数组的定义和数组元素引用举例 108
9.2 一维数组和指针 109
9.2.1 一维数组和数组元素的地址 109
9.2.2 通过数组的首地址引用数组元素 110
9.2.3 通过指针引用一维数组元素 110
9.2.4 用带下标的指针变量引用一维数组元素 111
9.3 函数之间对一维数组和数组元素的引用 111
9.3.1 数组元素作实参 111
9.3.2 数组名作实参 111
9.3.3 数组元素地址作为实参 113
9.3.4 函数的指针形参和函数体中数组的区别 114
9.4 一维数组应用举例 115
9.5 二维数组的定义和二维数组元素的引用 123
9.5.1 二维数组的定义 123
9.5.2 二维数组元素的引用 124
9.5.3 二维数组的初始化 124
9.5.4 通过赋初值定义二维数组的大小 125
9.5.5 二维数组的定义和数组元素引用举例 125
9.6 二维数组和指针 126
9.6.1 二维数组和数组元素的地址 126
9.6.2 通过地址引用二维数组元素 127
9.6.3 通过建立一个指针数组引用二维数组元素 128
9.6.4 通过建立一个行指针引用二维数组元素 129
9.7 二维数组名和指针数组作为实参 129
9.7.1 二维数组名作为实参时实参和形参之间的数据传递 129
9.7.2 指针数组作为实参时实参和形参之间的数据传递 130
9.8 二维数组程序举例 130
习题 133
第10章 字符串 141
10.1 用一维字符数组存放字符串 141
10.1.1 通过赋初值的方式给一维字符数组赋字符串 142
10.1.2 在C程序执行过程中给一维字符数组赋字符串 143
10.2 使指针指向一个字符串 144
10.2.1 通过赋初值的方式使指针指向一个字符串 144
10.2.2 通过赋值运算使指针指向一个字符串 144
10.2.3 用字符数组作为字符串和用指针指向的字符串之间的区别 144
10.3 字符串的输入和输出 145
10.3.1 输入和输出字符串时的必要条件 145
10.3.2 用格式说明符%s进行整串输入和输出 145
10.3.3 调用gets、puts函数在终端输入或输出一行字符串 146
10.4 字符串数组 146
10.5 用于字符串处理的函数 148
10.6 程序举例 148
习题 152
第11章 对函数的进一步讨论 157
11.1 传给main函数的参数 157
11.2 通过实参向函数传递函数名或指向函数的指针变量 158
11.3 函数的递归调用 160
习题 163
第12章 C语言中用户标识符的作用域和存储类 167
12.1 局部变量、全局变量和存储分类 167
12.1.1 用户标识符的作用域 167
12.1.2 局部变量、全局变量和存储分类 167
12.2 局部变量及其作用域和生存期 168
12.2.1 auto变量 168
12.2.2 register变量 169
12.2.3 静态存储类的局部变量 170
12.3 全局变量及其作用域和生存期 170
12.3.1 全局变量的作用域和生存期 170
12.3.2 在同一编译单位内用extern说明符扩展全局变量的作用域 171
12.3.3 在不同编译单位内用extern说明符扩展全局变量的作用域 172
12.3.4 静态全局变量 172
12.4 函数的存储分类 173
12.4.1 用extern说明函数 173
12.4.2 用static说明函数 173
习题 174
第13章 编译预处理和动态存储分配 177
13.1 编译预处理 177
13.1.1 宏替换 177
13.1.2 文件包含 179
13.2 动态存储分配 180
13.2.1 malloc函数和free函数 180
13.2.2 calloc函数 181
习题 182
第14章 结构体、共用体和用户定义类型 185
14.1 用typedef说明一种新类型名 185
14.2 结构体类型 186
14.2.1 结构体类型的说明 186
14.2.2 结构体类型的变量、数组和指针变量的定义 187
14.2.3 给结构体变量、数组赋初值 189
14.2.4 引用结构体变量中的数据 190
14.2.5 函数之间结构体变量的数据传递 192
14.2.6 利用结构体变量构成链表 196
14.3 共用体 202
14.3.1 共用体类型的说明和变量定义 202
14.3.2 共用体变量的引用 203
习题 204
第15章 位运算 209
15.1 位运算符 209
15.2 位运算符的运算功能 210
习题 212
第16章 文件 214
16.1 C语言文件的概念 214
16.2 文件指针 215
16.3 打开文件 216
16.4 关闭文件 217
16.5 调用getc(fgetc)和putc(fputc)函数进行输入和输出 217
16.6 判断文件结束函数feof 219
16.7 fscanf函数和fprintf函数 220
16.8 fgets函数和fputs函数 221
16.9 fread函数和fwrite函数 221
16.10 文件定位函数 222
16.10.1 fseek函数 222
16.10.2 ftell函数 223
16.10.3 rewind函数 224
习题 224
第17章 上机指导 226
17.1 上机考试系统使用说明 226
17.1.1 上机考试环境 226
17.1.2 上机考试时间 226
17.1.3 上机考试题型及分值 227
17.1.4 上机考试登录 227
17.1.5 试题内容查阅工具的使用 230
17.1.6 编译、连接和运行 231
17.1.7 考生文件夹和文件的恢复 232
17.1.8 文件名的说明 232
17.2 上机考试内容 232
17.2.1 程序填空题 232
17.2.2 程序修改题 233
17.2.3 程序设计题 235
习题 237
附录1 全国计算机等级考试二级C语言程序设计考试大纲(2007年版) 243
附录2 全国计算机等级考试二级C语言程序设计样题及参考答案 246
附录3 2007年4月全国计算机等级考试二级C语言程序设计笔试试题及参考答案 252
附录4 C语言的关键字 267
附录5 双目算术运算中两边运算量类型转换规律 268
附录6 运算符的优先级和结合性 269
附录7 常用字符与ASCII代码对照表 271
附录8 库函数 272
附录9 习题参考答案 277