内容简介
第0章 从零开始
0.1为什么要用C
0.2 ANSI C标准
0.3从C到C++
0.4从C和C++到Java
第1章 C语言概述
1.1编程和预备知识
1.2程序输出
1.3变量、表达式和赋值
1.4使用#define和#include
1.5使用printf()和scanf()
1.6控制流
1.7函数
1.8数组、字符串和指针
1.8.1数组
1.8.2字符串
1.8.3指针
1.9文件
1.10与操作系统有关的内容
1.10.1编写和运行C程序
1.10.2中断程序
1.10.3输入文件尾标志
1.10.4输入和输出的重定向
1.11总结
1.12练习
第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.12例子:计算2的乘方
2.13 C系统
2.13.1预处理器
2.13.2标准函数库
2.14总结
2.15 练习
第3章 基本数据类型
3.1声明、表达式和赋值
3.2基本数据类型
3.3字符和char数据类型
3.4 int数据类型
3.5整数类型short、long和unsigned
3.6浮点类型
3.7 typedef的用法
3.8 sizeof操作符
3.9使用getchar()和putchar()
3.10数学函数
3.10.1使用abs()和fabs()
3.10.2 UNIX和数学函数库
3.11隐式类型转换和强制类型转换
3.11.1整型提升
3.11.2寻常算术转换
3.11.3强制类型转换
3.12十六进制和八进制常量
3.13总结
3.14练习
第4章 控制流
4.1关系操作符、相等操作符和逻辑操作符
4.2关系操作符和表达式
4.3相等操作符和表达式
4.4逻辑操作符和表达式
4.5复合语句
4.6表达式和空语句
4.7 if和if-else语句
4.8 while语句
4.9 for语句
4.10例子:布尔变量
4.11逗号操作符
4.12 do语句
4.13例子:斐波那契数
4.14 goto语句
4.15 break和continue语句
4.16 switch语句
4.17条件操作符
4.18总结
4.19练习
第5章 函数
5.1函数定义
5.2 return语句
5.3函数原型
5.4例子:创建乘方表
5.5从编译器的角度观察函数原型
5.6函数定义顺序的另一种风格
5.7函数调用和传值调用
5.8开发大型程序
5.9使用断言
5.10作用域规则
5.10.1平行和嵌套代码块
5.10.2以调试为目的使用代码块
5.11存储类型
5.11.1 auto存储类型
5.11.2 extern存储类型
5.11.3 register存储类型
5.11.4 static存储类型
5.12静态外部变量
5.13默认初始化
5.14递归
5.15例子:汉诺塔
5.16总结
5.17练习
第6章 数组、指针和字符串
6.1一维数组
6.1.1初始化
6.1.2下标
6.2指针
6.3传引用调用
6.4数组和指针之间的关系
6.5指针运算和元素的大小
6.6数组作为函数的实参
6.7例子:冒泡排序
6.8用calloc()和malloc()进行动态内存分配
6.9例子:归并和归并排序
6.10字符串
6.11标准函数库中的字符串处理函数
6.12多维数组
6.12.1二维数组
6.12.2存储映射函数
6.12.3形式参数声明
6.12.4三维数组
6.12.5初始化
6.12.6使用typedef
6.13指针数组
6.14 main()函数的参数
6.15不规则数组
6.16函数作为参数
6.17例子:使用二分法寻找函数的根
6.18函数指针数组
6.19类型限定符const和volatile
6.20总结
6.21练习
第7章 位操作符和枚举类型
7.1位操作符和表达式
7.1.1按位求反
7.1.2补码
7.1.3位逻辑操作符
7.1.4左移位和右移位操作符
7.2掩码
7.3软件工具:打印int值的二进制形式
7.4包装和解包
7.5枚举类型
7.6例子:“石头、剪刀、布”游戏
7.7总结
7.8练习
第8章 预处理器
8.1 #include的使用
8.2使用#define
8.3带参数的宏
8.4 stddef.h中的类型定义和宏
8.5例子:用qsort()进行排序
8.6例子:带参数的宏
8.7 stdio.h和ctype.h中的宏
8.8条件编译
8.9预定义的宏
8.10“#”和“##”操作符
8.11 assert()宏
8.12使用#error和#pragma
8.13行号
8.14对应的函数
8.15例子:快速排序
8.16总结
8.17练习
第9章 结构和联合
9.1结构
9.2访问结构成员
9.3操作符的优先级和结合性的总结
9.4在函数中使用结构
9.5结构的初始化
9.6例子:玩扑克牌
9.7联合
9.8位字段
9.9例子:访问位和字节
9.10 ADT堆栈
9.11总结
9.12练习
第10章 结构和列表处理
10.1自引用的结构
10.2线性链表
10.3链表操作
10.4一些链表处理函数
10.4.1插入
10.4.2删除
10.5堆栈
10.6例子:波兰记法和堆栈求值
10.7队列
10.8二叉树
10.8.1二叉树的遍历
10.8.2创建树
10.9普通的树
10.9.1遍历
10.9.2 calloc()的用法以及树的创建
10.10总结
10.11练习
第11章 输入/输出和操作系统
11.1输出函数printf()
11.2输入函数scanf()
11.3 fprintf()、fscanf()、sprintf()和sscanf()函数
11.4 fopen()和fclose()函数
11.5例子:对文件进行空间加倍
11.6使用临时文件和优雅函数
11.7随机访问文件
11.8文件描述符输入/输出
11.9文件访问权限
11.10在C程序内部执行命令
11.11在C程序内部使用管道
11.12环境变量
11.13 C编译器
11.14使用性能评估程序
11.15函数库
11.16对C代码进行计时
11.17使用make
11.18使用touch
11.19其他有用的工具
11.20总结
11.21练习
第12章 高级应用
12.1用fork()创建并发进程
12.2进程的叠加:exec…()函数族系
12.3使用pipe()实现进程间的通信
12.4信号
12.5例子:哲学家用餐问题
12.6矩阵的动态分配
12.6.1为什么二维数组无法满足要求
12.6.2用指针数组创建矩阵
12.6.3调整下标范围
12.6.4一次分配所有内存
12.7返回状态
12.8总结
12.9练习
第13章 从C到C++
13.1输出
13.2输入
13.3函数
13.4类和抽象数据类型
13.5重载
13.6构造函数和析构函数
13.7面向对象编程和继承
13.8多态
13.9模板
13.10 C++的异常
13.11面向对象编程的优点
13.12总结
13.13练习
第14章 从C到Java
14.1输出
14.2变量和类型
14.3类和抽象数据类型
14.4重载
14.5类的创建和销毁
14.6面向对象编程和继承
14.7多态和重写方法
14.8 Applet
14.9 Java的异常
14.10 Java和OOP的优势
14.11总结
14.12练习
附录A 标准函数库
附录B C的语法
附录C ANSI C与传统C的比较
附录D ASCII字符码
附录E 操作符的优先级和结合性