第1章 C/C++语言概述 1
1.1 程序的基本框架 2
1.2 变量 2
1.2.1 变量的定义 2
1.2.2 变量的赋值 3
1.2.3 变量的引用 3
1.3 C/C++语言的数据类型 4
1.4 常量 6
1.5 运算符和表达式 7
1.5.1 算术运算符 7
1.5.2 赋值运算符 9
1.5.3 关系运算符 9
1.5.4 逻辑运算符 10
1.5.5 位运算符 10
1.5.6 sizeof运算符 15
1.5.7 类型强制转换运算符 15
1.5.8 运算符的优先级 16
1.6 注释 16
1.7 分支语句 17
1.7.1 if语句 17
1.7.2 switch语句 19
1.8 循环语句 21
1.8.1 for语句 21
1.8.2 while语句 22
1.8.3 do-while语句 23
1.8.4 break语句 23
1.8.5 continue语句 24
1.9 函数 25
1.9.1 函数的定义 25
1.9.2 函数的调用 26
1.9.3 参数传递和返回值 27
1.9.4 库函数和头文件 28
1.10 标准输入输出 28
1.10.1 printf函数(标准输出函数) 28
1.10.2 scanf函数(标准输入函数) 30
1.11 全局变量和局部变量 31
1.12 数组 32
1.12.1 一维数组 32
1.12.2 二维数组 34
1.12.3 数组的初始化 36
1.12.4 数组越界 36
1.13 字符串 37
1.13.1 字符串常量 38
1.13.2 用字符数组存放的字符串 38
1.14 指针 41
1.14.1 指针的基本概念 41
1.14.2 指针运算 44
1.14.3 空指针 46
1.14.4 指向指针的指针 46
1.14.5 指针和数组 47
1.14.6 字符串和指针 49
1.14.7 void指针 50
1.14.8 函数指针 51
1.14.9 指针和动态内存分配 54
1.14.10 误用无效指针 56
1.15 结构 57
1.15.1 “结构”的概念 57
1.15.2 结构变量的定义 58
1.15.3 访问结构变量的成员变量 59
1.15.4 结构变量的初始化 59
1.15.5 结构数组 60
1.15.6 指向结构变量的指针 60
1.15.7 动态分配结构变量和结构数组 63
1.16 文件读写 63
1.16.1 用fopen打开文件 63
1.16.2 用fclose关闭文件 64
1.16.3 用fscanf读文件,用fprintf写文件 65
1.16.4 用fgetc读文件,用fputc写文件 66
1.16.5 用fgets读文件,用fputs写文件 67
1.16.6 用fread读文件,用fwrite写文件 68
1.16.7 用fseek改变文件读写的当前位置 71
1.17 C语言标准库函数 73
1.17.1 数学函数 73
1.17.2 字符处理函数 74
1.17.3 字符串处理和内存操作函数 74
1.17.4 字符串转换函数 75
1.18 命令行参数 76
1.19 C/C++编码规范 77
1.19.1 标识符命名注意事项 77
1.19.2 程序的书写格式 78
1.19.3 注释的写法 80
1.19.4 一些好的编程习惯 81
第2章 简单计算题 83
2.1 例题:鸡兔同笼 83
2.2 例题:棋盘上的距离 85
2.3 例题:校门外的树 88
2.4 例题:填词 90
2.5 例题:装箱问题 92
练习题 95
第3章 数制转换问题 98
3.1 相邻数字的基数等比:确定进制 98
3.2 相邻数字的基数不等比:skew数 101
练习题 102
第4章 字符串处理 104
4.1 简单的字符串操作示例 104
4.2 例题:统计字符数 105
4.3 例题:487-3279 107
4.4 例题:子串 112
4.5 例题:Caesar密码 115
练习题 117
第5章 日期和时间处理 121
5.1 例题:判断闰年 121
5.2 例题:细菌繁殖 125
5.3 例题:日历问题 130
5.4 例题:玛雅历 132
5.5 例题:时区间时间的转换 135
练习题 140
第6章 模拟 141
6.1 例题:约瑟夫问题 141
6.2 例题:花生问题 144
6.3 例题:显示器 147
6.4 例题:排列 152
练习题 155
第7章 高精度计算 159
7.1 例题:大整数加法 159
7.2 例题:大整数乘法 162
7.3 例题:大整数除法 165
7.4 例题:麦森数 169
练习题 174
第8章 枚举 175
8.1 枚举的基本思想 175
8.2 简单枚举的例子:生理周期 176
8.3 数学模型中包括多个变量的例子:称硬币 178
8.4 搜索空间中解不唯一的例子:完美立方 181
8.5 遍历搜索空间的例子:熄灯问题 183
8.6 优化判断条件的例子:讨厌的青蛙 189
练习题 195
第9章 递归 197
9.1 递归的基本思想 197
9.2 例题:菲波那契数列 198
9.3 例题:二叉树 199
9.4 例题:逆波兰表达式 201
9.5 例题:放苹果 203
9.6 例题:红与黑 204
9.7 例题:八皇后问题 207
9.8 例题:木棍问题 212
练习题 216
第10章 动态规划 221
10.1 什么是动态规划 221
10.2 动态规划解题的一般思路 225
10.3 例题:最长上升子序列 226
10.4 例题:帮助Jimmy 228
10.5 例题:最长公共子序列 232
10.6 例题:陪审团的人选 235
练习题 239
第11章 链表 242
11.1 单向链表、链表结点的插入 243
11.2 带表头的单向链表、链表的搜索 246
11.3 双向链表、链表结点的排序 250
11.4 循环链表、链表结点的删除 254
11.5 链表的应用:计算每个作业的运行时间 257
练习题 264
第12章 二叉树 266
12.1 二叉树的建立 267
12.2 基于递归的二叉树遍历 271
12.3 平衡二叉树 276
练习题 282
附录A 北京大学程序在线评测系统介绍 283
A.1 POJ的使用情况 283
A.2 POJ的主要功能 285
A.3 使用本书结合POJ进行教学时的用法 285
附录B 本书题目在POJ上的编号 287