第0章 从零开始 1
0.1为什么要用C 1
0.2 ANSI C标准 2
0.3从C到C++ 3
0.4从C和C++到Java 3
第1章 C语言概述 4
1.1编程和预备知识 4
1.2程序输出 4
1.3变量、表达式和赋值 7
1.4使用#define和#include 9
1.5使用printf()和scanf() 12
1.6控制流 14
1.7函数 19
1.8数组、字符串和指针 24
1.8.1数组 24
1.8.2字符串 25
1.8.3指针 28
1.9文件 31
1.10与操作系统有关的内容 35
1.10.1编写和运行C程序 35
1.10.2中断程序 36
1.10.3输入文件尾标志 37
1.10.4输入和输出的重定向 37
1.11总结 38
1.12练习 39
第2章 词法元素、操作符和C系统 45
2.1字符和词法元素 46
2.2语法规则 48
2.3注释 49
2.4关键字 50
2.5标识符 50
2.6常量 51
2.7字符串常量 52
2.8操作符和标点符号 53
2.9操作符的优先级和结合性 53
2.10增值操作符和减值操作符 55
2.11赋值操作符 56
2.12例子:计算2的乘方 57
2.13 C系统 58
2.13.1预处理器 59
2.13.2标准函数库 59
2.14总结 62
2.15 练习 63
第3章 基本数据类型 69
3.1声明、表达式和赋值 69
3.2基本数据类型 71
3.3字符和char数据类型 72
3.4 int数据类型 75
3.5整数类型short、long和unsigned 76
3.6浮点类型 77
3.7 typedef的用法 79
3.8 sizeof操作符 79
3.9使用getchar()和putchar() 80
3.10数学函数 82
3.10.1使用abs()和fabs() 84
3.10.2 UNIX和数学函数库 84
3.11隐式类型转换和强制类型转换 84
3.11.1整型提升 85
3.11.2寻常算术转换 85
3.11.3强制类型转换 86
3.12十六进制和八进制常量 87
3.13总结 89
3.14练习 89
第4章 控制流 96
4.1关系操作符、相等操作符和逻辑操作符 96
4.2关系操作符和表达式 97
4.3相等操作符和表达式 99
4.4逻辑操作符和表达式 100
4.5复合语句 103
4.6表达式和空语句 103
4.7 if和if-else语句 104
4.8 while语句 106
4.9 for语句 108
4.10例子:布尔变量 110
4.11逗号操作符 111
4.12 do语句 112
4.13例子:斐波那契数 113
4.14 goto语句 115
4.15 break和continue语句 116
4.16 switch语句 117
4.17条件操作符 118
4.18总结 119
4.19练习 120
第5章 函数 128
5.1函数定义 128
5.2 return语句 130
5.3函数原型 131
5.4例子:创建乘方表 132
5.5从编译器的角度观察函数原型 133
5.6函数定义顺序的另一种风格 134
5.7函数调用和传值调用 134
5.8开发大型程序 136
5.9使用断言 138
5.10作用域规则 139
5.10.1平行和嵌套代码块 140
5.10.2以调试为目的使用代码块 140
5.11存储类型 141
5.11.1 auto存储类型 141
5.11.2 extern存储类型 141
5.11.3 register存储类型 143
5.11.4 static存储类型 143
5.12静态外部变量 144
5.13默认初始化 145
5.14递归 145
5.15例子:汉诺塔 149
5.16总结 152
5.17练习 153
第6章 数组、指针和字符串 159
6.1一维数组 159
6.1.1初始化 160
6.1.2下标 160
6.2指针 161
6.3传引用调用 164
6.4数组和指针之间的关系 165
6.5指针运算和元素的大小 166
6.6数组作为函数的实参 166
6.7例子:冒泡排序 167
6.8用calloc()和malloc()进行动态内存分配 168
6.9例子:归并和归并排序 171
6.10字符串 175
6.11标准函数库中的字符串处理函数 177
6.12多维数组 180
6.12.1二维数组 180
6.12.2存储映射函数 180
6.12.3形式参数声明 181
6.12.4三维数组 182
6.12.5初始化 182
6.12.6使用typedef 183
6.13指针数组 184
6.14 main()函数的参数 188
6.15不规则数组 189
6.16函数作为参数 190
6.17例子:使用二分法寻找函数的根 192
6.18函数指针数组 196
6.19类型限定符const和volatile 199
6.20总结 200
6.21练习 202
第7章 位操作符和枚举类型 214
7.1位操作符和表达式 214
7.1.1按位求反 215
7.1.2补码 215
7.1.3位逻辑操作符 216
7.1.4左移位和右移位操作符 217
7.2掩码 218
7.3软件工具:打印int值的二进制形式 219
7.4包装和解包 220
7.5枚举类型 223
7.6例子:“石头、剪刀、布”游戏 225
7.7总结 229
7.8练习 230
第8章 预处理器 235
8.1 #include的使用 235
8.2使用#define 236
8.3带参数的宏 237
8.4 stddef.h中的类型定义和宏 239
8.5例子:用qsort()进行排序 239
8.6例子:带参数的宏 243
8.7 stdio.h和ctype.h中的宏 246
8.8条件编译 247
8.9预定义的宏 249
8.10“#”和“##”操作符 249
8.11 assert()宏 250
8.12使用#error和#pragma 250
8.13行号 251
8.14对应的函数 251
8.15例子:快速排序 251
8.16总结 254
8.17练习 254
第9章 结构和联合 262
9.1结构 262
9.2访问结构成员 264
9.3操作符的优先级和结合性的总结 267
9.4在函数中使用结构 268
9.5结构的初始化 269
9.6例子:玩扑克牌 269
9.7联合 273
9.8位字段 275
9.9例子:访问位和字节 276
9.10 ADT堆栈 277
9.11总结 280
9.12练习 281
第10章 结构和列表处理 288
10.1自引用的结构 288
10.2线性链表 289
10.3链表操作 290
10.4一些链表处理函数 293
10.4.1插入 294
10.4.2删除 295
10.5堆栈 296
10.6例子:波兰记法和堆栈求值 298
10.7队列 303
10.8二叉树 306
10.8.1二叉树的遍历 307
10.8.2创建树 308
10.9普通的树 309
10.9.1遍历 311
10.9.2 calloc()的用法以及树的创建 311
10.10总结 312
10.11练习 313
第11章 输入/输出和操作系统 318
11.1输出函数printf() 318
11.2输入函数scanf() 321
11.3 fprintf()、fscanf()、sprintf()和sscanf()函数 324
11.4 fopen()和fclose()函数 325
11.5例子:对文件进行空间加倍 327
11.6使用临时文件和优雅函数 329
11.7随机访问文件 331
11.8文件描述符输入/输出 332
11.9文件访问权限 333
11.10在C程序内部执行命令 334
11.11在C程序内部使用管道 335
11.12环境变量 336
11.13 C编译器 337
11.14使用性能评估程序 338
11.15函数库 339
11.16对C代码进行计时 340
11.17使用make 343
11.18使用touch 347
11.19其他有用的工具 348
11.20总结 349
11.21练习 350
第12章 高级应用 358
12.1用fork()创建并发进程 358
12.2进程的叠加:exec…()函数族系 360
12.3使用pipe()实现进程间的通信 362
12.4信号 363
12.5例子:哲学家用餐问题 365
12.6矩阵的动态分配 368
12.6.1为什么二维数组无法满足要求 368
12.6.2用指针数组创建矩阵 369
12.6.3调整下标范围 371
12.6.4一次分配所有内存 373
12.7返回状态 374
12.8总结 377
12.9练习 378
第13章 从C到C++ 383
13.1输出 383
13.2输入 384
13.3函数 386
13.4类和抽象数据类型 387
13.5重载 389
13.6构造函数和析构函数 390
13.7面向对象编程和继承 392
13.8多态 393
13.9模板 395
13.10 C++的异常 396
13.11面向对象编程的优点 396
13.12总结 397
13.13练习 398
第14章 从C到Java 402
14.1输出 402
14.2变量和类型 403
14.3类和抽象数据类型 404
14.4重载 406
14.5类的创建和销毁 406
14.6面向对象编程和继承 406
14.7多态和重写方法 407
14.8 Applet 408
14.9 Java的异常 409
14.10 Java和OOP的优势 410
14.11总结 410
14.12练习 411
附录A 标准函数库 413
附录B C的语法 441
附录C ANSI C与传统C的比较 446
附录D ASCII字符码 452
附录E 操作符的优先级和结合性 454