第1章 机器语言模式 1
1.1 模拟机器指令集与程序设计举例 1
1.2 机器语言的局限性 7
问题与练习 8
第2章 C语言模式 9
2.1 基于基本类型的编程模式 9
2.2 基本数据类型 19
2.2.1 整型 19
2.2.2 实型 21
2.2.3 字符型 22
2.3 运算符和表达式 25
2.3.1 自增、自减运算符和表达式 25
2.3.2 复合赋值运算符和表达式 26
2.3.3 条件表达式和逗号表达式 26
2.3.4 关系运算符和逻辑运算符 27
2.3.5 运算符优先级 29
2.4 类型转换 29
2.5 程序流程控制结构 30
2.5.1 if-else语句 31
2.5.2 switch-case语句 32
2.5.3 break语句和continue语句 34
问题与练习 35
第3章 函数 38
3.1 函数自定义与调用 38
3.2 函数声明与定义 43
3.3 函数与变量的存储类别 44
3.3.1 自动局部变量 45
3.3.2 静态局部变量 48
3.3.3 外部变量 49
3.4 函数应用设计举例 51
3.4.1 阶乘累加 51
3.4.2 求π的近似值 52
3.4.3 求最大公约数 53
3.4.4 判断质数 54
3.4.5 数制转换 55
3.5 模块化程序设计 56
3.5.1 全局外部函数 57
3.5.2 静态外部函数 58
3.5.3 全局外部变量 59
3.5.4 静态外部变量 60
3.6 编译预处理 61
3.6.1 无参宏指令 61
3.6.2 带参宏指令 62
3.6.3 条件编译指令 64
3.6.4 文件包含指令 66
问题与练习 68
第4章 一维数组和指针 70
4.1 指针和指针传递 70
4.2 一维数组和指针 75
4.2.1 一维数组 75
4.2.2 指向一维数组的指针 78
4.2.3 数组类型和数组首元素类型 81
4.3 const型指针 83
4.4 动态数组 86
4.5 数组和指针应用举例 90
4.5.1 Josephus问题 90
4.5.2 选择排序 93
4.5.3 起泡排序 96
4.5.4 划分数组元素 98
4.5.5 删除数组中的重复数据 101
4.5.6 筛法求质数 102
4.5.7 顺序搜索和二分搜索 104
4.6 索引和指针 107
4.7 指针和左值 108
4.8 函数指针 108
问题与练习 109
第5章 C字符串 111
5.1 字符串常量和字符串变量 111
5.2 字符串基本操作函数原型 117
5.3 字符串基本操作函数实现 118
5.4 字符串基本操作函数的补充 122
5.4.1 取子串 123
5.4.2 子串插入 125
5.4.3 子串删除 127
5.4.4 字符查找 128
5.5 模式匹配 129
问题与练习 131
第6章 结构体、联合体和枚举 133
6.1 结构体 133
6.1.1 结构体定义 133
6.1.2 结构体变量和typedef名字 134
6.1.3 结构体变量的初始化和赋初值 135
6.1.4 结构体数组 136
6.1.5 结构体的嵌套 138
6.1.6 结构体返回值和指针传递 139
6.1.7 数组和含有数组的结构体变量 140
6.2 联合体 142
6.3 枚举 145
6.4 结构体应用设计举例 147
6.4.1 模拟洗牌 147
6.4.2 Date结构体 149
6.4.3 三天打鱼,两天晒网 153
问题与练习 154
第7章 顺序表 158
7.1 数组的局限性 158
7.2 顺序表声明与实现 159
7.2.1 顺序表声明 160
7.2.2 顺序表实现 164
7.3 索引和指针 169
7.4 数据抽象和封装 171
问题与练习 171
第8章 链表 173
8.1 链表的结构分析 173
8.2 链表的声明和实现 179
问题与练习 185
第9章 C的流与文件 186
9.1 文件指针 186
9.2 文件打开与关闭 187
9.3 文件的读写 191
9.3.1 字符的读写 191
9.3.2 字符串的读写 193
9.3.3 无格式读写 194
9.3.4 格式读写 197
9.3.5 文件的随机访问 199
问题与练习 201
第10章 二维数组和指针 204
10.1 二维数组和指针 204
10.2 二维数组和一维数组 211
10.3 马鞍点 213
10.4 指针数组和二级指针 215
10.5 指针数组与二维数组 217
问题与练习 219
第11章 从C到C++ 221
11.1 C语言的固有局限性 221
11.2 内联函数 224
11.3 运算符重载和函数重载 225
11.3.1 运算符重载 225
11.3.2 函数重载 227
11.4 引用型 230
11.4.1 概念的由来 230
11.4.2 引用型及其应用 233
11.5 函数模板 235
11.6 提取符和插入符 237
11.7 默认参数 239
11.8 深入讨论——函数模板实例化中的问题 241
问题与练习 242
第12章 顺序表类 243
12.1 从C顺序表到C++顺序表类 243
12.2 new和delete操作符 249
12.3 需要增加、删除和修改的成员函数 250
12.4 顺序表类的声明和实现 258
12.5 类模板 259
12.6 基本类型赋值形式的扩展 264
问题与练习 265
第13章 String类 266
13.1 String类的声明 266
13.2 String类的实现 269
13.2.1 构造函数和析构函数 269
13.2.2 成员赋值运算符 271
13.2.3 成员转换 272
13.2.4 串连接 274
13.2.5 关系运算 278
13.2.6 求子串 279
13.2.7 子串插入 280
13.2.8 子串删除 284
13.2.9 下标运算符 285
13.2.10 字符查找 285
13.2.11 输入输出 287
13.3 模式匹配 289
13.4 String类的深入讨论 291
13.4.1 转换赋值运算符函数的替代 291
13.4.2 成员函数“类串+C串”的替代 291
13.4.3 explicit修饰符 292
问题与练习 293
第14章 Date类 295
14.1 Date类的声明 295
14.2 Date类的实现 299
14.3 静态数据成员和静态成员函数 304
14.4 封装的典型应用 307
问题与练习 309
第15章 非线性结构与递归 310
15.1 树形结构与递归 310
15.2 C++递归函数 315
15.3 汉诺塔问题 316
15.4 快速排序 320
15.5 八皇后 321
问题与练习 326
第16章 继承和多态性 327
16.1 构造函数的参数初始化表 327
16.2 继承 330
16.3 受保护成员 332
16.4 多态性和虚函数 333
16.5 虚析构函数 337
16.6 纯虚函数和抽象类 338
问题与练习 342
第17章 向量类模板 344
17.1 向量类模板的声明和实现 344
17.2 函数对象 351
问题与练习 354
第18章 链表类模板和适配器 356
18.1 链表类模板List 356
18.2 链表和链表类模板的代码对比 368
18.3 适配器 371
18.3.1 链栈 371
18.3.2 链队列 372
18.3.3 优先级链队列 373
问题与练习 374
第19章 C++综合设计实例 375
19.1 中缀表达式求值 375
19.2 事件驱动模拟 380
问题与练习 391
第20章 C++的流与文件 392
20.1 格式化输入输出 393
20.1.1 设置流的格式化标志 393
20.1.2 格式输出函数 395
20.1.3 操作算子 396
20.2 文件的读写 399
20.2.1 字符读写函数 400
20.2.2 字符串读写函数 402
20.2.3 无格式读写函数 402
20.2.4 格式读写 404
20.2.5 随机访问 406
20.3 文件错误处理 407
问题与练习 408
第21章 命名空间 409
21.1 命名空间的定义 409
21.2 using namespace语句 410
21.3 命名空间的成员 412
21.4 命名空间的别名 414
问题与练习 414
附录A 命名规则 415
附录B 常用的ANSI C标准库函数 416
参考文献 423