第一篇 基础知识 3
第1章C/C++语言基础 3
1.1 C/C++程序的基本框架 3
1.2程序中的数据 6
1.2.1变量 6
1.2.2常量 9
1.3运算符和表达式 10
1.3.1运算符的优先级和结合性 10
1.3.2算术运算符及算术表达式 11
1.3.3赋值运算符及赋值表达式 14
1.3.4关系运算符及关系表达式 15
1.3.5逻辑运算符及逻辑表达式 16
1.3.6类型转换 18
1.4 C/C++的语句 21
1.5数学函数的使用 22
1.5.1常用的数学函数 22
1.5.2数学函数的使用 23
1.6算法及程序控制结构 26
1.6.1算法及控制结构 26
1.6.2顺序结构 26
1.7选择结构 28
1.7.1if语句 28
1.7.2条件运算符与条件表达式 33
1.7.3 switch语句 34
1.8循环结构 39
1.8.1 3种循环语句 39
1.8.2 break语句和continue语句 45
1.8.3循环的嵌套 49
1.8.4循环结构例子 51
1.9函数设计 57
1.9.1函数概述 57
1.9.2函数的定义 58
1.9.3函数参数 60
1.9.4函数的返回值 62
1.9.5函数的调用 64
1.9.6函数的嵌套调用 65
1.9.7函数的设计 66
1.10数组 72
1.10.1一维数组的定义与引用 72
1.10.2二维数组的定义和引用 76
1.10.3数组名作函数参数 79
1.10.4编写数组应用的综合程序 81
1.11指针与指针变量 85
1.11.1指针概述 85
1.11.2指针与指针变量 87
1.11.3指针变量作函数参数 90
1.11.4数组与指针变量 94
1.11.5编写指针应用的综合程序 98
第2章 字符及字符串基础知识 103
2.1字符型数据 103
2.1.1字符型变量 103
2.1.2字符型常量 104
2.1.3字符型数据的输入/输出 106
2.2字符串常量 108
2.3字符数组 110
2.3.1字符数组的定义与初始化 110
2.3.2字符数组元素的引用 111
2.3.3字符数组的输入/输出 112
2.3.4字符数组与字符串常量的区别与联系 114
2.4字符指针变量 115
2.4.1字符指针变量的定义与引用 116
2.4.2字符指针变量、字符数组与字符串常量 116
2.5字符串处理函数 119
2.6编写处理字符型数据的程序 125
第二篇 程序设计方法及在线实践(基础篇) 131
第3章ACM/ICPC程序设计竞赛与在线实践 131
3.1程序设计竞赛与在线程序实践 131
3.2 ACM/ICPC程序设计竞赛简介 132
3.3 ACM/ICPC竞赛题目特点 132
3.3.1 ACM/ICPC题目组成及特点 132
3.3.2 ACM/ICPC题目的输入/输出 133
3.3.3 ACM/ICPC题目类型 134
3.4 ACM/ICPC竞赛题目解析 135
第4章 枚举 145
4.1枚举的基本思路 145
4.2歌德巴赫猜想 149
4.3其他竞赛题目解析 154
第5章 模拟 169
5.1模拟的基本思路 169
5.2模拟约瑟夫环 171
5.3游戏的模拟 177
5.4其他模拟题目解析 191
第6章 字符及字符串处理 199
6.1字符转换与编码问题 199
6.1.1字符转换 199
6.1.2字符编码 202
6.2回文的判断与处理 211
6.3子串处理 216
6.4其他竞赛题目解析 222
第三篇 程序设计方法及在线实践(提高篇) 233
第7章 高精度计算 233
7.1基础知识 233
7.1.1进制转换 233
7.1.2用字符型数组或整型数组实现算术运算 236
7.1.3高精度计算的基本思路 239
7.2高精度数的基本运算 243
7.2.1高精度数的加法 243
7.2.2高精度数的乘法 246
7.2.3高精度数的除法 249
7.3其他高精度题目解析 254
7.3.1数列问题 254
7.3.2其他题目 257
第8章 递归与搜索 261
8.1递归的基本思想 261
8.1.1什么是递归 261
8.1.2例题解析及递归函数设计 263
8.1.3递归存在的问题 271
8.2递归思想在竞赛题目中的应用 272
8.3递归与搜索 278
8.3.1搜索算法思想 278
8.3.2递归函数的设计 279
8.3.3例题解析 279
8.4递归方法求解排列组合问题 292
8.4.1排列问题 292
8.4.2组合问题 299
第9章 排序及检索 311
9.1排序算法 311
9.1.1插入排序法 311
9.1.2冒泡法排序 314
9.1.3简单选择法排序 318
9.2 qsort函数及其使用 322
9.2.1 qsort函数的用法 322
9.2.2 qsort函数应用例子 325
9.3竞赛题目解析 330
9.3.1数值型数据的排序 330
9.3.2字符型数据的排序 334
9.3.3 混合数据的排序 337
9.4二分法思想及二分检索 343
9.4.1二分法的思想 343
9.4.2二分法检索 343
9.4.3竞赛题目分析 346
第四篇 课程设计 353
第10章 课程设计:字符界面扫雷游戏的开发 353
10.1软件需求说明 353
10.2地图的表示与输出 355
10.2.1 Windows操作系统扫雷游戏简介 355
10.2.2如何表示地图 356
10.2.3如何表示一个位置的8个相邻位置 357
10.2.4如何输出地图 358
10.2.5测试程序 359
10.3随机生成地图 361
10.3.1随机函数rand() 361
10.3.2随机生成地图 362
10.3.3测试程序 363
10.4如何实现玩游戏 366
10.4.1显示给用户看的地图 366
10.4.2输出用户地图 367
10.4.3点开一片连续的没有地雷的区域 368
10.4.4游戏的玩法 368
10.4.5测试程序 369
10.4.6完善程序 374
第五篇 附录 379
附录A C/C++程序的编写与运行 379
附录B程序测试与调试 385
附录C ACM/ICPC入门指导 399
附录D C/C++的输入/输出 406
附录E ASCII编码表 420
附录F C/C++关键字 421
附录G运算符及其优先级与结合性 422
附录H本教材例题和练习题在ZOJ、POJ及UVA上的题号 423
参考文献 429