第一部分 编程基础 2
第1章 计算机、程序和C++语言简介 2
1.1 引言 2
1.2 什么是计算机 3
1.2.1 CPU 4
1.2.2 位和字节 4
1.2.3 内存 5
1.2.4 存储设备 5
1.2.5 输入输出设备 6
1.2.6 通信设备 7
1.3 编程语言 8
1.3.1 机器语言 8
1.3.2 汇编语言 9
1.3.3 高级语言 9
1.4 操作系统 10
1.4.1 控制和监视系统活动 11
1.4.2 分配和指派系统资源 11
1.4.3 任务调度 11
1.5 C++语言的历史 11
1.6 一个简单的C++程序 12
1.7 C++程序开发周期 16
1.8 程序风格和文档 18
1.8.1 适当的注释和注释风格 18
1.8.2 正确的缩进和间距 18
1.9 编程错误 19
1.9.1 语法错误 19
1.9.2 运行时错误 19
1.9.3 逻辑错误 20
1.9.4 常见错误 20
关键术语 22
本章小结 22
在线测验 23
程序设计练习 23
第2章 程序设计基础 25
2.1 引言 25
2.2 编写简单的程序 25
2.3 从键盘读取输入 28
2.4 标识符 30
2.5 变量 30
2.6 赋值语句和赋值表达式 32
2.7 命名常量 33
2.8 数值数据类型及其运算 34
2.8.1 数值类型 34
2.8.2 数值文字常量 37
2.8.3 数值运算符 37
2.8.4 指数运算符 38
2.9 算术表达式和运算符优先级 39
2.10 实例研究:显示当前时间 41
2.11 简写运算符 43
2.12 自增、自减运算符 43
2.13 数值类型转换 45
2.14 软件开发流程 47
2.15 实例研究:计算给定金额的货币数量 51
2.16 常见错误 53
关键术语 54
本章小结 55
在线测验 55
程序设计练习 55
第3章 分支语句 60
3.1 引言 60
3.2 bool数据类型 61
3.3 if语句 62
3.4 双分支的if-else语句 64
3.5 嵌套的if语句和多分支的if-else语句 65
3.6 常见错误和陷阱 67
3.7 实例研究:计算身体质量指数 71
3.8 实例研究:计算税款 73
3.9 生成随机数 75
3.10 逻辑运算符 77
3.11 实例研究:确定闰年 81
3.12 实例研究:彩票 82
3.13 switch语句 83
3.14 条件表达式 86
3.15 运算符优先级和结合律 88
3.16 调试 89
关键术语 89
本章小结 90
在线测验 90
程序设计练习 90
第4章 数学函数、字符和字符串 99
4.1 引言 99
4.2 数学函数 100
4.2.1 三角函数 100
4.2.2 指数函数 100
4.2.3 近似函数 101
4.2.4 min、max和abs函数 101
4.2.5 实例研究:计算三角形的角 101
4.3 字符数据类型和操作符 103
4.3.1 ASCII码 103
4.3.2 从键盘读取一个字符 104
4.3.3 特殊字符的转义序列 104
4.3.4 数值类型和字符类型之间的相互转换 105
4.3.5 比较和测试字符 106
4.4 实例研究:生成随机字符 107
4.5 实例研究:猜生日 109
4.6 字符函数 112
4.7 实例研究:十六进制转换为十进制 113
4.8 字符串类型 114
4.8.1 字符串索引和下标操作符 115
4.8.2 连接字符串 116
4.8.3 比较字符串 116
4.8.4 读字符串 116
4.9 实例研究:使用字符串修改彩票程序 118
4.10 格式化控制台输出 119
4.10.1 setprecision(n)操作 120
4.10.2 修改操作 121
4.10.3 showpoint操作 121
4.10.4 setw(width)操作 122
4.10.5 left和right操作 122
4.11 简单的文件输入输出 123
4.11.1 写入文件 124
4.11.2 读取一个文件 125
关键术语 126
本章小结 126
在线测验 127
程序设计练习 127
第5章 循环 132
5.1 引言 132
5.2 while循环 133
5.2.1 实例研究:猜数字 135
5.2.2 循环设计策略 138
5.2.3 实例研究:多道减法测试 138
5.2.4 使用用户的确认控制循环 140
5.2.5 使用标记值控制循环 140
5.2.6 输入和输出重定向 141
5.2.7 从一个文件中读取所有的数据 142
5.3 do-while循环 144
5.4 for循环 145
5.5 使用哪种循环 149
5.6 嵌套循环 150
5.7 最小化数字错误 152
5.8 实例研究 153
5.8.1 求最大公约数 153
5.8.2 预测未来的学费 155
5.8.3 蒙特卡罗模拟 156
5.8.4 十进制转换为十六进制 156
5.9 关键字break和continue 158
5.10 实例研究:检查回文 161
5.11 实例研究:输出素数 163
关键术语 165
本章小结 165
在线测验 166
程序设计练习 166
第6章 函数 176
6.1 引言 176
6.2 函数定义 177
6.3 函数调用 178
6.4 无返回值函数 180
6.5 以传值方式传递参数 183
6.6 模块化代码 184
6.7 函数的重载 186
6.8 函数原型 189
6.9 缺省参数 190
6.10 内联函数 191
6.11 局部、全局和静态局部变量 192
6.11.1 for循环中变量的作用域 194
6.11.2 静态局部变量 194
6.12 以引用方式传递参数 197
6.13 常量引用参数 205
6.14 实例研究:十六进制转换为十进制 205
6.15 函数抽象和逐步求精 207
6.15.1 自顶向下设计 208
6.15.2 自顶向下或自底向上实现 209
6.15.3 实现细节 210
6.15.4 逐步求精的好处 214
关键术语 214
本章小结 215
在线测验 215
程序设计练习 215
第7章 一维数组和C字符串 225
7.1 引言 225
7.2 数组基础 226
7.2.1 声明数组 226
7.2.2 访问数组元素 227
7.2.3 数组初始化语句 228
7.2.4 处理数组 229
7.3 问题:彩票号码 232
7.4 问题:一副纸牌 235
7.5 数组作为函数参数 237
7.6 防止函数修改传递参数的数组 238
7.7 数组作为函数值返回 240
7.8 问题:计算每个字符的出现次数 241
7.9 搜索数组 244
7.9.1 顺序搜索方法 244
7.9.2 二分搜索方法 245
7.10 排序数组 247
7.11 C字符串 249
7.11.1 输入和输出C字符串 249
7.11.2 C字符串函数 250
7.11.3 使用strcpy和strncpy函数复制字符串 251
7.11.4 使用strcat和strncat函数拼接字符串 251
7.11.5 使用strcmp函数比较字符串 252
7.11.6 字符串和数字之间的转换 252
关键术语 253
本章小结 254
在线测验 254
程序设计练习 254
第8章 多维数组 263
8.1 引言 263
8.2 声明二维数组 263
8.3 操作二维数组 264
8.4 二维数组作为函数参数 267
8.5 问题:评定多项选择测试的成绩 268
8.6 问题:找最近邻点对 269
8.7 问题:数独 271
8.8 多维数组 274
8.8.1 问题:每日温度与湿度 275
8.8.2 问题:猜生日 277
本章小结 278
在线测验 278
程序设计练习 278
第二部分 面向对象编程 292
第9章 对象和类 292
9.1 引言 292
9.2 声明类 292
9.3 例:定义类和创建对象 294
9.4 构造函数 297
9.5 创建及使用对象 298
9.6 类定义和类实现的分离 301
9.7 避免多次包含 303
9.8 类中的内联函数 305
9.9 数据域封装 305
9.10 变量作用域 308
9.11 类抽象和封装 310
关键术语 314
本章小结 314
在线测验 315
程序设计练习 315
第10章 面向对象思想 318
10.1 引言 318
10.2 string类 318
10.2.1 构造一个字符串 319
10.2.2 追加字符串 319
10.2.3 字符串赋值 319
10.2.4 函数at、clear、erase及empty 320
10.2.5 函数length、size、capacity和c_str() 320
10.2.6 字符串比较 321
10.2.7 获取子串 321
10.2.8 字符串搜索 322
10.2.9 字符串插入和替换 322
10.2.10 字符串运算符 323
10.2.11 把数字转换为字符串 324
10.2.12 字符串分割 324
10.2.13 实例研究:字符串替换 324
10.3 对象作为函数参数 327
10.4 对象数组 329
10.5 实例成员和静态成员 331
10.6 只读成员函数 335
10.7 从对象的角度思考 337
10.8 对象合成 342
10.9 实例研究:StackOfIntegers类 344
10.10类设计准则 346
10.10.1 内聚 346
10.10.2 一致 346
10.10.3 封装 347
10.10.4 清晰 347
10.10.5 完整 347
10.10.6 实例与静态 347
关键术语 348
本章小结 348
在线测验 348
程序设计练习 348
第11章 指针及动态内存管理 353
11.1 引言 353
11.2 指针基础 353
11.3 用typedef定义同义类型 359
11.4 常量指针 359
11.5 数组和指针 360
11.6 函数调用时传递指针参数 363
11.7 从函数中返回指针 367
11.8 有用的数组函数 368
11.9 动态持久内存分配 369
11.10 创建及访问动态对象 373
11.11 this指针 375
11.12 析构函数 376
11.13 实例研究:Course类 379
11.14 拷贝构造函数 382
11.15 自定义拷贝构造函数 384
关键术语 387
本章小结 387
在线测验 388
程序设计练习 388
第12章 模板、向量和栈 393
12.1 引言 393
12.2 模板基础 393
12.3 例:一个通用排序函数 397
12.4 模板类 399
12.5 改进Stack类 405
12.6 C++向量类 407
12.7 用vector类替换数组 410
12.8 实例研究:表达式计算 413
关键术语 417
本章小结 417
在线测验 417
程序设计练习 418
第13章 文件输入输出 424
13.1 引言 424
13.2 文本输入输出 425
13.2.1 向文件中写入数据 425
13.2.2 从文件中读取数据 426
13.2.3 检测文件是否存在 427
13.2.4 检测文件结束 427
13.2.5 让用户输入文件名 429
13.3 格式化输出 430
13.4 函数:getline、get和put 431
13.5 fstream和文件打开模式 434
13.6 检测流状态 435
13.7 二进制输入输出 437
13.7.1 write函数 438
13.7.2 read函数 439
13.7.3 例:二进制数组I/O 440
13.7.4 例:二进制对象I/O 440
13.8 随机访问文件 444
13.9 更新文件 447
关键术语 448
本章小结 448
在线测验 448
程序设计练习 449
第14章 运算符重载 452
14.1 引言 452
14.2 Rational类 453
14.3 运算符函数 458
14.4 重载[]运算符 460
14.5 重载简写运算符 462
14.6 重载一元运算符 462
14.7 重载++和--运算符 463
14.8 友元函数和友元类 464
14.9 重载<<和>>运算符 466
14.10 自动类型转换 468
14.10.1 转换为基本数据类型 468
14.10.2 转换为对象类型 469
14.11 定义重载运算符的非成员函数 469
14.12 带有重载运算符函数的Rational类 470
14.13 重载赋值运算符 477
关键术语 481
本章小结 481
在线测验 481
程序设计练习 481
第15章 继承和多态 484
15.1 引言 484
15.2 基类和派生类 484
15.3 泛型程序设计 492
15.4 构造函数和析构函数 493
15.4.1 调用基类构造函数 493
15.4.2 构造函数链和析构函数链 494
15.5 函数重定义 497
15.6 多态 499
15.7 虚函数和动态绑定 500
15.8 关键字protected 503
15.9 抽象类和纯虚函数 504
15.10 类型转换:static cast和dynamic_cast 512
关键术语 515
本章小结 516
在线测验 516
程序设计练习 517
第16章 异常处理 518
16.1 引言 518
16.2 异常处理概述 518
16.3 异常处理机制的优点 522
16.4 异常类 523
16.5 自定义异常类 527
16.6 多重异常捕获 531
16.7 异常的传播 535
16.8 重抛出异常 537
16.9 异常说明 538
16.10 何时使用异常机制 539
关键术语 540
本章小结 540
在线测验 540
程序设计练习 541
第三部分 算法和数据结构 544
第17章 递归 544
17.1 引言 544
17.2 例:阶乘 545
17.3 实例研究:斐波那契数 548
17.4 用递归方法求解问题 550
17.5 递归辅助函数 552
17.5.1 选择排序 553
17.5.2 二分搜索 555
17.6 汉诺塔 556
17.7 八皇后问题 559
17.8 递归与循环 561
17.9 尾递归 562
关键术语 563
本章小结 563
在线测验 563
程序设计练习 563
第18章 开发高效的算法 568
第19章 排序 568
第20章 链表、队列和优先队列 568
第21章 二分搜索树 568
第22章 STL容器 568
第23章 STL算法 568
第24章 图及其应用 568
第25章 加权图及其应用 568
第26章 平衡二叉树和伸展树 568
附录 568
附录A C++关键字 568
附录B ASCII字符集 569
附录C 运算符优先级表 570
附录D 数字系统 572
附录E 位运算 575