前言 1
第一部分 基础 11
第一章 什么是C? 13
编程原理 14
C语言简史 17
C如何工作 17
如何学习C 19
第二章 编程基础 21
程序从概念到运行 21
编写一个真正的程序 22
使用命令行编译器编程 23
使用集成开发环境(IDE)编程 27
获取集成开发环境帮助 45
集成开发环境菜单 45
获取UNIX帮助 45
编程练习 48
第三章 风格 49
基础编码练习 54
编码盲从 56
缩进与编码格式 56
清晰 57
简明 58
小结 59
第四章 基本定义与表达式 60
程序要素 60
程序的基本结构 61
简单表达式 62
变量和存储 64
变量定义 65
赋值语句 66
整型 66
printf函数 68
浮点型 70
浮点数与整数的除法运算 70
字符 73
答案 74
编程练习 75
第五章 数组、修饰符与读取数字 76
数组 76
串 78
读取串 81
多维数组 84
读取数字 86
变量初始化 88
整型 90
浮点型 92
常量说明 93
十六进制与八进制常量 93
快捷运算符 94
副作用 95
++X或X++ 96
更多的副作用问题 97
答案 98
编程练习 99
第六章 条件和控制语句 101
if语句 101
else语句 102
怎样避免误用strcmp函数 104
循环语句 104
while语句 105
break语句 107
continue语句 108
随处赋值的副作用 109
编程练习 111
答案 111
第七章 程序设计过程 113
设置 115
程序规范 116
代码设计 116
原型 118
Makefile 119
测试 123
调试 124
维护 126
修改 126
代码分析 127
用文本编辑器浏览 128
增加注释 128
使用调试器 128
注释程序 128
编程练习 131
第二部分 简单程序设计 133
第八章 更多的控制语句 135
for语句 135
switch语句 139
switch,break和continue 145
答案 145
编程练习 147
第九章 变量作用域和函数 149
作用域和类 149
函数 153
无参数的函数 157
结构化程序设计 158
递归 160
答案 161
编程练习 162
第十章 C预处理器 163
#define语句 163
条件编译 170
包含文件 173
带参数的宏 174
高级特征 176
小结 176
答案 177
编程练习 180
第十一章 位运算 181
位运算符 183
与运算符( ) 183
按位或(\) 186
非运算符(~) 187
按位异或(^) 187
左移与右移运算符(《,》) 188
设置、清除和检测位 190
位图图形 194
答案 200
编程练习 201
第十二章 高级类型 202
结构 202
联合 205
typedef 207
枚举类型 209
强制类型转换 210
位字段或紧缩结构 210
结构数组 212
编程练习 213
小结 213
第十三章 简单指针 215
函数自变量指针 220
常量指针 222
指针和数组 224
如何不使用指针 229
用指针分隔字符串 231
指针和结构 235
命令行参数 236
编程练习 242
答案 242
第十四章 文件输入/输出 245
转换程序 249
二进制和ASCII码文件 252
行尾难题 253
二进制I/O 255
缓冲问题 257
非缓冲I/O 258
设计文件格式 264
答案 266
编程练习 267
第十五章 调试和优化 268
调试 268
交互调试器 280
调试一个二分查找程序 285
实时运行错误 297
公开声明调试方法 299
优化 300
答案 309
编程练习 309
浮点数格式 310
第十六章 浮点数 310
浮点数加法/减法 312
乘法 313
除法 313
上溢和下溢 314
舍入误差 314
精度 315
舍入误差最小化 316
判定精度 317
精度和速度 318
幂级数 319
编程练习 321
第三部分 高级编程观念 323
第十七章 高级指针 325
指针和结构 325
free函数 329
链表 330
结构指针运算符 333
顺序链表 334
双向链表 337
树 340
树的打印 344
程序的剩余部分 345
象棋程序中用到的数据结构 349
答案 351
编程练习 353
第十八章 模块化编程 354
模块 354
公用和专用 355
extern修饰符 356
头文件 358
使用无限数组的程序 361
模块体 361
用于多文件的Makefile 364
使用无限数组 368
把一项任务分成模块 376
模块划分实例:文本编辑器 376
编译器 378
电子表格 380
模块设计准则 380
编程练习 380
第十九章 旧式编译器 382
K R风格的函数 382
库的发展 386
遗漏的特性 386
Free/Malloc的发展 387
答案 388
lint 388
第二十章 移植问题 391
模块化 391
字大小 392
字节顺序问题 392
对齐问题 393
NULL指针问题 395
文件名问题 396
文件类型 397
小结 397
答案 398
第二十一章 C内的“角落” 399
do/while 399
goto 400
?:指令 401
答案 402
,运算符 402
不稳定限定词 402
第二十二章 组合到一起 403
需求 403
规范说明 404
代码设计 406
编码 412
功能描述 412
扩展 414
测试 415
修改 416
最后的警告 416
程序文件 416
编程练习 443
概述 444
第二十三章 程序设计格言 444
设计 445
定义 445
switch语句 445
预处理器 446
风格 446
编译 446
最后的注解 447
答案 447
第四部分 其他语言特性 449
附录一ASCII表 451
附录二 范围和参数传递转换 453
附录三 运算符优先规则 455
附录四 使用幂级数计算正弦函数的程序 457
词汇表 463