第1章 C语言导论 1
1.1 第一个C语言程序 1
目录 1
1.2 应用举例:长度转换 2
1.3 标识符 6
1.4 while语句 7
1.5 do while语句 10
1.6 应用举例:计算所得税 11
1.7 if语句 13
1.8 深入介绍if语句 19
1.9 输入和输出重定向 24
1.10 文件 26
常见编程错误 27
编程练习 28
2.1 字符和整数 30
第2章 变量、运算符和流程控制 30
2.2 浮点变量 38
2.3 算术运算 42
2.4 关系运算符、逻辑运算符和赋值运算符 46
2.5 应用举例:统计测量 52
2.6 for语句和逗号运算符 55
2.7 运算符++和-- 58
2.8 应用举例:打印条形图 61
常见编程错误 63
编程练习 64
第3章 运算符和流程控制 67
3.1 break和continue语句 67
3.2 应用举例:产生素数 71
3.3 switch语句 73
3.4 goto语句和标号 79
3.5 条件表达式 80
3.6 应用举例:打印日历 81
3.7 强制类型转换 84
3.8 运算符sizeof 85
3.9 getchar和putchar 86
3.10 位运算符 89
3.10.1 位取反运算符 90
3.10.2 位逻辑运算符 90
3.10.3 位移位运算符 91
常见编程错误 95
编程练习 96
第4章 函数和程序结构 98
4.1 简介 98
4.1.1 函数术语 99
4.1.3 函数声明 101
4.1.2 return语句 101
4.1.4 main函数 103
4.1.5 源文件中的函数 104
4.1.6 函数和程序设计 105
4.2 实际参数和形式参数 107
4.2.1 形式参数和实际参数的匹配 108
4.2.2 计算参数值的顺序 108
4.3 传值调用 109
4.4 应用举例:计算电阻 112
4.5 变量的作用范围 116
4.6 预处理器 117
4.6.1 文件包含 118
4.6.2 使用单个文件包含 119
4.6.3 宏 119
4.6.5 带参数的宏与函数的比较 121
4.6.4 带参数的宏 121
4.6.6 宏的便利性 123
4.6.7 其余命令 123
4.7 应用举例:模拟一个掷骰子游戏 129
4.8 递归 135
4.9 应用举例:递归拼贴 144
4.10 参数数目可变的函数 151
常见编程错误 155
编程练习 159
第5章 数组 164
5.1 为何引入数组 164
5.2 数组下标和单元偏移 164
5.2.1 数组与指针 168
5.2.2 sizeof运算符和数组 170
5.3 应用举例:跟踪和报告汽车销售情况 172
5.4 字符型数组作为字符串 177
5.5 应用举例:用给定的行长度格式化文本 181
5.6 数组作为函数参数 183
5.7 字符串处理函数 187
5.7.1 strcat,strncat 187
5.7.2 strcmp,strncmp 188
5.7.3 strcpy,strncpy 190
5.7.4 strlen 191
5.7.5 strstr,strchr,strrchr 191
5.8 应用举例:计算字符串的长度 196
5.9 多维数组 196
5.9.1 概述 196
5.9.2 多维数组的方便性 197
5.9.3 多维数组是由数组构成的数组 198
5.9.5 多维数组用作参数 199
5.9.4 多维数组的初始化 199
5.10 应用举例:矩阵乘法 201
5.11 应用举例:排序和查找 205
5.12 应用举例:森林火势蔓延的模拟 210
常见编程错误 215
编程练习 217
第6章 指针 224
6.1 指针变量 224
6.1.1 指针变量概述 224
6.1.2 指针初始化 230
6.1.3 对地址运算符的限制 231
6.2 多级间接访问 233
6.3 指针与数组 236
6.3.1 字符指针与字符数组 237
6.3.2 数组与指针的算术运算 239
6.3.3 指针运算 242
6.3.4 指向数组单元的指针的界 246
6.3.5 数组和指针语法的等价性 247
6.3.6 数组形式和指针形式的混合 247
6.4 指针作为函数的参数 252
6.5 应用举例:反转字符串 261
6.6 应用举例:并行计算 264
6.7 指针与多维数组 272
6.8 命令行参数 275
6.9 指向函数的指针 277
6.10 应用举例:对排序算法进行比较 279
常见编程错误 283
编程练习 285
7.1 单一源文件中的存储类别:auto,extern,static 290
7.1.1 auto 290
第7章 存储类别和类型限定 290
7.1.2 extern 291
7.1.3 static 292
7.2 应用举例:文本分页 297
7.3 存储类别register 300
7.4 多个源文件中的存储类别 301
7.5 应用举例:交互式计算器 306
7.6 块的嵌套 312
7.7 函数存储类别 315
7.8 类型限定符:const和volatile 317
7.8.1 类型限定符的用法 317
7.8.2 const 318
7.8.3 const变量和宏 319
7.8.5 const指针参数 320
7.8.4 const的局限性 320
7.8.6 volatile 321
7.8.7 类型限定符的组合用法 321
7.8.8 类型限定符和编译器的优化 325
7.9 应用举例:安排活动计划 327
常见编程错误 332
编程练习 333
第8章 输入和输出 337
8.1 文件的打开和关闭 337
8.2 字符输入/输出 341
8.2.1 fgetc,getc,getchar 341
8.2.2 fputc,putc,putchar 341
8.3 应用举例:以字节为单位确定源文件的长度 343
8.4 字符串输入/输出 344
8.4.1 fgets,gets 344
8.4.2 fputs,puts 346
8.5 格式化输入/输出 347
8.5.1 scanf,fscanf,sscanf 347
8.5.2 printf,fprintf,sprintf 352
8.5.3 字符转换以及字符检测函数 358
8.6 非格式化输入/输出 361
8.6.1 fwrite 361
8.6.2 fread 361
8.7 文件的定位函数:fseek,ftell,rewind 362
练习 364
8.8 应用举例:随机访问文件 366
常见编程错误 376
编程练习 376
第9章 结构、联合和枚举类型 381
9.1 结构介绍 381
9.2 应用举例:模式识别 389
9.3 typedef构造 394
9.3.1 typedef的一般用法 394
9.3.2 typedef和代码的可移植性 395
9.3.3 typedef和结构 395
9.4 对结构的操作 397
9.4.1 初始化结构的成员 397
9.4.2 赋值运算符应用于结构变量 398
9.5 结构指针、结构嵌套和自指结构 400
9.5.1 结构指针 400
9.5.2 结构嵌套 403
9.5.3 自指结构 404
9.6 结构和函数 406
9.6.1 通过传值方式传递结构 406
9.6.2 传递指向结构的指针 409
9.6.3 结构作为常量参数 411
9.7 应用举例:销售报表 413
9.8 联合与位字段 428
9.8.1 联合 428
9.8.2 位字段 430
9.9 枚举类型 432
常见编程错误 434
编程练习 437
第10章 数据结构简介 440
10.1 编译时和运行时的存储分配 441
10.1.1 malloc:一个用于运行时存储分配的函数 441
10.1.2 calloc:另一个用于运行时存储分配的函数 443
10.1.3 访问运行时分配的存储空间 443
10.1.4 释放运行时分配的存储空间 444
10.1.5 无用单元 445
10.2.1 链表的组成和结构 447
10.2 链表 447
10.2.2 运行时结点的动态分配 451
10.2.3 对链表的操作 454
10.3 应用举例:文本编辑器 459
10.4 栈和队列 473
10.4.1 栈 474
10.4.2 队列 479
10.5 应用举例:中缀表达式转换成后缀表达式 484
10.6 图和树 491
10.6.1 图 491
10.6.2 树 493
10.7 树的遍历 497
10.7.1 3种二叉树的遍历算法 497
10.7.2 二叉树的表示 499
10.8.1 两种搜索方法的基本原理 502
10.8.2 广度优先搜索的实现 502
10.8 广度优先搜索和深度优先搜索 502
10.9 应用举例:图的启发式搜索 512
常见编程错误 523
编程练习 523
第11章 高级话题 529
11.1 断言 529
11.2 异常处理和跳转 534
11.3 C的图形支持 540
11.3.1 视频显示器 540
11.3.2 控制 541
11.3.3 出错处理 542
11.3.4 画图 542
11.3.5 文本输出 543
11.3.7 状态 544
11.4 应用举例:碎片绘制 544
11.3.6 颜色设置 544
11.5 C和C++ 551
11.5.1 面向对象设计 551
11.5.2 类和抽象数据类型 553
11.5.3 继承 555
11.5.4 多态 557
11.5.5 C++程序举例 558
编程练习 564
附录A ASCII与EBCDIC码表 566
附录B C语言概要 573
附录C C语言语法图解 583
附录D C的部分库函数 597
附录E C和UNIX 615
附录F Microsoft Visual C++和Borland C++Builder 625
附录G 传统C的变化 629
编号为奇数的练习解答 632