第一篇 语言基础 3
第1章 C语言的基本概念 3
1.1 C语言的发展与特点 3
1.1.1 C语言的发展 3
1.1.2 C语言的特点 4
1.2 几个基本概念 5
1.3 C语言的基本标识符 6
1.3.1 字符集 6
1.3.2 标识符 7
1.4 C语言程序的几个简单实例 8
1.5 C语言程序的结构特点 10
1.6 C语言程序的编译和执行 11
本章小结 13
习题一 13
第2章 基本数据类型及其运算 15
2.1 C语言的数据类型 15
2.1.1 数据类型的一般概念 15
2.1.2 常量 16
2.2 数据类型及变量 20
2.2.1 基本数据类型 20
2.2.2 变量及变量的定义 21
2.2.3 变量的初始化 22
2.3 运算符和表达式 23
2.3.1 运算符和表达式概述 23
2.3.2 混合类型数据的运算 24
2.3.3 赋值语句及赋值表达式 25
2.3.4 算术运算符及算术表达式 27
2.3.5 关系运算符及关系表达式 29
2.3.6 逻辑运算符及逻辑表达式 30
2.3.7 位运算符 31
2.3.8 其他运算符及表达式 33
2.4 基本输入/输出函数 34
2.4.1 格式化输出函数 35
2.4.2 格式化输入函数 37
2.4.3 字符输入与输出函数 38
本章小结 40
习题二 40
第3章 程序控制结构 43
3.1 C语言结构化程序设计基础 43
3.1.1 基本控制结构 43
3.1.2 程序的结构化 44
3.2 顺序结构 45
3.2.1 语句和语句块 45
3.2.2 顺序结构示例 46
3.3 分支结构 47
3.3.1 if-else语句 48
3.3.2 if-else if-else多分支语句 49
3.3.3 条件分支的嵌套 50
3.3.4 switch分支 53
3.4 循环结构 56
3.4.1 while(当型循环) 56
3.4.2 do-while(直到型循环) 57
3.4.3 for循环语句 58
3.4.4 三种循环的比较 60
3.4.5 多重循环 61
3.4.6 循环中的控制转移 62
3.4.7 结构化程序设计注意事项 64
3.5 结构化程序设计应用举例 65
本章小结 70
习题三 71
第4章 复合数据结构基础 74
4.1 数组及其应用 74
4.1.1 一维数组 74
4.1.2 多维数组 78
4.1.3 字符型数组的应用 80
4.2 指针及其应用 82
4.2.1 指针的基本概念及定义方式 82
4.2.2 指针的初始化 84
4.2.3 指针的运算 85
4.2.4 用指针操作基本数据对象 87
4.2.5 用指针操作数组 87
4.3 结构体及其应用 89
4.3.1 结构体的声明 89
4.3.2 结构体变量的定义 90
4.3.3 结构体成员的引用 92
4.3.4 结构体变量的初始化 93
4.4 联合体及其应用 94
4.4.1 联合体的声明 94
4.4.2 联合体变量的定义 95
4.4.3 联合体成员的引用 96
4.4.4 定义联合体变量应注意的问题 97
4.5 枚举类型及其应用 99
4.5.1 枚举类型的声明 99
4.5.2 枚举类型变量的定义 99
4.5.3 枚举类型变量的应用 99
4.6 自定义类型 102
本章小结 103
习题四 104
第二篇 程序设计 109
第5章 结构化程序设计概论 109
5.1 数据的基本概念 109
5.1.1 数据与信息 109
5.1.2 数据与地址 110
5.1.3 数据类型 110
5.1.4 文字常量 111
5.1.5 变量 111
5.1.6 声明 112
5.2 代码的基本概念 113
5.2.1 表达式语义 113
5.2.2 赋值与初始化 115
5.2.3 代码与计算 116
5.2.4 控制流 116
5.2.5 断言与程序不变量 116
5.3 算法及其表示方法概要 117
5.3.1 算法的基本概念 117
5.3.2 代码与伪代码 118
5.4 结构化程序的组织 119
5.4.1 程序的结构化 119
5.4.2 程序的一般结构 120
5.4.3 结构化与函数抽象 121
5.4.4 程序范型 123
5.5 程序测试与代码优化 126
5.5.1 程序测试 126
5.5.2 程序效率与代码优化 130
本章小结 130
习题五 131
第6章 函数与模块设计 133
6.1 函数概述 133
6.2 函数的声明、定义与调用 135
6.2.1 函数声明 135
6.2.2 函数定义 136
6.2.3 函数调用 138
6.2.4 函数参数与返回值 140
6.2.5 函数的嵌套调用 144
6.3 函数调用栈框架 145
6.3.1 函数调用栈框架的基本概念 145
6.3.2 值传递与地址传递 149
6.4 作用域 153
6.4.1 变量的作用域 153
6.4.2 函数的作用域 154
6.5 变量的存储类别 155
6.5.1 auto变量 155
6.5.2 static变量 156
6.5.3 register变量 156
6.5.4 extern变量 157
6.6 模块化程序设计 157
6.6.1 模块的独立性原则 158
6.6.2 自顶向下、逐步求精 158
6.7 综合举例 165
本章小结 172
习题六 173
第7章 库与接口设计 176
7.1 用户、接口与库概述 176
7.2 标准库 177
7.2.1 标准I/O库 177
7.2.2 数学库接口 178
7.2.3 数字与字符特征库接口 179
7.2.4 字符串库接口 180
7.2.5 辅助函数库接口 186
7.3 图形库 188
7.3.1 图形系统初始化 188
7.3.2 基本绘图函数 189
7.3.3 图形库的应用及自定义接口 191
7.4 接口设计的原则 201
本章小结 202
习题七 202
第8章 复合数据类型——数组与字符串 206
8.1 数据类型与数据结构 206
8.1.1 数据与数据结构的关系 206
8.1.2 数据的逻辑结构 207
8.1.3 数据的物理结构 207
8.1.4 数据结构上的操作 207
8.1.5 同质复合数据类型 208
8.2 数组 209
8.2.1 数组的下标 209
8.2.2 数组的内部表示 210
8.2.3 有关元素下标越界的说明 210
8.2.4 数组的使用 211
8.2.5 多维数组 218
8.2.6 多维数组作为函数参数 221
8.3 字符串 222
8.3.1 字符串的内部表示 222
8.3.2 作为抽象数据的字符串 223
8.3.3 字符串变量 225
8.3.4 ANSI标准字符串库 227
8.3.5 字符串的应用 231
本章小结 236
习题八 236
第9章 复合数据类型——结构体与指针 240
9.1 结构体 240
9.1.1 结构体的意义 240
9.1.2 结构体的应用 241
9.1.3 结构体指针 245
9.2 指针 246
9.2.1 指针的意义和作用 246
9.2.2 指针的声明与使用 247
9.2.3 指针与其他数据结构的关系 249
9.2.4 动态存储分配 254
9.2.5 指针与函数 256
9.3 链表 259
9.3.1 链表的构造 259
9.3.2 链表元素的遍历 263
9.3.3 链表的插入操作 265
9.3.4 链表的删除操作 269
本章小结 270
习题九 271
第10章 文件与数据存储 275
10.1 文件的基本概念 275
10.1.1 什么是文件 275
10.1.2 文件结构体与文件指针 276
10.1.3 文件的类型 276
10.2 基本的文件操作 277
10.2.1 打开文件 278
10.2.2 关闭文件 280
10.2.3 读写文件 281
10.2.4 文件指针操作 288
10.3 文件应用实例 289
本章小结 292
习题十 293
第11章 算法设计与分析 296
11.1 算法的概念与特征 296
11.1.1 算法举例 296
11.1.2 算法的基本特征 298
11.2 算法的类型与结构 299
11.2.1 数值算法与非数值算法 299
11.2.2 算法的基本结构 299
11.3 算法的描述方法 300
11.3.1 流程图 301
11.3.2 N-S图 302
11.3.3 伪代码 303
11.4 算法的设计与实现 304
11.4.1 素数判断问题 304
11.4.2 最大公约数问题 309
11.5 算法分析与算法复杂度 311
11.5.1 排序算法分析 312
11.5.2 算法复杂度 316
11.5.3 归并排序 319
11.5.4 标准复杂度类型 325
11.6 常用算法设计与分析 327
11.6.1 快速排序算法的基本原理 327
11.6.2 快速排序算法的实现 330
11.6.3 快速排序算法的效率分析 332
本章小结 333
习题十一 333
第12章 递归程序设计 337
12.1 递归问题的引入 337
12.1.1 递归的简单例子 338
12.1.2 递归过程的跟踪 339
12.1.3 递归信任与递归范型 344
12.2 典型递归程序 345
12.2.1 Hanoi塔问题 345
12.2.2 分形问题 349
12.2.3 其他递归问题 353
12.3 递归与迭代 355
本章小结 356
习题十二 357
第13章 数据抽象 361
13.1 抽象数据类型 361
13.2 线性表类型 362
13.2.1 线性表类型定义 362
13.2.2 线性表的顺序表示及其实现 364
13.2.3 通用线性表类型 370
13.3 栈 372
13.3.1 抽象栈类型定义 372
13.3.2 抽象栈的实现 372
13.3.3 栈的应用 374
13.4 队列 377
13.4.1 抽象队列类型的定义 377
13.4.2 队列的实现 378
13.4.3 队列的应用 381
13.5 符号表 383
13.5.1 定义抽象的符号表 384
13.5.2 键与值类型的确定 386
13.5.3 无定义值的处理方法 387
13.5.4 抽象符号表的接口声明 388
13.6 哈希表 389
13.6.1 哈希表的基本概念 389
13.6.2 哈希函数 397
13.6.3 负载因子与桶的数目 397
13.7 抽象哈希表的应用 398
13.7.1 重集元素的计数 398
13.7.2 使用抽象符号表 402
13.7.3 抽象符号表的局限性 405
本章小结 408
习题十三 409
第14章 算法与程序抽象 412
14.1 基本函数设计原则 412
14.1.1 软件评判标准 412
14.1.2 内聚性 413
14.1.3 耦合度 416
14.2 数据封装与信息隐藏 417
14.2.1 客户函数与服务器函数 417
14.2.2 数据封装 419
14.2.3 信息隐藏 421
14.3 函数指针 422
14.3.1 函数指针的目的 423
14.3.2 函数指针声明 425
14.3.3 函数指针的使用 426
14.3.4 函数指针类型 430
14.4 回调函数 430
14.4.1 回调函数 431
14.4.2 遍历与回调 432
14.4.3 回调函数参数 433
14.4.4 值的存储与删除 434
14.5 再论抽象符号表 436
14.5.1 完整的抽象符号表接口 436
14.5.2 完整的抽象符号表实现 438
本章小结 443
习题十四 444
参考文献 445