目录 1
编者的话 1
前言 1
上篇 C语言程序设计 1
第1章 C语言基础 1
1.1 C程序的基本结构 1
1.2 基本字符集与标识符 4
1.2.1 基本字符集 4
1.2.2 标识符 4
1.2.3 关键字与标准标识符 4
1.2.4 常量与变量 5
1.2.5 常量标识符 5
1.3 简单数据类型 6
1.3.1 整数类型 6
1.3.2 实数类型 8
1.3.3 字符类型 9
1.4 运算符与表达式 10
1.4.1 算术运算符与算术表达式 10
1.4.2 关系运算符与关系表达式 11
1.4.3 逻辑运算符与逻辑表达式 12
1.4.4 其他运算符 13
1.4.5 类型转换 18
1.5 赋值语句及简单输入、输出 19
1.5.1 赋值语句 19
1.5.2 赋值表达式 20
1.5.3 标准输出函数printf 20
1.5.4 标准输入函数scanf 23
1.6 编译预处理 24
1.6.1 预处理命令 24
1.6.2 宏替换 25
1.6.4 条件编译 26
1.6.3 文件包含 26
1.7 程序设计风格 27
1.8 习题 28
第2章 程序控制结构 31
2.1 if语句 31
2.1.1 简单if语句 31
2.1.2 复合语句 32
2.1.3 扩展if语句与嵌套if语句 32
2.2 switch语句 34
2.3 while语句 35
2.4 do-while语句 36
2.5 for语句 37
2.6 多重循环结构 38
2.7 break语句、continue语句和goto语句 39
2.7.1 break语句 39
2.7.2 continue语句 40
2.7.3 goto语句 41
2.8 习题 41
第3章 数组 46
3.1 一维数组 46
3.1.1 一维数组说明 46
3.1.2 一维数组的初始化 47
3.2 二维数组 47
3.2.1 二维数组说明 47
3.2.2 二维数组的初始化 48
3.3 数组应用示例 48
3.4 字符数组与字符串 51
3.5 习题 53
第4章 函数 61
4.1 函数定义 61
4.2.1 函数调用的一般形式 63
4.2.2 函数调用的两种方式 63
4.2 函数调用与函数说明 63
4.2.3 函数说明 64
4.3 通过函数参数传递数据 66
4.4 函数的递归调用 67
4.5 数组作为函数参数传递 70
4.6 变量的作用域和存储类别 72
4.6.1 变量的作用域 72
4.6.2 局部变量和全局变量 72
4.6.3 变量的生存期 73
4.6.4 变量的存储类别 73
4.6.5 变量的存储类别说明符 73
4.7 函数的存储类别 76
4.7.1 用extern说明函数 76
4.8 习题 77
4.7.2 用static说明函数 77
第5章 指针 85
5.1 指针变量的说明与赋值操作 85
5.1.1 指针和地址的概念 85
5.1.2 指针变量的说明 85
5.1.3 指针变量的初始化 86
5.1.4 指针变量的赋值操作 87
5.2 指针运算 89
5.2.1 指针的赋值运算 90
5.2.2 指针的算术运算 91
5.2.3 指针的关系运算 92
5.3 指向数组的指针变量 93
5.3.1 数组与指针的关系 93
5.3.2 指向一维数组的指针 94
5.3.3 指向二维数组的指针 96
5.3.4 数组指针作为函数参数 97
5.4.1 字符数组与字符串的区别 98
5.4 指向字符串的指针变量 98
5.4.2 指向字符串的指针变量——字符指针 99
5.4.3 字符指针作为函数参数 99
5.5 指向函数的指针变量 101
5.6 返回指针值的函数 102
5.7 指针数组 103
5.8 指向指针的指针变量 106
5.9 习题 107
6.1 用typedef定义类型 116
第6章 结构类型 116
6.2 结构变量说明与赋值操作 117
6.2.1 结构类型定义 117
6.2.2 结构变量说明 118
6.2.3 结构变量的初始化 119
6.2.4 结构变量的赋值操作 120
6.2.5 结构类型的嵌套 121
6.3.1 结构数组 123
6.3 结构数组和结构指针 123
6.3.2 结构指针 125
6.3.3 结构指针作为函数参数 127
6.4 动态存储分配及释放 129
6.4.1 动态数据结构 129
6.4.2 动态存储分配函数malloc 129
6.4.3 动态存储释放函数free 130
6.4.4 动态存储分配函数calloc 131
6.5 习题 131
第7章 共用体和枚举类型 133
7.1 共用体 133
7.1.1 共用体的基本概念 133
7.1.2 共用体类型定义和变量说明 133
7.1.3 共用体变量的初始化 136
7.1.4 共用体变量的赋值操作 136
7.2.1 枚举类型定义和枚举变量说明 140
7.2 枚举类型 140
7.2.2 枚举变量的初始化 142
7.2.3 枚举变量的运算 143
7.3 习题 146
第8章 文件 149
8.1 文件的基本概念 149
8.2 文件指针 150
8.3 文件的打开与关闭 151
8.3.1 打开文件函数fopen 151
8.3.2 关闭文件函数fclose 154
8.4 文本文件操作 155
8.4.1 字符读写函数fgetc和fputc 155
8.4.2 字符串读写函数fgets和fputs 158
8.4.3 格式化读写函数fscanf和fprintf 160
8.5.2 数据块读写函数fread和fwrite 161
8.5.1 二进制文件操作的特点 161
8.5 二进制文件操作 161
8.6 文件的定位与随机读写 163
8.6.1 文件位置指针当前位置函数ftell 163
8.6.2 文件位置指针复位函数rewind 164
8.6.3 文件位置指针定位函数fseek 165
8.6.4 文件的随机读写 166
8.7 文件检测函数 169
8.7.1 文件结束检测函数feof 170
8.7.2 文件操作出错检测函数ferror 170
8.7.3 出错标志复位函数clearerr 171
8.8 习题 171
第9章 综合示例 175
9.1 示例 175
9.2 习题 190
第10章 算法和数据结构的意义 193
10.1 数据结构的概念和分类 193
下篇 算法和数据结构 193
10.2 算法的描述和效率评估 194
10.3 习题 197
第11章 表结构 198
11.1 顺序表 198
11.1.1 表结构的定义和存储方法 198
11.1.2 顺序表的基本插入和删除 199
11.1.3 顺序表的查找 200
11.2 简单的单向链表 204
11.2.1 链表的概念 204
11.2.2 插入删除结点时的链操作方法 207
11.2.3 简单链表的构造、查找和输出 210
11.3 其他形式的单向链表 212
11.3.1 带监督元结点的链表 212
11.4.1 有序链表的插入 214
11.4 有序链表的插入和删除 214
11.3.2 循环链表 214
11.4.2 有序链表的删除 216
11.5 双向链表 216
11.5.1 双向链表的结构 216
11.5.2 双向链表的查找插入和删除 217
11.6 静态链表 219
11.6.1 静态链表的含义 219
11.6.2 静态链表的综合程序 221
11.7 习题 223
第12章 表的相关结构 227
12.1 栈结构和队结构 227
12.1.1 栈和队的概念 227
12.1.2 栈的实现 228
12.1.3 队的实现 230
12.1.4 栈的应用 233
12.2.1 散列表的概念和散列函数设计方法 237
12.2 散列表 237
12.2.2 散列表的构造和查找 238
12.3 字符串 242
12.3.1 字符串的运算和存储结构 242
12.3.2 模式匹配的实现 243
12.4 矩阵 246
12.4.1 矩阵的存储 246
12.4.2 矩阵运算示例 249
12.5 习题 252
第13章 树结构 255
13.1 基本概念 255
13.1.1 树的定义和有关术语 255
13.1.2 二叉树 257
13.1.3 普通树、森林和二叉树的相互转换 260
13.2.1 遍历算法 262
13.2 二叉树的遍历和构造 262
13.2.2 遍历的应用 265
13.2.3 遍历序列的前趋和后继 267
13.2.4 用中序序列和先序序列构造二叉树 268
13.2.5 用扩充先序序列构造二叉树 270
13.3 检索树 271
13.3.1 检索树的定义和查找算法 271
13.3.2 检索树的插入和构造 271
13.3.3 检索树的删除 273
13.4 哈夫曼树 277
13.4.1 哈夫曼算法 277
13.4.2 哈夫曼树的应用 280
13.5 习题 280
第14章 图结构 283
14.1 基本概念 283
14.1.1 图的定义和种类 283
14.1.2 有关术语 284
14.2.1 邻接矩阵及其顺序存储 286
14.2 图的存储方法 286
14.2.2 邻接表 288
14.3 图的遍历 289
14.3.1 先深搜索 290
*14.3.2 先广搜索 292
14.4 最小生成树 294
14.4.1 Krnskal算法 294
14.4.2 Prim算法 296
14.5 最短路径 298
14.5.1 Dijkstra算法的描述 298
14.5.2 Dijkstra算法的实现方法 300
14.6 习题 302
15.1 插入排序 303
15.1.1 排序方法的种类 303
第15章 排序 303
15.1.2 直接插入排序 304
15.1.3 二分插入排序 305
15.2 选择排序 307
15.2.1 直接选择排序 307
15.2.2 堆排序 307
15.3 交换排序 312
15.3.1 冒泡排序 312
15.3.2 快速排序 314
15.4 习题 317
附录 319
附录A C常用关键字 319
附录B C运算符的优先级和结合性 319
附录C C常用字符与ASCII代码对照表 320
附录D C常用库函数表 321
参考文献 330