第1章 程序设计的基本概念 1
1.1 程序设计和程序设计语言 1
1.1.1 程序与软件 1
1.1.2 程序设计语言的发展 2
1.1.3 计算机如何运行程序 2
1.2 C语言概述 4
1.2.1 C语言的发展 4
1.2.2 C程序的结构 4
1.2.3 C语言字符集 6
1.2.4 C语言的特点 7
1.3 算法 8
1.3.1 问题求解过程 8
1.3.2 算法及其表示 9
1.3.3 简单算法举例 9
1.3.4 用流程图表示算法 11
1.3.5 三种基本算法结构和改进的流程图 13
1.3.6 用N-S流程图表示算法 14
1.3.7 用伪代码表示算法 16
1.3.8 用计算机语言表示算法 17
1.4 结构化程序设计方法 18
1.5 本章小结 18
习题1 19
第2章 数据类型、运算符与表达式 20
2.1 C语言的数据类型 20
2.2 标识符 21
2.3 常量与变量 22
2.3.1 常量和符号常量 22
2.3.2 变量 23
2.4 整型数据 23
2.4.1 整型常量的表示方法 23
2.4.2 整型变量 24
2.5 实型数据 27
2.5.1 实型常量的表示方法 27
2.5.2 实型变量 28
2.5.3 实型常量的类型 29
2.6 字符型数据 29
2.6.1 字符常量 29
2.6.2 转义字符 29
2.6.3 字符变量 30
2.6.4 字符数据在内存中的存储形式及使用方法 30
2.6.5 字符串常量 32
2.7 变量赋初值 32
2.8 各类数值型数据之间的混合运算 32
2.8.1 自动类型转换 33
2.8.2 强制类型转换 33
2.9 算术运算符和算术表达式 34
2.9.1 C运算符简介 34
2.9.2 算术运算符和算术表达式 35
2.10 赋值运算符和赋值表达式 37
2.10.1 赋值运算符 37
2.10.2 类型转换 37
2.10.3 复合的赋值运算符 38
2.11 逗号运算符和逗号表达式 38
2.12 本章小结 39
习题2 40
第3章 C程序语句 42
3.1 C程序语句概述 42
3.2 顺序程序设计 43
3.2.1 数据输入输出的概念及在C语言中的实现 44
3.2.2 字符数据的输入输出 44
3.2.3 格式输入与输出 46
3.2.4 顺序结构程序设计举例 50
3.3 选择结构程序 51
3.3.1 关系运算符和关系表达式 51
3.3.2 逻辑运算符和表达式 53
3.3.3 if语句 54
3.3.4 switch语句 59
3.3.5 程序举例 61
3.4 循环控制 62
3.4.1 概述 62
3.4.2 goto语句以及用goto语句构成循环 62
3.4.3 while语句 63
3.4.4 do-while语句 64
3.4.5 for语句 66
3.4.6 循环的嵌套 68
3.4.7 几种循环的比较 68
3.4.8 break和continue语句 69
3.4.9 程序举例 71
3.5 本章小结 72
习题3 73
第4章 函数与数组 74
4.1 函数概述 74
4.2 函数定义的一般形式 75
4.2.1 类型标识符与return语句 75
4.2.2 形式参数和实际参数 76
4.3 函数调用 78
4.3.1 函数调用的一般形式 78
4.3.2 函数嵌套调用与递归调用 79
4.4 函数作用域规则 82
4.4.1 局部变量与外部变量 83
4.4.2 动态存储变量与静态存储变量 86
4.4.3 内部和外部函数的说明 88
4.5 数组 89
4.5.1 一维数组 89
4.5.2 二维数组 91
4.5.3 数组应用程序举例 92
4.5.4 字符数组 94
4.6 预处理命令 98
4.6.1 宏定义 98
4.6.2 文件包含 104
4.6.3 条件编译 104
4.7 本章小结 106
习题4 107
第5章 指针与结构体 109
5.1 指针概述 109
5.1.1 指针是地址 109
5.1.2 指针变量及其定义 110
5.1.3 指针变量作函数参数 111
5.2 数组与指针 115
5.2.1 一维数组与指针 116
5.2.2 多维数组与指针 119
5.2.3 字符串与指针 122
5.2.4 指针数组 124
5.3 指针与函数 127
5.3.1 函数指针变量 127
5.3.2 指针型函数 129
5.3.3 多级指针 130
5.3.4 指针数组作main()的参数 132
5.4 结构体 133
5.4.1 结构体类型的定义 133
5.4.2 结构体类型变量的定义 133
5.4.3 结构体变量的引用 135
5.4.4 结构体变量的初始化 136
5.4.5 结构体数组 136
5.4.6 结构体与指针 138
5.5 共用体 139
5.5.1 共用体的概念 139
5.5.2 共用体变量的引用 140
5.6 其他数据类型 141
5.6.1 枚举类型 141
5.6.2 类型定义符typedef 143
5.7 位操作 144
5.7.1 位运算 145
5.7.2 位段 147
5.8 本章小结 149
习题5 150
第6章 文件 153
6.1 文件概述 153
6.1.1 与文件有关的概念 153
6.1.2 文件指针 154
6.2 文件的打开与关闭 155
6.2.1 文件的打开(fopen函数) 155
6.2.2 文件关闭 157
6.3 文件的输入输出 158
6.3.1 读写文件中字符的函数 158
6.3.2 数据块读写函数fread()和fwrite() 161
6.3.3 字符串读写函数fgets()和fputs() 163
6.3.4 格式读写函数fscanf()和fprintf() 165
6.3.5 其他输入输出函数 166
6.4 文件的定位 167
6.4.1 ftell()函数 167
6.4.2 文件头复位函数rewind() 167
6.4.3 文件的随机定位函数fseek() 168
6.5 出错的检测 169
6.6 典型实例 169
6.7 常见的编程错误 173
6.8 本章小结 173
习题6 174
第7章 大型程序的设计与调试 175
7.1 大型程序的开发过程 175
7.1.1 需求分析 175
7.1.2 软件设计的任务 176
7.1.3 编码 177
7.1.4 软件测试 179
7.2 大型程序的设计原理 179
7.2.1 使用抽象管理复杂性 180
7.2.2 自顶而下、逐步求精的设计策略 181
7.2.3 模块化程序设计 181
7.2.4 重用代码 184
7.3 C语言大型程序的几种开发机制 184
7.3.1 模块的实现 184
7.3.2 多模块程序的编译、连接 187
7.3.3 标识符的连接属性 188
7.3.4 条件编译 191
7.4 大型程序的测试 191
7.4.1 测试技术 192
7.4.2 测试步骤 194
7.4.3 调试 195
7.5 程序设计实例 196
7.5.1 链表简介 196
7.5.2 需求分析 197
7.5.3 总体设计 197
7.5.4 函数设计 198
7.5.5 头文件设计 199
7.5.6 算法分析 200
7.5.7 实现文件设计 201
7.5.8 测试 205
7.6 本章小结 209
习题7 209
第8章 数据结构基本概念 211
8.1 数据结构实例 211
8.2 基本概念和术语 213
8.2.1 数据 213
8.2.2 数据结构 214
8.2.3 存储结构 215
8.2.4 抽象数据类型 216
8.2.5 抽象数据类型的表示与实现 217
8.3 算法的评价 220
8.4 本章小结 221
习题8 221
第9章 线性结构 223
9.1 线性结构概述 223
9.2 线性表的类型定义 224
9.2.1 线性表的定义 224
9.2.2 线性表的抽象数据类型定义 224
9.3 线性表的顺序表示和实现 225
9.4 线性表的链式表示和实现 230
9.5 线性表的其他链式表示 235
9.5.1 静态链表 235
9.5.2 循环链表 238
9.5.3 双向链表 238
9.6 线性表的应用举例 239
9.7 栈 243
9.7.1 栈的定义 243
9.7.2 栈的抽象数据类型定义 243
9.7.3 栈的顺序表示和实现 244
9.7.4 栈的链式表示和实现 247
9.8 栈的应用举例 249
9.8.1 数制转换 249
9.8.2 迷宫问题 250
9.8.3 栈与递归——汉诺塔问题 253
9.9 队列 257
9.9.1 队列的定义 257
9.9.2 队列的抽象数据类型定义 258
9.9.3 队列的顺序表示和实现 259
9.9.4 队列的链式表示和实现 261
9.10 队列的应用举例 264
9.11 本章小结 266
习题9 266
第10章 树和二叉树 269
10.1 树 269
10.1.1 树的定义 269
10.1.2 树的基本术语 271
10.1.3 树的性质 272
10.1.4 树的表示 273
10.2 二叉树 273
10.2.1 二叉树的定义 273
10.2.2 二叉树的性质 274
10.2.3 二叉树的表示和实现 276
10.3 线索二叉树 287
10.4 树和森林 289
10.4.1 树的存储结构 289
10.4.2 森林和二叉树的转化 291
10.4.3 树和森林的遍历 293
10.5 霍夫曼树及其应用 293
10.5.1 基本术语 293
10.5.2 霍夫曼树的构造 294
10.5.3 霍夫曼树的应用 296
10.6 本章小结 297
习题10 298
第11章 排序 301
11.1 概述 301
11.2 插入排序 302
11.2.1 直接插入排序 302
11.2.2 改进的插入排序 303
11.2.3 希尔排序 304
11.3 交换排序 306
11.3.1 起泡排序 306
11.3.2 快速排序 307
11.4 选择排序 309
11.4.1 简单选择排序 309
11.4.2 堆排序 310
11.5 归并排序 313
11.6 各种内部排序方法的比较讨论 315
11.7 外部排序 316
11.8 本章小结 317
习题11 318
第12章 查找/检索 320
12.1 基本概念 320
12.2 静态查找表 322
12.2.1 顺序查找 323
12.2.2 折半查找 324
12.2.3 分块查找 328
12.3 二叉查找树 329
12.3.1 二叉查找树的查找 329
12.3.2 二叉查找树的插入 331
12.3.3 二叉查找树的删除 333
12.3.4 平衡二叉树 336
12.4 B-树 342
12.4.1 B-树的定义与示例 342
12.4.2 B-树查找 343
12.4.3 B-树的插入 344
12.4.4 B-树中的删除 346
12.4.5 B+树 348
12.5 散列表查找 349
12.5.1 基本概念 349
12.5.2 散列函数 350
12.5.3 冲突的处理 352
12.5.4 散列表查找及性能分析 354
12.6 本章小结 355
习题12 357
第13章 文件组织 359
13.1 文件概述 359
13.1.1 文件的概念 359
13.1.2 文件的逻辑结构 360
13.1.3 文件的物理结构 361
13.1.4 文件的操作 362
13.2 顺序文件 363
13.2.1 顺序文件概述 363
13.2.2 顺序文件的操作 363
13.3 直接文件(散列文件) 364
13.3.1 桶散列 365
13.3.2 可扩展散列 366
13.4 索引文件 368
13.5 索引顺序文件 369
13.5.1 ISAM 369
13.5.2 VSAM文件 371
13.6 倒排文件 373
13.7 本章小结 374
习题13 374
附录A Turbo C 3.0集成开发环境的使用 376
A.1 Turbo C 3.0简介和启动 376
A.2 Turbo C 3.0集成开发环境 376
A.3 C程序上机执行过程 382
A.4 C程序的调试 383
A.4.1 编译、连接时常见错误 383
A.4.2 程序的动态调试 384
附录B 参考术语表 385
参考文献 392