第1章 编写ASNI C程序 1
1.1 准备编程 1
1.2 第一个程序 2
1.3 变量、表达式和赋值 5
1.4 初始化 8
1.5 #define和#include的用法 8
1.6 printf()和scanf()的用法 9
1.6.1 printf()的用法 10
1.6.2 scanf()的用法 11
1.7 while语句 13
1.8 问题求解:计算总和 14
1.9 风格 15
1.10 常见的编程错误 16
1.11 系统考虑 17
1.11.1 编写和运行C程序 17
1.11.2 中断程序 18
1.11.3 输入文件尾标识 18
1.11.4 输入和输出的重定向 18
1.12 转向C++ 19
小结 20
练习 20
第2章 词法元素、运算符和C系统 26
2.1 字符和词法元素 27
2.2 注释 28
2.3 关键字 29
2.4 标识符 29
2.5 常量 30
2.6 串常量 31
2.7 运算符和标点符号 31
2.8 运算符的优先级和结合性 32
2.9 增量运算符和减量运算符 33
2.10 赋值运算符 34
2.11 例子:计算2的幂 36
2.12 C系统 36
2.12.1 预处理器 37
2.12.2 标准库 37
2.13 风格 39
2.14 常见的编程错误 40
2.15 系统考虑 41
2.16 转向C++ 42
小结 42
练习 43
第3章 控制流 48
3.1 关系、等式和逻辑运算符 48
3.2 关系运算符和表达式 49
3.3 等式运算符和表达式 50
3.4 逻辑运算符和表达式 50
3.5 复合语句 53
3.6 空语句 53
3.7 if和if-else语句 53
3.8 while语句 56
3.9 问题求解:找量大值 57
3.10 for语句 58
3.11 问题求解:组合数学 59
3.12 问题求解:布尔变量 61
3.13 逗号运算符 61
3.14 do语句 62
3.15 goto语句 63
3.16 break和continue语句 64
3.17 switch语句 65
3.18 嵌套的控制流 65
3.19 条件运算符 66
3.20 风格 67
3.21 常见的编程错误 68
3.22 系统考虑 70
3.23 转向C++ 71
小结 71
练习 72
第4章 函数和结构化编程 78
4.1 函数调用 78
4.2 函数定义 78
4.3 return语句 80
4.4 函数原型 82
4.5 自顶向下设计 83
4.6 程序的正确性:assert()宏 86
4.7 从编译器的角度来看函数声明 87
4.8 问题求解:随机数 88
4.9 函数定义次序的可选风格 89
4.10 开发一个大程序 90
4.11 模拟:正反面游戏 93
4.12 调用和按值调用 95
4.13 递归 96
4.14 风格 97
4.15 常见的编程错误 97
4.16 系统考虑 99
4.17 转向C++ 100
小结 102
练习 103
第5章 字符处理 110
5.1 数据类型char 110
5.2 getchar()和putchar()的用法 112
5.3 例子:大写 115
5.4 ctype.h中的宏 117
5.5 问题求解:重复字符 117
5.6 问题求解:对单词计数 118
5.7 风格 120
5.8 常见的编程错误 121
5.9 系统考虑 122
5.10 转向C++ 123
小结 125
练习 125
第6章 基本数据类型 128
6.1 声明和表达式 128
6.2 基本数据类型 128
6.3 字符和数据类型char 129
6.4 数据类型int 130
6.5 整数类型short、long和unsigned 131
6.6 浮点类型 132
6.7 sizeof运算符 134
6.8 数学函数 134
6.9 转换和类型转换 136
6.9.1 整型提升 136
6.9.2 常用的算术转换 136
6.9.3 类型转换 137
6.10 问题求解:计算利息 138
6.11 风格 141
6.12 常见的编程错误 142
6.13 系统考虑 143
6.14 转向C++ 143
小结 144
练习 145
第7章 枚举类型和typedef 151
7.1 枚举类型 151
7.2 typedef的用法 152
7.3 例子:石头、剪刀、布游戏 154
7.4 风格 158
7.5 常见的编程错误 159
7.6 系统考虑 160
7.7 转向C++ 160
小结 160
练习 161
第8章 函数、指针和存储类型 165
8.1 指针声明和赋值 165
8.2 地址和间接访问 166
8.3 指向void的指针 169
8.4 引用调用 170
8.5 作用域规则 171
8.6 存储类型 172
8.6.1 存储类型auto 172
8.6.2 存储类型extern 172
8.6.3 存储类型register 174
8.6.4 存储类型static 174
8.7 静态外部变量 175
8.8 缺省的初始化 176
8.9 例子:字符处理 176
8.10 函数声明和函数定义 179
8.11 类型限定符const和volatile 179
8.12 风格 180
8.13 常见的编程错误 181
8.14 系统考虑 182
8.15 转向C++ 183
小结 184
练习 185
第9章 数组和指针 190
9.1 一维数组 190
9.1.1 初始化 191
9.1.2 下标 192
9.2 例子:分别对每个字母计数 192
9.3 数组和指针间的关系 194
9.4 指针运算和元素尺寸 195
9.5 把数组传递给函数 195
9.6 排序算法:冒泡排序 196
9.7 二维数组 197
9.8 多维数组 199
9.9 动态内存分配 200
9.10 风格 201
9.11 常见的编程错误 203
9.12 系统考虑 203
9.13 转向C++ 204
小结 205
练习 206
第10章 串和指针 211
10.1 串结束标志 211
10.2 串的初始化 212
10.3 例子:心情愉快 212
10.4 用指针处理串 214
10.5 问题求解:单词计数 217
10.6 把参数传递给main() 218
10.7 标准库中的串处理函数 218
10.8 风格 220
10.9 常见的编程错误 220
10.10 系统考虑 221
10.11 转向C++ 221
小结 221
练习 222
第11章 递归 225
11.1 递归问题求解 225
11.2 例子:在屏幕上绘制图案 228
11.3 用递归处理串 229
11.4 分而治之方法 230
11.5 例子:汉字诺塔 231
11.6 风格 237
11.7 常见的编程错误 238
11.8 系统考虑 239
11.9 转向C++ 239
小结 240
练习 240
第12章 结构和抽象数据类型 245
12.1 声明结构 245
12.2 访问成员 246
12.3 运算符的优先级和结合性:总结 248
12.4 结构、函数和赋值 249
12.5 问题求解:学生记录 251
12.6 结构的初始化 253
12.7 typedef的用法 253
12.8 自引用结构 254
12.9 线性链表 255
12.10 对链表的操作 256
12.11 计数和查找 257
12.12 插入和删除 258
12.13 风格 259
12.14 常见的编程错误 260
12.15 系统考虑 260
12.16 转向C++ 261
小结 266
练习 266
第13章 输入/输出和文件 269
13.1 输出函数printf() 269
13.2 输入函数scanf() 272
13.2.1 控制串中的指示 273
13.2.2 普通字符 273
13.2.3 空白字符 273
13.2.4 转换说明 273
13.2.5 输入流中的浮点数 275
13.2.6 使用扫描集 275
13.2.7 返回值 276
13.2.8 一个scanf()的例子 276
13.3 函数sprintf()和sscanf() 277
13.4 函数fprintf()和fscanf() 277
13.5 访问文件 278
13.6 例子:对文件行距加倍 279
13.7 使用临时文件和得体的函数 281
13.8 随机地访问文件 283
13.9 风格 284
13.10 常见的编程错误 285
13.11 系统考虑 286
13.12 转向C++ 287
小结 289
练习 290
第14章 软件工具 295
14.1 在C程序中执行命令 295
14.2 环境变量 296
14.3 C编译器 297
14.4 创建库 299
14.5 使用profiler 300
14.6 关于时间的编码 303
14.7 dbx的用法 305
14.8 make的用法 306
14.9 touch的用法 309
14.10 其他有用的工具 309
14.11 风格 310
14.12 常见的编程错误 310
14.13 系统考虑 311
小结 311
练习 312
第15章 从C到C++ 315
15.1 为什么转到C++ 315
15.2 类和抽象数据类型 317
15.3 重载 318
15.4 构造器和析构器 320
15.5 继承 321
15.6 多态性 322
15.7 模板 324
15.8 C++中的异常 325
15.9 面向对象编程的益处 325
15.10 风格 325
15.11 常见的编程错误 326
15.12 系统考虑 326
小结 326
练习 327
附录A 标准库 329
附录B 预处理器 354
附录C 位运算符 363
附录D ANSI C与传统C的比较 375
附录E ASCII字符编码表 380
附录F 运算符的优先级和结合性 381
索引 382