第1章 绪论 1
1.1 程序设计的应用 1
1.1.1 科学计算 2
1.1.2 信息处理 3
1.1.3 计算机辅助系统 4
1.1.4 计算机控制与仿真系统 5
1.1.5 人工智能 5
1.2 程序设计的基本概念 6
1.2.1 程序设计的本质 6
1.2.2 问题求解的基本流程 8
1.3 程序设计的环境 10
1.3.1 程序设计与编程环境的关系 10
1.3.2 程序设计环境的发展 11
1.4 程序设计的发展 11
1.4.1 程序设计简史 12
1.4.2 程序设计的发展趋势 14
1.5 程序设计的要素 15
1.5.1 程序设计的辅助知识 15
1.5.2 标准化基础知识 16
1.5.3 良好的程序设计风格 17
1.6 本书所用的工具语言 18
1.6.1 C程序设计语言简述 18
1.6.2 Java程序设计语言简述 19
小结 20
习题 20
第2章 程序的结构 22
2.1 程序的基本结构 22
2.2 程序语言的字符集 25
2.2.1 字符集的概念 25
2.3.1 常量 26
2.2.2 关键字 26
2.3 常量和变量 26
2.3.2 变量 27
2.4 基本数据类型 28
2.4.1 数值类型 28
2.4.2 字符型 30
2.4.3 布尔型 31
2.4.4 枚举型 32
2.5 表达式 34
2.5.1 运算符 34
2.5.2 赋值表达式 37
2.5.3 输入输出语句 38
2.6 典型的逻辑结构 41
2.6.1 顺序 41
2.6.2 条件 41
2.6.3 循环 46
2.6.4 goto语句 53
小结 54
习题 55
第3章 程序设计语言翻译基础 58
3.1 什么是编译程序 58
3.2 与编译器相关的程序 60
3.3 编译过程概述 62
3.3.1 词法分析 62
3.3.2 语法分析 63
3.3.3 语义分析 63
3.3.4 中间代码生成 64
3.3.5 代码优化 64
3.3.6 目标代码生成 64
3.4 编译器中的主要数据结构 65
3.3.7 符号表管理 65
3.3.8 出错处理 65
3.5 编译器结构中的其他问题 67
3.6 编译运行时的环境 69
3.6.1 程序执行时的存储器组织 70
3.6.2 完全静态运行时环境 71
3.6.3 基于栈的运行时环境 72
3.6.4 动态存储器 73
3.7 参数传递机制 74
3.7.1 值传递 75
3.7.2 引用传递 75
3.7.3 值结果传递 75
3.7.4 名字传递 75
3.8.1 并行计算机 76
3.8 并行编译基础 76
3.8.2 并行编译系统的结构 77
小结 78
习题 78
第4章 算法 80
4.1 算法的概念 80
4.1.1 算法设计在程序设计中的角色 80
4.1.2 算法的特征 81
4.1.3 算法的复杂度 81
4.2 算法的描述 82
4.2.1 用自然语言描述算法 82
4.2.2 用流程图描述算法 83
4.2.3 用N-S图描述算法 84
4.2.4 用PAD图描述算法 84
4.2.5 用伪代码描述算法 85
4.3.1 算法的正确性 89
4.3 算法分析 89
4.3.2 算法的复杂度 91
4.4 P与NP问题简介 94
4.5 算法设计 97
4.5.1 回溯法 97
4.5.2 分支限界法 102
4.5.3 贪婪法 105
4.5.4 分而治之法 110
4.5.5 动态规划法 116
4.5.6 局部搜索法 123
小结 126
习题 127
第5章 数据类型 130
5.1 程序设计中的数据对象 130
5.2.1 数据类型的描述 132
5.2 数据类型的基本概念 132
5.2.2 数据类型的实现 133
5.2.3 声明 134
5.2.4 类型检查和类型转换 136
5.3 构造数据类型 138
5.3.1 数组 138
5.3.2 指针 148
5.3.3 记录(结构体) 163
5.4 抽象数据类型 166
5.4.1 数据的抽象 167
5.4.2 抽象数据类型的定义 168
5.4.3 抽象数据类型的实现 170
小结 173
习题 173
6.1 数据结构的基本概念 177
6.1.1 数据的逻辑结构 177
第6章 程序设计中常用的数据结构 177
6.1.2 数据的存储结构 178
6.1.3 数据的运算 179
6.2 链表 180
6.2.1 结点 181
6.2.2 链表的构造 182
6.2.3 链表的相关运算 184
6.2.4 双链表和循环链表 187
6.3 队列 189
6.3.1 队列的定义 189
6.3.2 队列的运算 191
6.3.3 队列在程序设计中的应用 193
6.4 树 193
6.4.1 树的定义 193
6.4.2 二叉树的概念 194
6.4.3 二叉树的遍历 197
6.4.4 线索二叉树 200
6.4.5 二叉树在程序设计中的应用 203
小结 205
习题 206
第7章 堆栈与递归程序设计 208
7.1 堆栈 208
7.1.1 堆栈的定义 208
7.1.2 堆栈的应用 211
7.2 递归程序设计 216
7.2.1 递归的定义 216
7.2.2 递归程序的设计 219
7.2.3 递归函数的调用与堆栈 228
7.2.4 递归程序的性能 229
7.2.5 非递归化 231
小结 232
习题 233
第8章 输入输出 234
8.1 流和文件 234
8.1.1 流和文件的概念 234
8.1.2 流和文件的读写 235
8.2 数据库 244
8.2.1 数据库的概念 244
8.2.2 数据库在程序设计中的应用 246
小结 266
习题 267
第9章 程序正确性证明 269
9.1 概述 269
9.2 程序测试 271
9.2.1 黑盒测试 271
9.2.2 白盒测试 275
9.3 数理逻辑基础 277
9.3.1 命题逻辑 278
9.3.2 谓词逻辑 279
9.4 部分正确性证明 281
9.4.1 不变式断言法 281
9.4.2 子目标断言法 286
9.4.3 公理化方法 289
9.5 终止性证明 294
9.5.1 良序集法 294
9.5.2 计数器法 298
9.6 结构化程序的正确性证明 300
9.6.1 结构化程序 300
9.6.2 正确性定理 302
9.6.3 证明程序正确性的代数方法 304
9.6.4 产生循环不变式的一种方法 311
9.7.1 递归程序的模型 313
9.7 递归程序的正确性证明 313
9.7.2 结构归纳法 315
9.7.3 良序归纳法 316
小结 317
习题 318
第10章 结构化程序设计 321
10.1 结构化分析/结构化设计编程思想 321
10.1.1 结构化分析/结构化设计思想简介 321
10.1.2 结构化程序设计思想简介 327
10.2 函数的定义 329
10.3 函数的调用 333
10.3.1 函数调用的一般格式 333
10.3.2 嵌套 337
10.3.3 递归 338
10.4 作用域规则 340
10.5.1 标准库函数 346
10.5 库函数 346
10.5.2 自定义库函数 347
10.6 编译预处理 348
10.6.1 宏 348
10.6.2 编译 351
小结 353
习题 354
第11章 面向对象程序设计 356
11.1 面向对象的思想 356
11.1.1 面向对象的思想及其产生过程 356
11.1.2 面向对象的基本概念 359
11.2 面向对象建模 362
11.2.1 面向对象建模的概念 362
11.2.2 面向对象分析 363
11.2.3 面向对象设计 365
11.2.4 常用的面向对象建模技术 366
11.3 面向对象程序设计 376
11.3.1 面向对象程序语言 376
11.3.2 程序语言中的OOP机制 378
11.4 面向对象技术的发展 393
11.4.1 构件 393
11.4.2 分布式对象中间件 396
11.4.3 基于面向对象技术的应用软件体系结构 397
11.4.4 并发面向对象技术 398
11.5 面向对象技术面临的问题 400
小结 400
习题 401
12.1.2 对等网络程序设计 404
12.1.1 联机多用户程序设计 404
12.1 网络程序设计的发展 404
第12章 网络程序设计 404
12.1.3 客户机/服务器程序设计 405
12.1.4 远程过程调用程序设计 405
12.1.5 浏览器/服务器程序设计 406
12.1.6 分布式程序设计 406
12.2 UNIX环境网络编程 406
12.2.1 基本概念 406
12.2.2 socket编程 409
12.2.3 TCP和UDP协议编程 413
12.3 Windows环境下socket编程 419
12.3.1 Winsock套接字 420
12.3.2 Windows Sockets编程 420
小结 425
习题 425
参考文献 427