第1章 绪论 1
第2章 编程准备 4
2.1 程序编写 4
2.1.1 用Visual C++6.0编写程序 4
2.1.2 使用Dev-C++开发程序 8
2.2 程序代码及说明 14
2.3 输出流对象cout 15
2.4 程序注释 16
2.5 算术运算符 16
2.6 数学函数 17
2.7 小结 17
习题 17
第3章 代数思维与计算机解题 19
3.1 程序的基本结构 19
3.2 变量与数据类型 21
3.2.1 变量的基本概念 21
3.2.2 数据类型与变量的地址空间 22
3.3 定义变量和赋初值 22
3.4 变量赋值 23
3.4.1 赋值符号与赋值表达式 23
3.4.2 变量赋值的5要素 24
3.5 指针变量 25
3.5.1 指针定义与初始化 25
3.5.2 指针赋值 26
3.5.3 在赋值语句中使用间接访问运算符 26
3.6 小结 27
习题 28
第4章 逻辑思维与计算机解题 29
4.1 关系运算和关系表达式 30
4.1.1 关系运算符 30
4.1.2 关系表达式的一般格式 30
4.1.3 将“是”“否”写成关系表达式 30
4.2 枚举法的思路 31
4.3 循环结构 33
4.3.1 使用循环结构的部分程序 33
4.3.2 for语句的格式和执行过程 33
4.3.3 使用for循环解题实例 34
4.3.4 for循环的程序框图 36
4.4 分支结构 36
4.4.1 if语句的格式 37
4.4.2 分支结构的实例 38
4.5 任务4.1的程序框图 39
4.6 任务4.1的参考程序 40
4.7 逻辑问题及其解法 41
4.7.1 逻辑运算符与逻辑表达式 42
4.7.2 逻辑问题的解题思路 43
4.7.3 任务4.2的参考程序 47
4.8 小结 48
课后阅读材料 48
习题 53
第5章 函数思维与模块化设计 55
5.1 函数 55
5.1.1 函数的说明 56
5.1.2 函数的定义 56
5.1.3 函数的返回值 56
5.1.4 函数的调用 57
5.1.5 形式参数和实在参数 57
5.1.6 调用和返回 58
5.1.7 带自定义函数的程序设计 58
5.2 编程实例1 60
5.3 编程实例2 61
5.4 几种参数传递方式的比较 63
5.5 小结 66
习题 66
第6章 数据的组织与处理(1)——数组 69
6.1 数组 69
6.1.1 一维数组的定义 71
6.1.2 数组初始化 71
6.1.3 字符数组的定义、初始化和赋值 72
6.1.4 数组与指针 75
6.2 筛法 77
6.3 线性查找与折半查找 78
6.4 冒泡排序法 80
6.5 递推 82
6.5.1 递推数列的定义 82
6.5.2 递推算法的程序实现 83
6.6 字符数组应用 86
6.7 函数跳转表 91
6.8 二维数组 93
6.8.1 二维数组的定义 94
6.8.2 二维数组的初始化 95
6.8.3 二维数组中的元素存放顺序 95
6.9 小结 97
课后阅读材料 98
习题 102
第7章 数据的组织与处理(2)——结构 105
7.1 结构与结构数组 105
7.1.1 结构体类型的定义 105
7.1.2 结构体变量的定义和引用 106
7.1.3 结构体变量的初始化 107
7.1.4 结构数组 108
7.2 指针和结构 110
7.3 链表 111
7.3.1 建立链表的过程 112
7.3.2 链表结点的插入与删除 116
7.3.3 循环链表 124
7.4 小结 128
习题 128
第8章 数据的组织与处理(3)——文件 130
8.1 将数据保存到文件 130
8.2 从文件中读取数据 132
8.3 利用输入输出文件解交互类型的题 135
8.4 小结 145
习题 145
第9章 递归思想与相应算法 146
9.1 递归及其实现 146
9.2 递归算法举例 153
9.2.1 计算组合数 153
9.2.2 快速排序 154
9.2.3 数字旋转方阵 158
9.2.4 下楼问题 162
9.2.5 跳马问题 164
9.2.6 分书问题 166
9.2.7 八皇后问题 169
9.2.8 青蛙过河 172
9.3 小结 177
课外阅读材料 177
习题 181
第10章 多步决策问题 182
10.1 多步决策问题的解题思路 182
10.1.1 人鬼渡河的任务与规则要点 182
10.1.2 人鬼渡河的安全性考虑 183
10.1.3 安全状态的描述 183
10.2 安全条件形式化 184
10.3 从状态图上研究怎样一步一步过河 186
10.4 多步决策问题的编程思路 186
10.5 小结 189
习题 189
第11章 宽度优先搜索 191
11.1 骑士聚会问题 191
11.2 解题思路 196
11.3 小结 202
习题 203
第12章 深度优先搜索 204
12.1 问题描述 204
12.2 解题思路 205
12.3 深度优先搜索与剪枝 211
12.4 小结 216
习题 216
第13章 贪心法 217
13.1 贪心法解题的一般步骤 217
13.1.1 装船问题 217
13.1.2 事件序列问题 220
13.1.3 贪心法解题的一般步骤 222
13.2 贪心法相关理论 223
13.2.1 多阶段决策问题、无后向性与最优化原理 223
13.2.2 有向图最短路径的Dijkstra算法 223
13.2.3 贪心法解题的注意事项 227
13.3 小结 228
习题 228
第14章 动态规划 230
14.1 最短路径问题 230
14.1.1 问题描述 230
14.1.2 分析与题解 231
14.2 动态规划的基本概念 234
14.3 动态规划思想 235
14.4 举例说明动态规划思路 237
14.5 小结 244
习题 244
第15章 蒙特卡罗法 246
15.1 伪随机数的产生 246
15.1.1 产生随机整数 246
15.1.2 产生随机小数 247
15.2 伪随机数的应用 248
15.2.1 求π的近似值 248
15.2.2 计算图形面积 249
15.3 小结 250
习题 250
附录A 程序调试 251
A.1 计分程序的调试 251
A.1.1 编译时的调试 252
A.1.2 运行时的调试 254
A.1.3 其他调试相关知识 259
A.2 跳马程序的调试 260
附录B 库函数 267
B.1 数学函数 267
B.2 字符判断函数 268
B.3 字符串相关函数 271
附录C ASCII码表 277
附录D 输入输出的格式控制 278
D.1 流的概念与输入输出格式 278
D.2 改变整数的进制 278
D.3 设置浮点数的精度 279
D.4 设置输入输出宽度 280
D.5 设置对齐方式和填充字符 281
D.6 其他设置 282
参考文献 284