第1章 基础知识 1
1.1 C程序的“特制砖头”结构 1
1.1.1 积木拼图游戏 1
1.1.2 “特制砖头”在C程序中的作用 2
1.1.3 C程序的运行过程 5
1.2 计算机的基本硬件组成 6
1.2.1 计算机的五大部件 6
1.2.2 存储器抽象结构 7
1.2.3 内存分区 8
1.3 计算机基本工作原理 8
1.4 计算机语言 9
1.5 ASCII码 10
1.6 算法和数据结构 11
1.7 编程风格 12
1.8 习题 12
第2章 表达式求值 14
2.1 程序示例 15
2.1.1 输出Hello World 15
2.1.2 简单表达式求值 17
2.1.3 求复杂表达式的值 18
2.2 相关语法 23
2.2.1 数据类型 23
2.2.2 常数 25
2.2.3 变量和标识符 28
2.2.4 运算符和表达式 34
2.2.5 类型转换规则 46
2.3 研究部分 48
2.3.1 程序陷阱 48
2.3.2 研究实例:用贪心算法高效求解纸币支付问题 50
2.4 习题 52
第3章 C程序控制结构 54
3.1 程序示例 54
3.1.1 if语句的使用 54
3.1.2 switch语句的使用 58
3.1.3 for循环语句的使用 62
3.2 相关语法 64
3.2.1 语句和语句块 64
3.2.2 三种基本结构概述 65
3.2.3 顺序结构 66
3.2.4 选择结构 66
3.2.5 循环结构 70
3.2.6 跳转语句 74
3.3 研究部分 76
3.3.1 程序陷阱 76
3.3.2 研究实例:暴力破解数字谜语 79
3.4 习题 82
第4章 函数 84
4.1 程序示例 84
4.1.1 函数调用示例 84
4.1.2 简单递归函数示例 87
4.1.3 复杂递归函数示例 89
4.1.4 外部变量示例 92
4.2 相关语法 95
4.2.1 函数 95
4.2.2 外部变量和内部变量 101
4.2.3 自顶向下程序设计 107
4.3 研究部分 107
4.3.1 程序陷阱 107
4.3.2 研究实例:高效计算2n 110
4.4 习题 111
第5章 数组和指针 113
5.1 程序示例 113
5.1.1 一维数组示例 113
5.1.2 指针数组示例 115
5.1.3 二维数组示例 118
5.1.4 数组作为函数参数示例 121
5.2 相关语法 123
5.2.1 数组 123
5.2.2 指针 128
5.2.3 数组和指针 133
5.2.4 字符数组和字符指针 136
5.3 研究部分 139
5.3.1 程序陷阱 139
5.3.2 研究实例:编程的艺术——求解兑换钱问题 144
5.4 习题 147
第6章 结构、联合、位段和枚举类型 149
6.1 程序示例 149
6.1.1 结构的使用 149
6.1.2 结构数组的使用 152
6.1.3 联合的使用 156
6.1.4 位段和类型别名声明的使用 160
6.1.5 枚举的使用 167
6.2 相关语法 171
6.2.1 结构 171
6.2.2 联合 179
6.2.3 枚举类型 181
6.2.4 类型别名声明:typedef 183
6.2.5 位段 184
6.3 研究部分 187
6.3.1 程序陷阱 187
6.3.2 研究实例:具有实用价值的最短路径问题 188
6.4 习题 193
第7章 预处理命令 195
7.1 程序示例 195
7.1.1 宏定义的使用 195
7.1.2 无参宏的使用 196
7.1.3 带参宏的使用 198
7.2 相关语法 199
7.2.1 文件包含 199
7.2.2 宏定义 200
7.2.3 条件编译 206
7.2.4 宏assert 209
7.3 研究部分 209
7.3.1 程序陷阱 209
7.3.2 研究实例:碰运气游戏 210
7.4 习题 216
第8章 文件 218
8.1 程序示例 219
8.1.1 文本文件的使用 219
8.1.2 二进制文件的使用 222
8.2 相关语法 226
8.2.1 文件指针 226
8.2.2 文件的打开与关闭 228
8.2.3 文件检测函数 230
8.2.4 文件操作函数 230
8.2.5 随机读写文件 233
8.3 研究部分 234
8.3.1 程序陷阱 234
8.3.2 研究实例:人事管理系统 234
8.4 习题 242
附录A高级主题 244
A.1变长参数列表 244
A.2命令行参数 246
A.3用exit()函数退出程序的执行 247
A.4动态内存分配与释放 248
A.4.1 动态内存分配函数:malloc() 248
A.4.2 动态内存释放函数:free() 249
A.4.3 动态内存处理实例:线性链表 249
A.5指针的深入讨论 252
A.5.1 指向函数的指针变量 252
A.5.2 返回指针的函数 254
A.6格式化输出/输入讨论 255
A.6.1 格式化输出printf()函数 255
A.6.2 格式化输入scanf()函数 258
A.7研究部分:程序陷阱 261
A.8习题 261
参考文献 265