1 绪论 1
2 编程准备 5
2.1 程序编写 6
2.1.1 用Visual C++6.0编写程序 6
2.1.2 使用Dev-C++开发程序 9
2.2 程序代码及说明 17
2.3 输出流对象tout 19
2.4 输入流对象cin 19
2.5 程序注释 20
2.6 算术运算符 20
2.7 数学函数 21
2.8 小结 22
习题 23
3 变量、代数与计算机解题 24
3.1 程序的基本结构 25
3.2 变量与数据类型 26
3.2.1 变量的基本概念 26
3.2.2 数据类型与变量的地址空间 27
3.3 定义变量和赋初值 27
3.4 变量赋值 29
3.4.1 赋值符号与赋值表达式 29
3.4.2 变量赋值的5要素 29
3.5 指针变量 30
3.5.1 指针定义与初始化 31
3.5.2 指针赋值 32
3.5.3 在赋值语句中使用间接访问运算符 32
3.6 小结 33
习题 34
4 逻辑思维与计算机解题 35
4.1 关系运算和关系表达式 36
4.1.1 关系运算符 36
4.1.2 关系表达式的一般格式 37
4.1.3 将“是”“否”写成关系表达式 37
4.2 枚举法的思路 38
4.3 循环结构 40
4.3.1 使用循环结构的部分程序 40
4.3.2 for语句的格式和执行过程 40
4.3.3 使用for循环解题实例 41
4.3.4 for循环的程序框图 44
4.4 分支结构 44
4.4.1 if语句的格式 45
4.4.2 分支结构的实例 46
4.5 任务4.1的程序框图 47
4.6 任务4.1的参考程序 48
4.7 逻辑问题及其解法 51
4.7.1 逻辑运算符与逻辑表达式 51
4.7.2 逻辑问题的解题思路 52
4.7.3 任务4.2的参考程序 57
4.8 小结 59
课后阅读材料 59
习题 62
5 函数思维与模块化设计 64
5.1 函数 64
5.1.1 函数的说明 65
5.1.2 函数的定义 66
5.1.3 函数的返回值 66
5.1.4 函数的调用 66
5.1.5 形式参数和实在参数 67
5.1.6 调用和返回 67
5.1.7 带自定义函数的程序设计 68
5.2 指向函数的指针 70
5.3 编程实例1 74
5.4 编程实例2 76
5.5 小结 77
课后阅读材料 78
习题 82
6 数据的组织与处理(1)——数组 84
6.1 数组 84
6.1.1 一维数组的定义 86
6.1.2 数组初始化 87
6.2 筛法 88
6.3 线性查找与折半查找 89
6.4 冒泡排序法 91
6.5 递推 94
6.5.1 递推数列的定义 97
6.5.2 递推算法的程序实现 97
6.6 指针与数组 98
6.6.1 用数组名给指针赋值 98
6.6.2 数组元素地址与指针赋值 99
6.7 字符数组及其处理 101
6.7.1 字符数组的定义和初始化 101
6.7.2 字符数组元素的赋值 103
6.7.3 数组名是一个常量指针 104
6.7.4 编程实例 105
6.8 二维数组 116
6.8.1 二维数组的定义 117
6.8.2 二维数组的初始化 118
6.8.3 二维数组中的元素存放顺序 118
6.9 小结 121
课后阅读材料 122
习题 125
7 数据的组织与处理(2)——结构 129
7.1 结构与结构数组 129
7.1.1 结构体类型的定义 129
7.1.2 结构体变量的定义和引用 130
7.1.3 结构体变量的初始化 132
7.1.4 结构数组 133
7.2 指针和结构 135
7.3 链表 137
7.3.1 建立链表的过程 138
7.3.2 链表结点的插入与删除 143
7.3.3 循环链表 153
7.4 小结 157
习题 157
8 文件 159
8.1 将数据保存到文件 159
8.2 从文件中读取数据 162
8.3 利用输入输出文件解交互类型的题 166
8.4 小结 179
9 递归思想与相应算法 180
9.1 递归及其实现 180
9.2 递归算法举例 189
9.2.1 计算组合数 189
9.2.2 快速排序 189
9.2.3 数字旋转方阵 195
9.2.4 下楼问题 200
9.2.5 跳马问题 203
9.2.6 分书问题 205
9.2.7 八皇后问题 208
9.2.8 青蛙过河 212
9.3 小结 217
课后阅读材料 218
习题 223
10 贪心法 224
10.1 贪心法解题的一般步骤 224
10.1.1 装船问题 224
10.1.2 事件序列问题 228
10.1.3 贪心法解题的一般步骤 231
10.2 贪心法相关理论 231
10.2.1 多阶段决策问题、无后向性与最优化原理 231
10.2.2 有向图最短路径的Dijkstra算法 232
10.2.3 贪心法解题的注意事项 236
10.3 小结 238
习题 238
11 动态规划 239
11.1 最短路径问题 239
11.1.1 问题描述 239
11.1.2 分析与题解 240
11.2 动态规划的基本概念 244
11.3 动态规划思想 246
11.4 举例说明动态规划思路 247
11.5 小结 256
习题 257
12 蒙特卡罗法 259
12.1 伪随机数的产生 259
12.1.1 产生随机整数 259
12.1.2 产生随机小数 260
12.2 伪随机数的应用 261
12.2.1 求π的近似值 261
12.2.2 计算图形面积 263
12.3 小结 265
习题 265
13 多步决策问题 266
13.1 多步决策问题的解题思路 266
13.1.1 人鬼渡河的任务与规则要点 266
13.1.2 人鬼渡河的安全性考虑 267
13.1.3 安全状态的描述 268
13.2 安全条件形式化 269
13.3 从状态图上研究怎样一步一步过河 271
13.4 多步决策问题的编程思路 272
14 深度优先搜索 276
14.1 问题描述 276
14.2 解题思路 277
14.3 深度优先搜索与剪枝 284
15 宽度优先搜索 291
15.1 问题描述 291
15.2 解题思路 298
思考问题 305
习题 305
16 流与输入输出设置 306
16.1 流的概念与输入输出格式 306
16.2 改变整数的进制 306
16.3 设置浮点数的精度 308
16.4 设置输入输出宽度 309
16.5 设置对齐方式和填充字符 311
16.6 其他设置 312
附录A 程序调试 314
A.1 计分程序的调试 314
A.1.1 编译时的调试 316
A.1.2 运行时的调试 318
A.1.3 其他调试相关知识 324
A.2 跳马程序的调试 326
附录B 库函数 334
B.1 数学函数 334
B.2 字符判断函数 336
B.3 字符串相关函数 340
附录C ASCII码表 349
参考文献 350