第1章 计算与工程问题求解导论 1
1.1 历史回顾 1
1.2 现代工程成就 3
1.3 计算机系统 6
1.3.1 计算机硬件 6
1.3.2 计算机软件 6
1.4 数据表示与存储 9
1.4.1 数制 10
1.4.2 数据类型与存储 14
1.5 解决工程问题的方法论 16
本章小结 18
习题 19
第2章 简单的C+程序 22
工程挑战:汽车性能 22
2.1 程序结构 22
2.2 常量和变量 25
2.2.1 科学记数法 27
2.2.2 数值数据类型 27
2.2.3 布尔数据类型 28
2.2.4 字符数据类型 29
2.2.5 字符串数据 30
2.2.6 符号常量 31
2.3 C++类 31
2.3.1 类声明 32
2.3.2 类实现 32
2.4 C++操作符 34
2.4.1 赋值操作符 34
2.4.2 算术操作符 36
2.4.3 操作符的优先级 38
2.4.4 上溢和下溢 40
2.4.5 自增和自减操作符 40
2.4.6 缩写赋值操作符 41
2.5 标准输入和输出 42
2.5.1 cout对象 42
2.5.2 流对象 43
2.5.3 操纵符 44
2.5.4 cin对象 46
2.6 使用IDE构建C++解决方案:NetBeans 48
2.7 包含在C++标准库中的基本函数 55
2.7.1 基本的数学函数 55
2.7.2 三角函数 56
2.7.3 双曲函数 57
2.7.4 字符函数 58
2.8 解决应用问题:速率计算 59
2.9 系统限制 61
本章小结 62
习题 65
第3章 控制结构:选择 68
工程挑战:全球变化 68
3.1 算法设计 68
3.2 结构化编程 69
3.2.1 伪代码 70
3.2.2 可选方案的评估 71
3.3 条件表达式 71
3.3.1 关系操作符 71
3.3.2 逻辑操作符 72
3.3.3 优先级和结合性 74
3.4 选择语句:if语句 74
3.4.1 简单的if语句 75
3.4.2 if/else语句 76
3.5 数值方法:线性插值 79
3.6 解决应用问题:海水的冰点 81
3.7 选择语句:switch语句 85
3.8 使用IDE构建C++解决方案:NetBeans 87
3.9 为自定义数据类型定义操作符 93
本章小结 97
习题 98
第4章 控制结构:循环 101
工程挑战:数据收集 101
4.1 算法设计 101
4.2 循环结构 102
4.2.1 while循环 102
4.2.2 do/while循环 105
4.2.3 for循环 107
4.3 解决应用问题:GPS 110
4.4 break和continue语句 114
4.5 结构化输入循环 114
4.5.1 计数器控制循环 114
4.5.2 标志控制循环 116
4.5.3 数据终止循环 117
4.6 解决应用问题:气象气球 118
4.7 使用IDE构建C++解决方案:Microsoft Visual C++ 122
本章小结 128
习题 129
第5章 使用数据文件 132
工程挑战:天气预报 132
5.1 定义文件流 132
5.1.1 流的类层次 132
5.1.2 ifstream类 134
5.1.3 ofstream类 135
5.2 读取数据文件 137
5.2.1 指定记录的数目 137
5.2.2 标志信号 139
5.2.3 文件结束 141
5.3 生成数据文件 143
5.4 解决应用问题:数据过滤器——修改HTML文件 145
5.5 错误检查 148
5.6 数值方法:线性建模 154
5.7 解决应用问题:臭氧测量 156
本章小结 160
习题 162
第6章 使用函数进行模块化编程 166
工程挑战:仿真 166
6.1 模块化 166
6.2 自定义函数 168
6.2.1 函数定义 171
6.2.2 函数原型 175
6.3 参数传递 177
6.3.1 值传递 177
6.3.2 引用传递 179
6.3.3 存储类型和作用域 183
6.4 解决应用问题:计算重心 185
6.5 随机数 188
6.5.1 整数序列 188
6.5.2 浮点序列 192
6.6 解决应用问题:仪器可靠性 192
6.7 定义类方法 198
6.7.1 公共接口 198
6.7.2 访问方法 199
6.7.3 修改方法 200
6.8 解决应用问题:复合材料设计 204
6.9 数值方法:多项式的根 208
6.9.1 多项式的根 209
6.9.2 增量搜索方法 211
6.10 解决应用问题:系统稳定性 211
6.11 数值方法:积分 219
本章小结 222
习题 224
第7章 一维数组 229
工程挑战:海啸预警系统 229
7.1 数组 229
7.1.1 定义和初始化 230
7.1.2 伪代码 231
7.1.3 计算与输出 235
7.1.4 函数参数 238
7.2 解决应用问题:飓风等级 241
7.3 统计表征数 245
7.3.1 简单分析 246
7.3.2 方差和标准差 247
7.3.3 自定义头文件 249
7.4 解决应用问题:语音信号分析 250
7.5 排序和搜索算法 254
7.5.1 选择排序 254
7.5.2 搜索算法 256
7.5.3 无序列表 256
7.5.4 有序列表 257
7.6 解决应用问题:海啸预警系统 258
7.7 字符串 263
7.7.1 C风格字符串定义和1/O 263
7.7.2 字符串函数 265
7.8 string类 266
7.9 vector类 267
7.10 解决应用问题:概率计算 270
本章小结 280
习题 281
第8章 二维数组 285
工程挑战:地形导航 285
8.1 二维数组 285
8.1.1 声明和初始化 286
8.1.2 计算与输出 290
8.1.3 函数参数 292
8.2 解决应用问题:地形导航 297
8.3 二维数组和vector类 300
8.4 矩阵 303
8.4.1 行列式 304
8.4.2 转置 304
8.4.3 矩阵加法和减法 305
8.4.4 矩阵乘法 305
8.5 数值方法:解联立方程 307
8.5.1 图形分析 307
8.5.2 高斯消元法 309
8.6 解决应用问题:电路分析 311
8.7 高维数组 316
本章小结 317
习题 318
第9章 指针 322
工程挑战:天气模式 322
9.1 地址与指针 322
9.1.1 地址操作符 323
9.1.2 指针的分派 324
9.1.3 指针的算术 326
9.2 指向数组元素的指针 329
9.2.1 一维数组 329
9.2.2 字符串 331
9.2.3 指针作为函数参数 332
9.3 解决应用问题:厄尔尼诺南方涛动数据 336
9.4 动态内存分配 338
9.4.1 new操作符 338
9.4.2 动态分配数组 339
9.4.3 delete操作符 339
9.5 解决应用问题:地震监测 340
9.6 使用new和delete的常见错误 345
9.7 链式数据结构 346
9.7.1 链表 346
9.7.2 栈 348
9.7.3 队列 348
9.8 C++标准模板库 349
9.8.1 list类 349
9.8.2 stack类 350
9.8.3 queue类 352
9.9 解决应用问题:文本文件的索引 353
本章小结 357
习题 358
第10章 高级主题 361
工程挑战:人工智能 361
10.1 泛型编程 361
10.2 数据抽象 365
10.2.1 操作符重载 365
10.2.2 像素类 365
10.2.3 算术操作符 367
10.2.4 友元函数 371
10.2.5 验证对象 374
10.2.6 按位操作符 378
10.3 解决应用问题:彩色图像处理 380
10.4 递归 385
10.4.1 阶乘函数 385
10.4.2 斐波纳契序列 387
10.4.3 BinaryTree类 388
10.5 类模板 396
10.6 继承 401
10.6.1 Rectangle类 401
10.6.2 Square类 404
10.6.3 Cube类 406
10.7 虚方法 409
10.8 解决应用问题:可重复的囚徒困境 411
本章小结 418
习题 419
附录A C++标准库 422
附录B ASCII字符编码 430
附录C使用MATLAB从ASCIl文件中绘制数据点 434
附录D练习答案 437
附录E参考文献 445