第1章 程序设计概述 1
1.1 程序与程序设计语言 1
1.1.1 程序 1
1.1.2 程序设计语言 1
1.1.3 C语言的发展过程及特点 2
1.2 算法与算法描述 3
1.2.1 算法的概念 3
1.2.2 算法的描述 3
1.3 程序设计步骤 6
1.4 小结 6
习题1 6
第2章 C语言程序设计基础 7
2.1 C语言程序的基本组成结构 7
2.2 C语言的字符集与标识符 9
2.3 C语言程序上机过程 10
2.4 C语言的基本数据类型 12
2.4.1 常量与变量 12
2.4.2 整型数据 14
2.4.3 浮点型数据 15
2.4.4 字符型数据 16
2.5 算术运算符与表达式 17
2.5.1 算术运算符与算术表达式 18
2.5.2 赋值运算符与赋值表达式 18
2.5.3 自加/自减运算符 18
2.6 数据类型转换 19
2.6.1 自动类型转换 19
2.6.2 强制类型转换 20
2.7 C语句概述 20
2.8 数据输入与输出 22
2.8.1 格式化输出函数printf() 22
2.8.2 格式化输入函数scanf() 24
2.8.3 字符输入输出函数 26
2.9 初学者常犯的语法错误 26
2.10 扩充内容 27
2.10.1 数据的存储形式 27
2.10.2 浮点型数据的精度 30
2.10.3 如何求变量的字节数 30
2.10.4 运算符的合理使用 31
2.10.5 键盘缓冲区残留问题及解决方法 31
2.11 小结 32
习题2 33
第3章 C语言的基本控制结构 35
3.1 顺序结构 35
3.2 选择结构 37
3.2.1 关系运算符与关系表达式 37
3.2.2 逻辑运算符与逻辑表达式 38
3.2.3 if语句 40
3.2.4 if语句的嵌套 42
3.2.5 初学者常犯的else配对错误 45
3.2.6 条件运算符 46
3.2.7 switch语句 46
3.2.8 选择结构程序举例 49
3.3 循环结构 51
3.3.1 while语句 51
3.3.2 for语句 53
3.3.3 do...while语句 54
3.3.4 三种循环语句比较 55
3.3.5 break语句和continue语句 56
3.3.6 循环的嵌套 59
3.3.7 循环结构程序举例 62
3.4 扩充内容 69
3.4.1 如何在内层循环中结束整个循环 69
3.4.2 数据类型的正确使用 71
3.4.3 输入数据的有效性检查及处理 73
3.5 小结 74
习题3 74
第4章 数组 77
4.1 一维数组 77
4.1.1 一维数组的定义 77
4.1.2 一维数组的初始化 78
4.1.3 一维数组元素的引用 79
4.1.4 一维数组应用举例 80
4.2 二维数组 82
4.2.1 二维数组的定义 82
4.2.2 二维数组的初始化 82
4.2.3 二维数组元素的引用 84
4.2.4 二维数组应用举例 84
4.3 扩充内容 86
4.3.1 数组的越界问题 86
4.3.2 排序问题 88
4.3.3 查找问题 91
4.4 小结 95
习题4 96
第5章 函数 98
5.1 函数分类 98
5.2 函数定义与调用 99
5.2.1 函数定义 99
5.2.2 函数调用 100
5.3 数组作为函数的参数 102
5.3.1 一维数组作为函数形参 102
5.3.2 二维数组作为函数形参 104
5.4 函数的递归调用 105
5.5 函数应用举例 107
5.6 变量的作用域与生存期 109
5.6.1 变量的作用域 110
5.6.2 变量的生存期 111
5.7 内部函数与外部函数 112
5.8 编译预处理 113
5.8.1 宏定义 113
5.8.2 文件包含 116
5.8.3 条件编译 117
5.9 扩充内容 118
5.9.1 随机数的产生与应用 118
5.9.2 函数设计需注意的问题 119
5.10 小结 120
习题5 121
第6章 指针 123
6.1 地址与指针 123
6.2 指针变量 124
6.2.1 指针变量的定义 124
6.2.2 指针变量的赋值 125
6.2.3 指针变量的引用 126
6.2.4 指针变量的运算 127
6.2.5 多级指针 129
6.2.6 空类型指针 130
6.3 指针与数组 131
6.3.1 指针与一维数组 131
6.3.2 指针与二维数组 133
6.4 指针与字符串 137
6.4.1 字符串与字符数组 137
6.4.2 字符指针 140
6.5 指针与函数 141
6.5.1 指针变量作为函数参数 142
6.5.2 函数返回值为指针 143
6.5.3 指向函数的指针(函数指针) 145
6.6 指针数组 146
6.6.1 指针数组定义与应用 146
6.6.2 指针数组与命令行参数 148
6.7 动态内存分配 150
6.8 常见的指针使用错误 153
6.9 小结 155
习题6 155
第7章 结构体与共用体 158
7.1 结构体类型 158
7.1.1 结构体类型定义 158
7.1.2 结构体变量 160
7.1.3 用typedef定义数据类型 162
7.1.4 结构体类型应用 163
7.2 结构体数组 164
7.2.1 结构体数组定义 164
7.2.2 结构体数组初始化 165
7.3 结构体指针 166
7.3.1 指向结构体变量的指针 166
7.3.2 指向结构体数组元素的指针 167
7.4 结构体与函数 168
7.4.1 结构体变量作为函数参数 168
7.4.2 指向结构体变量的指针作为函数参数 169
7.5 链表 170
7.5.1 链表概念 170
7.5.2 链表的基本操作 171
7.5.3 链表应用 175
7.6 共用体 182
7.6.1 共用体类型定义 182
7.6.2 共用体变量 182
7.6.3 共用体类型应用 184
7.7 扩充内容 185
7.7.1 位段与位运算符 185
7.7.2 如何验证数据在内存的存储形式 190
7.7.3 系统当前时间的获取 191
7.8 小结 192
习题7 193
第8章 文件 196
8.1 文件概述 196
8.1.1 文件的概念 196
8.1.2 缓冲文件系统 197
8.2 文件的打开与关闭 197
8.2.1 文件的打开 197
8.2.2 文件的关闭 199
8.3 文件的读写 199
8.3.1 按字符读写文件 199
8.3.2 按格式读写文件 204
8.3.3 按数据块读写文件 207
8.4 文件的随机读写 210
8.5 扩充内容 211
8.5.1 fgets()函数应用的进一步讨论 211
8.5.2 标准输入/输出的重定向 214
8.6 小结 215
习题8 215
自测题1 218
自测题2 225
附录1 C语言关键字 233
附录2 C语言运算符以及优先级 234
附录3 ASCII码表 236
附录4 常用C语言标准函数 237
参考文献 242