内容简介
第二版序言
目录
第一章 预备知识
1.1 C的起源
1.2 C的优点
1.2.1 设计时的考虑
第一版序言
1.2.2 效率
1.2.3 可移植性
1.2.6 面向程序员
1.2.7 缺陷
1.3 C的未来
1.2.4 把C装入PC
关于作者
1.2.5 高效且灵活
1.4 C的使用:七大步骤
1.4.1 第一步:确定程序目标
1.4.2 第二步:设计该程序
1.4.3 第三步:编制代码
1.4.6 第六步:测试与调试
1.4.7 第七步:维护与修改
1.4.5 第五步:运行
1.4.4 第四步:编译
1.4.8 加注释
1.5 程序设计须知
1.5.1 源代码文件
1.5.2 目标代码文件、可执行文件以及函数库
1.5.3 在UNIX系统上准备一个C程序
1.5.4 在IBM PC上准备一个C程序
1.5.6 Macintosh上的Think C 5.0
1.5.5 集成开发环境(IDE)
1.5.7 为何要编译?
1.6 语言标准
1.7 某些约定
1.7.1 字样
1.7.2 屏幕输出
1.7.3 输入与输出设备
1.8 本章小结
1.9 复习题
1.10 程序设计实践
第二章 C初步
2.1 C的一个简例
2.2 解释
2.2.1 第一遍:梗概
2.2.2 第二遍:细节
2.4 如何使程序更具可读性
2.3 简单程序的结构
2.5 进一步说明
2.5.1 文档
2.5.2 多个说明
2.5.3 乘法
2.5.4 打印多个数值
2.6 此刻我们需要多个函数
2.7 常见错误
2.7.1 语法错误
2.7.2 语义错误
2.7.3 程序状态
2.8 关键字
2.9 本章小结
2.10 复习题
2.11 程序设计实践
3.1 一个简单的例子
第三章 数据和C
3.1.1 程序的新颖之处
3.2 数据:变量和常量
3.3 数据:数据类型的关键字
3.3.1 整型和浮点型的比较
3.3.2 整型
3.3.3 浮点型
3.4 C的数据类型
3.4.1 int类型
3.4.2 其他整型数
3.4.3 字符:char型
3.4.4 float和double类型
3.4.5 其他类型
3.4.6 数据类型的尺寸
3.6 参数及其使用中的错误
3.5 数据类型的使用
3.7 再举一例
3.7.1 发生了什么?
3.7.2 可能出现的问题
3.8 本章小结
3.9 复习题
3.10 程序设计实践
第四章 字符串与格式化输入/输出
4.1 入门程序
4.2 字符串浅谈
4.2.1 char类型数组和空(Null)字符
4.2.2 字符串的使用
4.2.3 字符串的长度——strlen()
4.3 常量和C预处理器
4.3.1 同时使用#define和#include
4.3.2 C——扮假的能手:创造化名
4.3.3 作业的预置常量
4.4.1 printf()函数
4.4 研究与利用printf()和scanf()
4.4.2 printf()的使用
4.4.3 printf()的转换说明修饰符
4.4.4 转换的含义
4.4.5 scanf()的使用
4.4.6 printf()和scanf()的修饰符
4.5 用法补遗
4.6 本章小结
4.7 复习题
4.8 程序设计实践
第五章 运算符、表达式和语句
5.1 循环入门
5.2 基本运算符
5.2.1 赋值运算符:=
5.2.4 符号运算符:-和+
5.2.1 加法运算符:+
5.2.3 减法运算符:-
5.2.5 乘法运算法:*
5.2.6 除法运算符:
5.2.7 运算符优先关系
5.2.8 优先级和计算的顺序
5.3 其他一些运算符
5.3.1 运算符sizeof
5.3.2 模运算符:%
5.3.3 递增和递减运算符:++和--
5.3.4 递减:--
5.3.5 优先级
5.3.6 “聪明反被聪明误”
5.4 表达式和语句
5.4.1 表达式
5.4.2 语句
5.4.3 复合语句(块)
5.5 类型转换
5.5.1 强制类型符(cast operator)
5.6 带有参数的函数
5.6.1 K R函数的说明和标题
5.7 程序范例
5.8 本章小结
5.9 复习题
5.10 程序设计实践
第六章 C控制语句:循环
6.1 一个简单的例子
6.1.1 程序注释
6.1.2 C风格的读循环
6.2 while语句
6.2.1 终止while循环
6.2.3 while——入口条件循环
6.2.2 当循环终止时
6.2.4 语法要点
6.3 关系运算符和关系表达式
6.3.1 什么是真的?
6.3.2 还有哪些是真值?
6.3.3 “真值”引起的麻烦
6.3.4 关系运算符的优先级
6.4 不定循环和计数循环
6.5 for循环
6.5.1 for的灵活性
6.6 其他赋值运算符:+=、-=、*=、/=、%=
6.7 逗号运算符
6.8 Zeno遇到for循环
6.9 出口条件循环:do while
6.10 选用哪种循环?
6.11.1 讨论
6.11 嵌套循环
6.11.2 嵌套的变形
6.12 数组
6.12.1 带有数组的for循环
6.13 使用函数返回值的循环范例
6.13.1 程序讨论
6.13.2 带有返回值的函数
6.14 本章小结
6.15 复习题
6.16 程序设计实践
第七章 C控制语句:分支和转移
7.1 if语句
7.1.1 if的基本概念
7.2 if语句中加入else
7.2.1 另一个例子:getchar()和putchar()
7.2.3 多重选择:else if
7.2.4 把else与if相匹配
7.2.5 多层嵌套if
7.3 逻辑运算浅谈
7.3.1 优先级
7.3.2 计算顺序
7.4 一个单词计数程序
7.5 条件运算符:?:
7.5 循环的辅助语句:continue和break
7.5.1 continue语句
7.5.2 break语句
7.6 多重选择:switch和break
7.6.1 switch语句的使用
7.6.2 只读取每行的第一个字符
7.6.3 多重标号
7.7.1 避免用goto
7.6.4 switch和if else
7.7 goto语句
7.8 本章小结
7.9 复习题
7.10 程序设计实践
第八章 字符输入/输出与转向
8.1 单字符输入/输出:getchar()和putchar()
8.2 缓冲器
8.3 终止键盘输入
8.3.1 文件、流和键盘输入
8.3.2 文件结尾
8.4 转向和文件
8.4.1 UNIX和DOS转向
8.4.2 注释
8.5 一个图形的例子
8.6 建立更为友好的用户界面
8.6.1 利用缓冲的输入工作
8.6.2 数字和字符的混合输入
8.7 字符图样
8.7.1 分析程序
8.8 本章小结
8.9 复习题
8.10 程序设计实践
第九章 函数
9.1 复习
9.1.1 创建和使用一个简单函数
9.1.2 函数参数
9.1.3 定义带形式参数的函数
9.1.4 带有参数的函数原型
9.1.5 调用带有实在参数的函数
9.1.6 黑盒子论点
9.1.7 从带有return的函数中返回数值
9.1.8 函数类型
9.2 ANSI C函数原型
9.2.1 问题
9.2.2 ANSI的解决方法
9.2.3 无参数和未指定参数
9.3 递归
9.3.1 递归的表象
9.3.2 递归的原理
9.3.3 尾部递归
9.3.4 递归和转换
9.4 所有的C函数都是平等的
9.5 编译带有两个或多个函数的程序
9.5.1 UNIX
9.5.5 Turbo C/Borland C
9.5.7 头文件的使用
9.5.6 Think C
9.5.4 QuickC
9.5.3 Microsoft C 6.0—7.0(PWB)
9.5.2 Microsoft C 4.0—7.0版(命令行)
9.6 计算地址:运算符&
9.7 调用函数中变量的改变
9.8 指针初探
9.8.1 间接运算符
9.8.2 说明指针
9.8.3 函数间的指针传递
9.9 本章小结
9.10 复习题
9.11 程序设计实践
第十章 数组和指针
10.1 数组
10.1.1 预置和存储类别
10.1.2 多个数组的预置
10.1.3 为数组赋值
10.2 数组指针
10.3 函数、数组和指针
10.3.1 作为参数的数组名
10.3.2 指针参数的使用
10.3.3 注解:指针和数组
10.4 指针运算
10.4.1 另一个例子
10.5 多维数组
10.5.1 二维数组的初始化
10.5.2 高维数组
10.6 指针和多维数组
10.6.1 函数和多维数组
10.7 设计一个程序
10.7.1 一般设计
10.7.2 read_array()函数
10.7.3 show_array()函数
10.7.4 mean()函数
10.7.5 结果
10.8 本章小结
10.9 复习题
10.10 程序设计实践
第十一章 字符串和字符串函数
11.1 在程序中定义字符串
11.1.1 字符串常量
11.2 字符串数组和初始化
11.2.1 数组与指针
11.2.2 显式规定存储量
11.2.3 字符串数组
11.2.4 指针和字符串
11.3.1 开辟空间
11.3 字符串输入
11.3.2 gets()函数
11.3.3 scanf()函数
11.4 字符串输出
11.4.1 puts()函数
11.4.2 print?()函数
11.5 自己动手的选择
11.6 字符串函数
11.6.1 strlen()函数
11.6.2 strcat()函数
11.6.3 strcmp()函数
11.6.4 strcpy()函数
11.6.5 sprintf()函数
11.6.6 其他字符串函数
11.7 字符串实例:字符串排序
11.7.1 排序
11.8 ctype.h字符函数
11.9 命令行参数
11.9.1 集成环境中的命令行参数
11.9.2 Think C的命令行参数
11.10 从字符串到数字的转换
11.11 本章小结
11.12 复习题
11.13 程序设计实践
第十二章 文件的输入/输出
12.1 与文件的联系
12.1.1 文件的概念
12.1.2 I/O的级别
12.1.3 标准文件
12.2 标准I/O
12.2.2 fopen()函数
12.2.1 检验命令行参数
12.2.3 getc()和putc()函数
12.2.4 fclose()函数
12.2.5 标准文件
12.3 一个简单的文件压缩程序
12.4 文件I/O:fprintf()、fscanf()、fgets()和fputs()
12.4.1 fprintf()和fscanf()函数
12.4.2 fgets()和fputs()函数
12.5 随机存取fseek()和ftell()的危险
12.5.1 fseek()和ftell()的工作原理
12.5.2 二进制模式和文本模式
12.5.3 可移植性
12.6 在文本模式中随机存取
12.6.1 可移植性
12.7 标准I/O的秘密
12.8.2 int fflush(FILE*fp)
12.8 其他标准的I/O函数
12.8.1 int ungetc(int c,FILE*fp)
12.8.3 int setvbuf(FILE*fp,char*buf,int mode,size_t size)
12.8.4 二进制I/O:fread()和fwrite()
12.8.5 size_t fwrite(void*ptr,size_t size,size_t nmemb,FILE*fp)
12.8.6 size_t freab(void*ptr,size_t size,size_t nmemb,FILE*fp)
12.8.7 int feof(FILE*fp)和int ferror(FILE*fp)
12.8.8 实例
12.9 本章小结
12.10 复习题
12.11 程序设计实践
第十三章 存储类别与程序开发
13.1 存储类别与辖域
13.1.1 辖域、链接以及存储延续期
13.1.2 自动变量
13.1.3 外部变量
13.1.4 定义与说明
13.1.5 静态变量
13.1.6 外部静态变量
13.1.7 多个文件
13.1.8 辖域与函数
13.1.9 寄存器变量
13.1.10 采用哪种存储类别?
13.2 一个随机数函数
13.3 掷骰游戏
13.4 数字排序
13.4.1 全局判定
13.4.2 读数值数据
13.4.3 getarray()函数
13.4.4 给数据排序
13.4.6 结果
13.4.5 打印数据
13.4.7 注释
13.5 ANSI C类型限定符
13.5.1 类型限定词const
13.5.2 类型限定词volatile
13.6 本章小结
13.7 复习题
13.8 程序设计实践
第十四章 结构及其他数据形式
14.1 问题示例:建立一张书目
14.2 建立结构样板
14.3 定义结构变量
14.3.1 结构的预置
14.4 访问结构成员
14.5 结构数组
14.5.2 标识结构数组的成员
14.5.1 说明结构数组
14.5.3 程序细节
14.6 嵌套结构
14.7 指向结构的指针
14.7.1 说明与预置结构指针
14.7.2 利用指针访问成员
14.8 把结构通知函数
14.8.1 传递结构成员
14.8.2 使用结构地址
14.8.3 将结构作为参数传递
14.8.4 再谈新改进的结构状态
14.8.5 结构和指向结构的指针
14.8.6 使用结构数组的函数
14.9 保存结构内容于文件中
14.9.1 程序要点
14.10 结构的补充
14.11 联合简述
14.12 简述typedef
14.13 修饰说明
14.14 函数与指针
14.15 本章小结
14.16 复习题
14.17 程序设计实践
第十五章 字位运算
15.1 二进制数、字位和字节
15.1.1 二进制整数
15.1.2 带符号整数
15.1.3 二进制浮点数
15.2 其他数制
15.2.1 八进制数
15.2.2 十六进制数
15.3.1 位逻辑运算符
15.3 C的字位运算符
15.3.2 用法:掩码
15.3.3 用法:置位
15.3.4 用法:清位
15.3.5 用法:触发字位
15.3.6 用法:检测字位值
15.3.7 移位运算符
15.3.8 程序示例
15.3.9 再举一例
15.4 字段(bit field)
15.4.1 字段举例
15.5 本章小结
15.6 复习题
15.7 程序设计实践
16.1 文字常量:#define
第十六章 C预处理器与C函数库
16.1.1 记号
16.1.2 重定义常量
1 6.2 用#define使用参数
16.2.1 字符串里的宏参数
16.3 宏和函数的比较
16.5 包含文件: include
16.5.1 头文件的一个例子
16.5.2 头文件的用法
16.6 其他伪指令
16.6.1 伪指令#undef
16.6.2 条件编译
16.7 枚举类型
16.7.1 enum常数
16.7.2 缺省值
16.7.4 用法
16.7.3 所赋的值
16.8 C函数库
16.8.1 访问C的函数库
16.8.2 利用库的描述
16.9 数学函数库
16.10 通用工具库
16.10.1 exit()和atexit()函数
16.10.2 存储管理:malloc()和 free()
16.10.3 calloc()函数
16.10.4 存储类别与动态存储分配
16.11 本章小结
16.12 复习题
16.13 程序设计实践
第十七章 高级的数据表示
17.1 拓宽数据的表示方法
17.2 从数组到链接表
17.2.1 链接表的使用
17.2.2 反思
17.3 抽象数据类型(ADT:Abstract DataType)
17.3.1 进行抽象
17.3.2 建立接口
17.3.3 使用接口
17.3.4 实现接口
17.4 利用ADT排队
17.4.1 实现接口数据表示
17.4.2 测试队列
17.5 模拟队列
17.6 链接表与数组
17.7 二叉检索树
17.8 二叉树ADT
17.8.1 二叉检索树接口
17.8.2 二叉树的实现
17.8.3 试用二叉树
17.8.4 树的思想
17.9 后记
17.10 本章小结
17.11 复习题
17.12 程序设计实践
附录A 复习题答案
附录B C运算符
B.1 算术运算符
B.2 关系运算符
B.3 赋值运算符
B.4 逻辑运算符
B.5 条件运算符
B.6 与指针有关的运算符
B.8 结构与联合运算符
B.7 符号运算符
B.9 位运算符
B.10 其他运算符
附录C 基本类型与存储类别
C.1 总结:基本数据类型
C.2 总结:如何说明简单变量
C.3 总结:限定符
D.2 总结:while语句
D.1 总结:表达式与语句
附录D 表达式、语句和程序流程
D.3 总结:for语句
D.4 总结:do while语句
D.5 总结:利用if语句进行选择
D.6 总结:利用switch语句进行多重选择
D.7 总结:程序转移
附录E ASCII码
附录F 标准I/O函数(ANSI C)