第1章 编写ASNI C程序
1.1 准备编程
1.2 第一个程序
1.3 变量、表达式和赋值
1.4 初始化
1.5 #define和#include的用法
1.6 printf()和scanf()的用法
1.6.1 printf()的用法
1.6.2 scanf()的用法
1.7 while语句
1.8 问题求解:计算总和
1.9 风格
1.10 常见的编程错误
1.11 系统考虑
1.11.1 编写和运行C程序
1.11.2 中断程序
1.11.3 输入文件尾标识
1.11.4 输入和输出的重定向
1.12 转向C++
小结
练习
第2章 词法元素、运算符和C系统
2.1 字符和词法元素
2.2 注释
2.3 关键字
2.4 标识符
2.5 常量
2.6 串常量
2.7 运算符和标点符号
2.8 运算符的优先级和结合性
2.9 增量运算符和减量运算符
2.10 赋值运算符
2.11 例子:计算2的幂
2.12 C系统
2.12.1 预处理器
2.12.2 标准库
2.13 风格
2.14 常见的编程错误
2.15 系统考虑
2.16 转向C++
小结
练习
第3章 控制流
3.1 关系、等式和逻辑运算符
3.2 关系运算符和表达式
3.3 等式运算符和表达式
3.4 逻辑运算符和表达式
3.5 复合语句
3.6 空语句
3.7 if和if-else语句
3.8 while语句
3.9 问题求解:找最大值
3.10 for语句
3.11 问题求解:组合数学
3.12 问题求解:布尔变量
3.13 逗号运算符
3.14 do语句
3.15 goto语句
3.16 break和continue语句
3.17 switch语句
3.18 嵌套的控制流
3.19 条件运算符
3.20 风格
3.21 常见的编程错误
3.22 系统考虑
3.23 转向C++
小结
练习
第4章 函数和结构化编程
4.1 函数调用
4.2 函数定义
4.3 return语句
4.4 函数原型
4.5 自顶向下设计
4.6 程序的正确性:assert()宏
4.7 从编译器的角度来看函数声明
4.8 问题求解:随机数
4.9 函数定义次序的可选风格
4.10 开发一个大程序
4.11 模拟:正反面游戏
4.12 调用和按值调用
4.13 递归
4.14 风格
4.15 常见的编程错误
4.16 系统考虑
4.17 转向C++
小结
练习
第5章 字符处理
5.1 数据类型char
5.2 getchar()和putchar()的用法
5.3 例子:大写
5.4 ctype.h中的宏
5.5 问题求解:重复字符
5.6 问题求解:对单词计数
5.7 风格
5.8 常见的编程错误
5.9 系统考虑
5.10 转向C++
小结
练习
第6章 基本数据类型
6.1 声明和表达式
6.2 基本数据类型
6.3 字符和数据类型char
6.4 数据类型int
6.5 整数类型short、long和unsigned
6.6 浮点类型
6.7 sizeof运算符
6.8 数学函数
6.9 转换和类型转换
6.9.1 整型提升
6.9.2 常用的算术转换
6.9.3 类型转换
6.10 问题求解:计算利息
6.11 风格
6.12 常见的编程错误
6.13 系统考虑
6.14 转向C++
小结
练习
第7章 枚举类型和typedef
7.1 枚举类型
7.2 typedef的用法
7.3 例子:石头、剪刀、布游戏
7.4 风格
7.5 常见的编程错误
7.6 系统考虑
7.7 转向C++
小结
练习
第8章 函数、指针和存储类型
8.1 指针声明和赋值
8.2 地址和间接访问
8.3 指向void的指针
8.4 引用调用
8.5 作用域规则
8.6 存储类型
8.6.1 存储类型auto
8.6.2 存储类型extern
8.6.3 存储类型register
8.6.4 存储类型static
8.7 静态外部变量
8.8 缺省的初始化
8.9 例子:字符处理
8.10 函数声明和函数定义
8.11 类型限定符const和volatile
8.12 风格
8.13 常见的编程错误
8.14 系统考虑
8.15 转向C++
小结
练习
第9章 数组和指针
9.1 一维数组
9.1.1 初始化
9.1.2 下标
9.2 例子:分别对每个字母计数
9.3 数组和指针间的关系
9.4 指针运算和元素尺寸
9.5 把数组传递给函数
9.6 排序算法:冒泡排序
9.7 二维数组
9.8 多维数组
9.9 动态内存分配
9.10 风格
9.11 常见的编程错误
9.12 系统考虑
9.13 转向C++
小结
练习
第10章 串和指针
10.1 串结束标志
10.2 串的初始化
10.3 例子:心情愉快
10.4 用指针处理串
10.5 问题求解:单词计数
10.6 把参数传递给main()
10.7 标准库中的串处理函数
10.8 风格
10.9 常见的编程错误
10.10 系统考虑
10.11 转向C++
小结
练习
第11章 递归
11.1 递归问题求解
11.2 例子:在屏幕上绘制图案
11.3 用递归处理串
11.4 分而治之方法
11.5 例子:汉诺塔
11.6 风格
11.7 常见的编程错误
11.8 系统考虑
11.9 转向C++
小结
练习
第12章 结构和抽象数据类型
12.1 声明结构
12.2 访问成员
12.3 运算符的优先级和结合性:总结
12.4 结构、函数和赋值
12.5 问题求解:学生记录
12.6 结构的初始化
12.7 typedef的用法
12.8 自引用结构
12.9 线性链表
12.10 对链表的操作
12.11 计数和查找
12.12 插入和删除
12.13 风格
12.14 常见的编程错误
12.15 系统考虑
12.16 转向C++
小结
练习
第13章 输入/输出和文件
13.1 输出函数printf()
13.2 输入函数scanf()
13.2.1 控制串中的指示
13.2.2 普通字符
13.2.3 空白字符
13.2.4 转换说明
13.2.5 输入流中的浮点数
13.2.6 使用扫描集
13.2.7 返回值
13.2.8 一个scanf()的例子
13.3 函数sprintf()和sscanf()
13.4 函数fprintf()和fscanf()
13.5 访问文件
13.6 例子:对文件行距加倍
13.7 使用临时文件和得体的函数
13.8 随机地访问文件
13.9 风格
13.10 常见的编程错误
13.11 系统考虑
13.12 转向C++
小结
练习
第14章 软件工具
14.1 在C程序中执行命令
14.2 环境变量
14.3 C编译器
14.4 创建库
14.5 使用profiler
14.6 关于时间的编码
14.7 dbx的用法
14.8 make的用法
14.9 touch的用法
14.10 其他有用的工具
14.11 风格
14.12 常见的编程错误
14.13 系统考虑
小结
练习
第15章 从C到C++
15.1 为什么转到C++
15.2 类和抽象数据类型
15.3 重载
15.4 构造器和析构器
15.5 继承
15.6 多态性
15.7 模板
15.8 C++中的异常
15.9 面向对象编程的益处
15.10 风格
15.11 常见的编程错误
15.12 系统考虑
小结
练习
附录A 标准库
附录B 预处理器
附录C 位运算符
附录D ANSI C与传统C的比较
附录E ASCII字符编码表
附录F 运算符的优先级和结合性
索引