目录 1
第1章 计算机科学基础 1
1.1.1 解决问题综述 2
1.1 用计算机解决问题 2
1.1.3 设计一个解决方案 3
1.1.2 分析问题 3
1.1.7 总结 6
1.1.6 产品维护 6
1.1.4 设计的实现 6
1.1.5 测试代码 6
1.2 选读:计算机学科 7
1.1.8 练习 7
1.2.3 设计规范 8
1.2.2 抽象化规范 8
1.2.1 理论规范 8
1.3.2 外存 9
1.3.1 输入和输出设备 9
1.3 计算机系统模型 9
1.3.3 中央处理器 10
1.3.5 练习 11
1.3.4 内存 11
1.4 选读:第一台计算机的发明 12
1.5.2 预处理器 13
1.5.1 编辑器 13
练习 13
1.5 完成一个程序的步骤 13
1.5.3 编译器 14
1.6 选读:C和C+4的历史 16
1.5.4 连接器 16
1.7 设计的实现 17
1.7.1 一个显示一条消息的程序 18
1.7.3 包括iostream 19
1.7.2 注释 19
1.7.5 main 20
1.7.4 命名空间 20
1.7.7 分号 21
1.7.6 插入运算符 21
1.7.8 样式 22
1.7.9 练习 23
1.7.10 编程项目 24
1.8.1 使用库函数 25
1.8 从上到下的设计和函数 25
1.8.2 将函数连接到从上到下的设计 26
1.8.3 函数定义 27
1.8.4 调用一个函数 28
1.8.5 函数原型 29
1.8.6 C++库 30
1.8.8 编程项目 32
1.8.7 练习 32
1.9 选读:计算机科学主题范围 33
1.9.3 体系结构和组织 34
1.9.2 离散结构 34
1.9.1 编程、算法和复杂性 34
1.9.6 信息处理 35
1.9.5 智能系统 35
1.9.4 以网络为中心的计算 35
1.9.9 计算的科学和数字的方法 36
1.9.8 图形和可视化计算 36
1.9.7 人机交互 36
1.9.10 操作系统 37
1.9.13 社会的和专业的问题 38
1.9.12 软件工程 38
1.9.11 编程语言 38
1.10.2 预排技术 39
1.10.1 调试 39
1.10 编程和调试提示 39
1.11 复习题 40
1.10.3 模块化的编程 40
1.12 实验 41
2.1 整型数据 44
第2章 整型变量和表达式 44
2.1.2 变量声明 45
2.1.1 变量 45
2.1.3 变量的命名 46
2.2 赋值语句 48
2.1.4 练习 48
2.2.1 左值和右值 49
2.2.3 常量 51
2.2.2 声明-初始化 51
2.2.4 赋值语句不是代数公式 53
2.2.7 练习 54
2.2.6 endl 54
2.2.5 标记输出 54
2.2.8 编程项目 55
2.3.1 四个二元运算符 56
2.3 整数算术 56
2.3.2 取模运算符 58
2.3.4 运算符优先次序 61
2.3.3 一元减法 61
2.3.5 练习 63
2.3.6 编程项目 65
2.4.1 整数的二进制表示法 66
2.4 选读:计算机中整数的存储 66
2.4.2 计算 67
2.4.4 计算机中无符号整数的范围 68
2.4.3 递减 68
2.4.5 十进制整数到二进制整数的转换 69
2.4.6 练习 70
2.5.1 符号位表示法 72
2.5 选读:计算机中的整数算术 72
2.4.7 编程项目 72
2.5.2 2的补码表示法 73
2.5.3 加法 75
2.5.4 减法 76
2.5.6 练习 77
2.5.5 乘以和除以2 77
2.6.2 C++中交互式的程序 79
2.6.1 交互式的程序与批处理程序 79
2.5.7 编程项目 79
2.6 交互式的程序 79
2.6.4 编程项目 81
2.6.3 练习 81
2.7.2 用户接口的明了性 82
2.7.1 代码的明了性 82
2.7 编程和调试提示 82
2.8 复习题 83
2.9 实验 84
3.1.1 事前条件和事后条件 87
3.1 用整型函数解决问题 87
第3章 整型函数和封装 87
3.1.2 函数的分析和设计 89
3.1.3 整型函数的实现 90
3.1.4 过程 91
3.1.5 变元和参数 94
3.1.6 练习 98
3.2 重新访问问题的解决 99
3.1.7 编程项目 99
3.2.1 分析 100
3.3.1 局部变量和作用域 101
3.3 作用域和生存期 101
3.2.2 练习 101
3.3.2 值传递 102
3.3.3 具有相同名称的局部变量 104
3.3.4 全局变量 105
3.3.5 被重新访问的命名空间 108
3.3.6 练习 109
3.4.1 抽象化 110
3.4 用对象封装 110
3.4.2 面向对象编程 111
3.4.3 信息隐藏和类 112
3.4.4 类图 113
3.4.5 对象 114
3.4.6 练习 115
3.5.1 注释的明了性 116
3.5 编程和调试提示 116
3.4.7 编程项目 116
3.6 复习题 117
3.5.2 局部变量及全局变量 117
3.7 实验 118
第4章 做出决策和类 124
4.1.1 关系运算符 125
4.1 关系和逻辑运算符 125
4.1.2 逻辑运算符 126
4.1.3 布尔常量、表达式和变量 128
4.1.4 运算符优先次序 129
4.1.5 练习 130
4.2.2 if语句 132
4.2.1 控制流 132
4.2 选择 132
4.2.3 if-else语句 134
4.2.4 条件表达式运算符 139
4.2.5 练习 140
4.2.6 编程项目 141
4.3 嵌套 142
4.3.1 练习 149
4.4.1 swish语句 151
4.4 多向选择 151
4.3.2 编程项目 151
4.4.3 练习 159
4.4.2 转移到相同点 159
4.4.4 编程项目 161
4.5.1 访问数据结构 162
4.5 定义方法 162
4.5.3 方法定义文件 163
4.5.2 头文件 163
4.5.4 练习 166
4.6.2 逻辑的基本组件 167
4.6.1 GeorgeBoole和Edmund Berkeley 167
4.5.5 编程项目 167
4.6 选读:逻辑 167
4.6.3 真值表 168
4.6.4 命题代数 169
4.6.5 德·摩根定律 170
4.6.6 练习 171
4.7.1 从上至下测试 172
4.7 测试模式 172
4.7.2 从下至上的测试 175
4.7.3 从上至下和从下至上的组合测试 176
4.7.4 类测试 177
4.7.5 练习 178
4.8.1 决策控制结构 179
4.8 编程及调试提示 179
4.8.2 测试 180
4.9 复习题 181
4.10 实验方法 182
第5章 更多数值型类型和多态性 191
5.1.1 整数和浮点数的区别 192
5.1 浮点数 192
5.1.2 浮点数运算 193
5.1.4 double类型 194
5.1.3 指数记数法 194
5.1.5 格式化输出 195
5.1.6 练习 197
5.1.7 编程项目 198
5.2 多态性 199
5.2.1 练习 202
5.3.1 定义和使用 203
5.3 构造函数 203
5.2.2 编程项目 203
5.3.2 多态构造函数 204
5.3.4 编程项目 205
5.3.3 练习 205
5.4.1 从Base2到Base10的转换 206
5.4 选读:浮点数的存储 206
5.4.2 从Base10到Base2的转换 207
5.4.4 浮点数的存储 208
5.4.3 乘以和除以2 208
5.4.5 截断错误 210
5.4.6 练习 212
5.5.1 隐式的强制转换 213
5.5 强制转换 213
5.5.2 显式的强制转换 214
5.5.3 强与弱类型化 215
5.5.4 练习 216
5.6.1 整数的不同大小 217
5.6 其他整型类型 217
5.5.5 编程项目 217
5.6.4 抽象数据类型Money 218
5.6.3 混合型运算 218
5.6.2 无符号整数 218
5.6.5 ADT Money的实现 220
5.6.6 练习 226
5.7.1 数值型常量 228
5.7 C++头文件 228
5.6.7 编程项目 228
5.7.2 绝对值函数 230
5.7.4 其他cmath库函数 231
5.7.3 平方根函数 231
5.7.5 练习 239
5.7.6 编程项目 240
5.8.1 函数间的接口:全局变量 241
5.8 编程和调试提示 241
5.8.3 读者对于接口的理解 242
5.8.2 常量 242
5.9 复习题 243
5.8.4 默认的构造函数 243
5.10 实验 244
第6章 循环 250
6.1 更新赋值运算符 251
6.1.1 递增和递减运算符 252
6.1.3 练习 253
6.1.2 先递增、递减运算和后递增、递减运算 253
6.2.1 while循环 254
6.2 预测试循环 254
6.2.2 无限循环 257
6.2.3 预测试循环的特性 257
6.2.4 循环变量的操作 259
6.2.5 练习 263
6.3.1 do-while循环 265
6.3 后测试循环 265
6.2.6 编程项目 265
6.3.2 应用 266
6.3.3 练习 272
6.3.4 编程项目 273
6.4.1 标记技术 274
6.4 循环和交互式程序 274
6.4.2 交互式程序中的随机数 276
6.4.3 为随机数生成器提供种子 277
6.4.4 随机数范围 278
6.4.6 编程项目 285
6.4.5 练习 285
6.5.1 结构化编程 287
6.5 结构化和面向对象编程 287
6.6 选读:计算机时间 288
6.5.2 面向对象编程 288
6.6.1 时钟周期 289
6.6.3 flops 290
6.6.2 时钟频率 290
6.6.4 练习 291
6.7 选读:循环中的截断错误 292
练习 294
6.8.2 赋值和关系等号运算符 295
6.8.1 在运算符之间使用空格和括号 295
6.8 编程和调试提示 295
6.9 复习题 296
6.10 实验 297
7.1 for循环 299
第7章 计数器控制的循环 299
7.1.1 循环选择 301
7.1.3 索引声明 302
7.1.2 倒数 302
7.1.4 表 303
7.1.5 练习 306
7.1.6 编程项目 307
7.2 循环嵌套 308
7.2.1 练习 319
7.2.2 编程项目 320
7.3 选读:数值计算 321
编程项目 325
7.4.1 版权法 326
7.4 选读:知识产权 326
7.4.2 专利权 327
调试技术 328
7.5 编程和调试提示 328
7.4.3 公司的态度 328
7.4.4 练习 328
7.6 复习题 329
7.7 实验 330
8.1 字符输入和输出 333
第8章 字符 333
8.1.1 缓冲区 335
8.1.2 Y/N响应 339
8.1.4 编程项目 343
8.1.3 练习 343
8.2.1 数字代码 344
8.2 ASCII编码方案 344
8.2.3 转义序列 347
8.2.2 字符型数字的等价整数 347
8.2.4 练习 349
8.2.5 编程项目 350
8.3.1 改变大小写 351
8.3 字符型函数 351
8.3.2 布尔字符型函数 354
8.3.3 练习 359
8.4.1 转换为十进制数字 360
8.4 选读:八进制和十六进制系统 360
8.3.4 编程项目 360
8.4.2 在二进制和十六进制数字系统之间转换 361
8.4.4 应用 362
8.4.3 常量 362
8.4.5 将十进制数字转换为十六进制 363
8.4.6 练习 364
8.5.1 保护性编程:检测和恢复 365
8.5 编程和调试提示 365
8.5.3 保护性编程:全层次“防弹” 366
8.5.2 保护性编程:以字符串格式读取数据 366
8.6 复习题 367
8.7 实验 368
9.1 继承性 376
第9章 继承性和文件 376
练习 378
9.2.1 文件I/O 379
9.2 文件I/O类 379
9.2.4 关闭和打开文件 382
9.2.3 格式化的I/O 382
9.2.2 读取字符 382
9.2.5 练习 383
9.3.2 作为参数的简单变量 384
9.3.1 值传递 384
9.2.6 编程项目 384
9.3 引用传递 384
9.3.3 参数流 388
9.3.4 练习 390
9.4.1 磁带存储 391
9.4 选读:外存 391
9.3.5 编程项目 391
9.4.2 磁盘存储 393
9.4.4 练习 395
9.4.3 CD-ROM 395
9.5 选读:机器和汇编语言 396
9.5.2 机器指令 397
9.5.1 机器体系结构 397
9.5.3 取数/执行周期 399
9.5.4 转移 401
9.5.5 CPU模拟器程序cpusim 404
9.5.6 练习 406
9.6.2 调试级别 407
9.6.1 条件编译调试 407
9.6 编程和调试提示 407
9.6.3 使用assert调试 408
9.7 复习题 409
CPU模拟器 410
9.8 实验 410
文件操作 412
9.9 另一个实验 412
第10章 数组和vector类 416
10.1.1 声明 417
10.1 什么是数组 417
10.1.3 数组索引 418
10.1.2 赋值 418
10.1.4 声明-初始化 424
10.1.5 练习 425
10.2.1 传递数组 426
10.2 含有数组参数的函数 426
10.1.6 编程项目 426
10.2.2 最小值和最大值 429
10.2.3 频率 431
10.2.4 练习 434
10.2.5 编程项目 435
10.3 数组和类 437
10.3.1 对象数组 438
10.3.2 作为成员数据的数组 439
10.3.3 练习 444
10.4.1 按序搜索 445
10.4 按序搜索和二分法搜索 445
10.3.4 编程项目 445
10.4.2 二分法搜索 447
10.4.3 练习 451
10.5.1 选择分类算法 453
10.5 选择分类 453
10.4.4 编程项目 453
10.5.2 最小元素的索引 454
10.5.3 交换数值 455
10.5.4 练习 456
10.6.1 模板化的函数 457
10.6 模板 457
10.5.5 编程项目 457
10.6.3 模板化的类方法的定义 459
10.6.2 模板化的类的接口 459
10.6.4 应用程序编程 460
10.6.5 模板的使用 461
10.6.7 编程项目 462
10.6.6 练习 462
10.7.2 范围检查 463
10.7.1 数组的局限性 463
10.7 vector类 463
10.7.4 C++vector类 464
10.7.3 动态分配 464
10.7.5 常量的大小和重新设定大小 465
10.7.6 编索引 466
10.7.7 测试程序 467
10.7.8 练习 468
10.8 多维数组和向量 469
10.7.9 编程项目 469
10.8.2 声明 470
10.8.1 索引 470
10.8.3 多维向量 479
10.8.4 练习 481
10.8.5 编程项目 482
10.9 选读:计算机图形的色彩 485
10.9.2 色彩查找表 486
10.9.1 显示设备 486
10.9.3 练习 487
10.10.2 测试分支的数据 488
10.10.1 选择测试数据:边界数据 488
10.10 编程和调试提示 488
10.11 复习题 489
10.10.3 初学者或使用随机数据进行的测试 489
10.12 实验 490
11.1 字符串 495
第11章 字符串和string类 495
11.1.1 字面量 496
11.1.3 使用析取运算符读取字符串 497
11.1.2 显示字符串 497
11.1.4 读取一个字符或一行字符 499
11.1.5 字符的二维数组 502
11.1.6 练习 503
11.1.7 编程项目 504
11.2 数据验证 505
11.2.1 练习 510
11.3.1 存储大小 511
11.3 一些C字符串函数 511
11.2.2 编程项目 511
11.3.2 字符串的长度 512
11.3.3 复制字符串 512
11.3.4 并置 513
11.3.6 编程项目 514
11.3.5 练习 514
11.4.1 比较函数 516
11.4 字符串的比较 516
11.4.2 练习 527
11.4.3 编程项目 528
11.5.1 C字符串的弊端 529
11.5 string类 529
11.5.3 重载运算符 530
11.5.2 构造函数 530
11.5.5 子串 531
11.5.4 长度 531
11.5.6 非成员函数 534
11.5.8 练习 535
1 1.5.7 C字符串与C++字符串的对比 535
11.5.9 编程项目 536
11.6 选读:软件的生存周期 537
11.6.1 分析 538
11.6.2 设计 540
11.6.3 实现和测试 541
11.7.1 验证 542
11.7 编程和调试提示 542
11.6.4 维护 542
11.6.5 练习 542
11.7.4 注释掉 543
11.7.3 分号和结束大括号 543
11.7.2 字符串比较 543
11.8 复习题 544
11.9 实验 545
12.1.1 声明 554
12.1 结构的概念 554
第12章 结构和枚举类型 554
12.1.2 成员的引用 556
12.1.4 结构的成员 557
12.1.3 逐一处理元素 557
12.1.5 结构数组 558
12.1.6 练习 566
12.1.7 编程项目 567
12.2.1 传统的文件处理 569
12.2 选读:数据库 569
12.2.3 关系数据库 571
12.2.2 数据库管理系统 571
12.2.5 编程项目 573
12.2.4 练习 573
12.3.1 实现 574
12.3 枚举类型 574
12.3.2 强制转换 575
12.3.3 练习 580
12.4 选读:计算机视觉 581
12.3.4 编程项目 581
12.4.1 数字图像 582
12.4.2 低级模型 584
12.4.3 一个低级处理的示例 585
12.4.4 高级模型 591
12.4.6 编程项目 593
12.4.5 练习 593
有数组元素的结构 594
12.5 编程和调试提示 594
12.7 实验 595
12.6 复习题 595
13.1 递归函数 601
第13章 递归 601
13.1.1 幂函数 608
13.1.2 练习 613
13.1.3 编程项目 617
13.2 递归与迭代 620
13.2.1 解决一个递归的例程 621
13.2.2 练习 622
13.3.1 BNF 623
13.3 选读:形式语法 623
13.2.3 编程项目 623
13.3.2 语法分析 624
13.3.3 练习 627
13.3.4 编程项目 629
13.4.2 程序正确性 630
13.4.1 运行时错误和缓冲 630
13.4 编程和调试提示 630
13.6 实验 631
13.5 复习题 631
第14章 指针 638
14.1.2 地址运算符 639
14.1.1 声明 639
14.1 指针的概念 639
14.1.3 间接寻址运算符 640
14.1.4 NULL 641
14.1.5 打印地址 642
14.1.7 练习 645
14.1.6 在间接引用之前指向目标 645
14.2 选读:存储器 647
14.2.1 存储器大小 648
14.2.2 RAM和ROM 649
14.2.4 编程项目 650
14.2.3 练习 650
14.3.1 数组名作为一个常量指针 651
14.3 数组和指针 651
14.3.2 参数 652
14.3.3 指针算术 653
14.3.4 练习 654
14.4 动态内存分配 655
14.3.5 编程项目 655
14.4.2 释放内存 656
14.4.1 分配内存 656
14.4.4 编程项目 660
14.4.3 练习 660
14.5.2 创建和销毁 661
14.5.1 析构函数 661
14.5 指针数据成员 661
14.5.3 复制构造函数 664
14.5.4 重载赋值运算符 667
14.5.5 练习 670
14.6.1 头文件中的类型定义 671
14.6 用户定义的类型 671
14.7.1 间接引用 673
14.7 指针和结构 673
14.6.2 练习 673
14.7.2 链表 674
14.7.3 练习 676
14.8.1 声明和赋值 677
14.8 函数指针 677
14.8.3 函数指针作为参数 678
14.8.2 间接调用函数 678
14.8.5 编程项目 682
14.8.4 练习 682
14.9.1 指针事后递增 683
14.9 编程和调试提示 683
14.10 复习题 685
14.9.2 空间的分配 685
14.11 实验 686
15.1 表抽象化 691
第15章 数据结构 691
15.1.2 图示当前位置 692
15.1.1 ADT表的定义 692
15.1.3 图示插入 694
15.1.4 图示删除 695
15.1.5 图示存储和检索 696
15.1.7 创建表 697
15.1.6 销毁表 697
15.1.8 表遍历 698
15.1.9 练习 699
15.2.1 表创建 700
15.2 表的动态实现 700
15.2.2 初始化表 701
15.2.4 头或尾处的当前位置 702
15.2.3 测试空或满 702
15.2.5 推进当前位置 703
15.2.6 创建节点 704
15.2.7 插入节点 705
15.2.8 删除节点 708
15.2.9 存储和检索信息 711
15.2.10 显示表 718
15.2.11 练习 719
15.2.12 编程项目 720
15.3 堆栈抽象化 721
15.3.1 ADT堆栈的定义 722
15.3.2 另外的操作 723
15.3.3 练习题 726
15.4 堆栈的动态实现 727
15.4.2 堆栈的初始化和测试 728
15.4.1 堆栈的框架 728
15.4.4 出栈 729
15.4.3 进栈 729
15.4.5 销毁堆栈 730
15.4.6 使用堆栈数据结构 734
15.4.7 练习 735
15.5 选读:运行时堆栈 736
15.4.8 编程项目 736
15.6.2 内部限制 739
15.6.1 释放指针 739
15.5.1 练习题 739
15.5.2 编程项目 739
15.6 编程和调试提示 739
15.8 实验 740
15.7 复习题 740
附录A 挑选的练习的答案 744
附录B 复习题答案 764