1 绪论 1
2 编程准备 5
2.1 程序编写 6
2.2 程序代码及说明 9
2.3 输出流对象cout 11
2.4 输入流对象cin 11
2.5 程序注释 12
2.6 算术运算符 12
2.7 数学函数 13
2.8 小结 14
习题 15
3 变量、代数与计算机解题 16
3.1 程序的基本结构 16
3.2 变量与数据类型 18
3.2.1 变量的基本概念 18
3.2.2 数据类型 19
3.3 定义变量和赋初值 19
3.4 变量赋值 20
3.4.1 赋值符号与赋值表达式 20
3.4.2 变量赋值的5要素 20
3.5 小结 21
习题 22
4 逻辑思维与计算机解题 23
4.1 关系运算和关系表达式 24
4.1.1 关系运算符 24
4.1.2 关系表达式的一般格式 25
4.1.3 将“是”“否”写成关系表达式 25
4.2 枚举法的思路 26
4.3 循环结构 28
4.3.1 使用循环结构的部分程序 28
4.3.2 for语句的格式和执行过程 28
4.3.3 使用for循环解题实例 29
4.3.4 for循环的程序框图 32
4.4 分支结构 32
4.4.1 if语句的格式 33
4.4.2 分支结构的实例 34
4.5 任务4.1的程序框图 35
4.6 任务4.1的参考程序 36
4.7 逻辑问题及其解法 39
4.7.1 逻辑运算符与逻辑表达式 39
4.7.2 逻辑问题的解题思路 40
4.7.3 任务4.2的参考程序 46
4.8 小结 50
习题 50
5 数据组织、筛选与排序问题的解题思路 52
5.1 数组 53
5.1.1 一维数组的定义 54
5.1.2 数组初始化 55
5.2 筛法 56
5.3 冒泡排序法 61
5.4 结构与结构数组 63
5.4.1 结构体类型的定义 64
5.4.2 结构体变量的定义和引用 64
5.4.3 结构体变量的初始化 66
5.4.4 结构数组 67
5.5 二维数组 69
5.5.2 二维数组的初始化 71
5.5.1 二维数组的定义 71
5.5.3 二维数组中的元素存放顺序 72
5.6 小结 74
习题 75
6 函数、递推与递归 77
6.1 函数 78
6.1.1 函数的说明 79
6.1.2 函数的定义 79
6.1.3 函数的返回值 79
6.1.4 函数的调用 80
6.1.5 形式参数和实在参数 80
6.1.6 调用和返回 81
6.1.7 带自定义函数的程序设计 82
6.1.8 编程实例 84
6.1.9 break和continue语句 85
6.2 递推 87
6.2.1 递推数列的定义 90
6.2.2 递推算法的程序实现 90
6.3 递归及其实现 92
6.4 递归算法举例 101
6.4.1 计算组合数 101
6.4.2 青蛙过河 102
6.4.3 快速排序 108
6.4.4 分书问题 114
6.4.5 下楼问题 117
6.4.6 八皇后问题 120
6.4.7 跳马问题 124
6.4.8 数字旋转方阵 127
6.5 小结 132
习题 133
7 指针 139
7.1 指针的概念 140
7.1.1 指针定义与初始化 140
7.1.2 指针赋值 141
7.1.3 在赋值语句中使用间接访问运算符 143
7.2.1 用数组名给指针赋值 144
7.2 指针与数组 144
7.2.2 数组名是一个常量指针 146
7.2.3 编程实例 147
7.2.4 指针数组 150
7.3 字符串及其处理 153
7.3.1 字符数组的定义和初始化 153
7.3.2 字符数组元素的赋值 155
7.3.3 字符判断函数 156
7.3.4 字符串相关函数 157
7.3.5 字符串应用举例 157
7.3.6 字符串匹配 159
7.3.7 字符串的3种操作 161
7.4 指针与函数 166
7.4.1 函数返回指针 166
7.4.2 指向函数的指针 168
7.5 指针和结构 172
7.6 指针与结构数组 174
7.7 引用的概念及应用 178
7.8 利用引用来传递参数 179
7.9 几种参数传递方式的比较 181
7.10 小结 186
习题 187
8.1 流 192
8 流与文件 192
8.1.1 流的概念与输入输出格式 193
8.1.2 改变整数的进制 193
8.1.3 设置浮点数的精度 194
8.1.4 设置输入输出宽度 195
8.1.5 设置对齐方式和填充字符 197
8.1.6 其他设置 198
8.2 文件 199
8.2.1 将数据保存到文件 200
8.2.2 从文件中读取数据 202
8.2.3 利用输入输出文件解交互类型的题 206
8.3 小结 218
9 贪心法 220
9.1 贪心法解题的一般步骤 220
9.1.1 事件序列问题 220
9.1.2 区间覆盖问题 223
9.1.3 贪心法解题的一般步骤 227
9.2 贪心法相关理论 228
9.2.1 多阶段决策问题、无后向性与最优化原理 228
9.2.2 有向图最短路径的Dijkstra算法 229
9.2.3 贪心法解题的注意事项 234
9.3 小结 235
习题 235
10.1.1 问题描述 236
10 动态规划 236
10.1 最短路径问题 236
10.1.2 分析与题解 237
10.2 动态规划的基本概念 241
10.3 动态规划思想 243
10.4 举例说明动态规划思路 244
10.5 小结 253
习题 254
11 链表 256
11.1 举例说明链表的概念 256
11.2 建立链表的过程 257
11.3 链表结点的插入与删除 262
11.3.1 链表结点的插入 262
11.3.2 链表结点的删除 269
11.4 循环链表 272
11.5 小结 277
习题 278
12 二叉树 280
12.1 基本概念 280
12.2 二叉树的遍历 281
12.3 二叉树的建立 283
习题 286
12.4 小结 286
13 蒙特卡罗法 287
13.1 伪随机数的产生 287
13.1.1 产生随机整数 287
13.1.2 产生随机小数 288
13.2 伪随机数的应用 289
13.2.1 求π的近似值 289
13.2.2 计算图形面积 291
13.3 小结 293
习题 293
14 综合练习 294
A.1 计分程序的调试 296
附录A 程序调试 296
A.1.1 编译时的调试 298
A.1.2 运行时的调试 300
A.1.3 其他调试相关知识 306
A.2 跳马程序的调试 308
附录B 库函数 316
B.1 数学函数 316
B.2 字符判断函数 318
B.3 字符串相关函数 322
附录C ASCII码表 331
参考文献 332