第1章 程序设计概论 1
1.1 问题求解 1
1.1.1 思维与语言 1
1.1.2 算法 3
1.1.3 数据结构 5
1.1.4 程序 7
1.1.5 程序设计的一般过程 8
1.2 程序设计语言 9
1.2.1 发展历史 9
1.2.2 程序设计语言的实现 15
1.2.3 高级语言程序的基本结构 18
1.2.4 高级语言的语法规则 21
1.2.5 程序的编辑、编译和运行 30
1.3 程序设计范式的演化 32
1.3.1 结构化程序设计 32
1.3.2 函数式程序设计 33
1.3.3 面向对象程序设计 34
1.3.4 事件驱动的程序设计 35
1.3.5 逻辑式程序设计 36
习题 37
第2章 算法设计基础 42
2.1 算法的描述 42
2.1.1 自然语言方式 42
2.1.2 伪代码方式 43
2.1.3 程序流程图方式 46
2.1.4 N/S盒图方式 47
2.1.5 PAD图方式 48
2.2 结构化算法设计初步 50
2.2.1 算法描述 50
2.2.2 算法设计 53
2.3 算法的计算复杂性 58
2.4 常用算法设计策略 60
2.4.1 分治法 60
2.4.2 递归技术 61
2.4.3 贪心法 62
2.4.4 回溯法 64
习题 65
第3章 基本数据类型 67
3.1 数据对象 67
3.1.1 数据的存储 68
3.1.2 生存期与值 69
3.2 基本数据类型 70
3.2.1 整型与浮点型 71
3.2.2 字符类型 71
3.2.3 逻辑型 72
3.2.4 空值型 72
3.3 变量与常量 73
3.3.1 常量 73
3.3.2 变量 75
3.4 指针类型 77
3.4.1 指针定义 77
3.4.2 指针的初始化 78
3.4.3 指针运算 79
3.4.4 指针与常量 80
3.5 引用类型 81
3.6 类型的意义 82
习题 83
第4章 操作及其控制 85
4.1 基本操作与运算符 85
4.1.1 赋值操作 85
4.1.2 算术操作 86
4.1.3 增1和减1操作 86
4.1.4 关系、逻辑操作 87
4.1.5 条件运算符 87
4.2 表达式 87
4.2.1 隐含类型转换 88
4.2.2 强制类型转换 88
4.2.3 表达式内的顺序控制 89
4.2.4 运算符的优先级 90
4.2.5 运算符的结合性 90
4.3 语句 91
4.3.1 表达式语句 91
4.3.2 语句间顺序控制 92
4.3.3 复合语句 92
4.3.4 选择语句 93
4.3.5 循环语句 97
4.3.6 直接顺序控制 103
4.4 预处理指令 106
4.4.1 文件包含指令 106
4.4.2 宏定义指令 106
4.4.3 条件编译指令 110
习题 113
第5章 函数与数据控制 122
5.1 函数定义与说明 122
5.1.1 函数定义 122
5.1.2 函数说明 123
5.1.3 函数的简单调用 125
5.1.4 函数的重载 126
5.2 数据控制 128
5.2.1 参数传递机制 128
5.2.2 数据对象的引用 132
5.2.3 作用域 135
5.3 函数的顺序控制 141
5.3.1 函数执行模型 142
5.3.2 基于栈的实现 144
5.3.3 函数的自嵌套调用 145
5.4 相关的其他语法 146
5.4.1 数组作函数参数 146
5.4.2 函数指针 149
5.5 常用系统函数 153
5.5.1 终止程序运行 153
5.5.2 数学函数 154
5.5.3 字符串处理函数 154
5.5.4 面向对象的数据结构 154
习题 155
第6章 构造类型 164
6.1 数组类型 164
6.1.1 数组定义 164
6.1.2 数组的赋值与使用 165
6.1.3 数组的存储 165
6.1.4 数组的初始化 166
6.1.5 字符数组 167
6.1.6 指针与数组 168
6.2 枚举类型 169
6.2.1 枚举类型定义 170
6.2.2 枚举变量定义 170
6.2.3 类型转换 171
6.3 结构类型 172
6.3.1 结构的定义 172
6.3.2 结构的使用 173
6.3.3 结构的实现 175
6.4 结构化数据 175
6.4.1 单链表 176
6.4.2 栈 178
6.4.3 存储的动态分配 181
6.5 抽象数据类型 186
6.5.1 结构的扩展 186
6.5.2 C++的抽象数据类型 187
6.5.3 C++数据类型的层次 189
6.6 自定义类型 189
习题 189
第7章 结构化算法的实现 198
7.1 基本控制结构的C++实现 198
7.1.1 顺序结构的C++实现 199
7.1.2 分支结构的C++实现 199
7.1.3 循环结构的C++实现 201
7.1.4 复杂结构的C++实现示例 202
7.2 子算法设计与C++实现 203
7.2.1 参数为普通类型的子算法 204
7.2.2 参数为指针的子算法 205
7.2.3 参数为引用的子算法 208
7.2.4 子算法设计与C++实现示例 210
7.3 递归与迭代 215
7.3.1 递归 215
7.3.2 迭代 218
7.3.3 应用示例 219
习题 223
第8章 程序开发过程 225
8.1 软件开发方法概述 226
8.1.1 软件生存周期 226
8.1.2 软件开发方法 226
8.2 软件设计 228
8.2.1 概要设计 228
8.2.2 详细设计 229
8.3 软件编码 230
8.3.1 程序设计方法 230
8.3.2 程序设计语言 230
8.3.3 编码风格 230
8.4 软件测试与调试 233
8.4.1 调试工具及使用 233
8.4.2 调试过程 234
8.4.3 错误类型 235
8.4.4 异常处理 238
8.4.5 软件测试 242
8.5 程序运行效率 244
8.5.1 适当的算法 245
8.5.2 选择快速运算 246
8.5.3 函数 249
习题 250
第9章 面向对象程序设计 256
9.1 面向对象方法学 256
9.1.1 人类认知规律 257
9.1.2 面向对象基本原理 258
9.1.3 认知规律与面向对象 259
9.1.4 面向对象软件开发 259
9.2 基本概念 260
9.2.1 对象 260
9.2.2 类 266
9.2.3 结构与关系 267
9.3 面向对象分析 274
9.3.1 主要原则 275
9.3.2 静态结构分析与对象模型 276
9.3.3 动态行为分析 280
9.4 面向对象设计 284
习题 285
第10章 类与对象的实现 286
10.1 C++中的类 286
10.1.1 类的说明 286
10.1.2 类的定义 288
10.2 对象及其成员的使用 291
10.2.1 对象实例 291
10.2.2 对象成员的引用 292
10.2.3 生命周期 295
10.2.4 类型转换 301
10.2.5 其他应用 305
10.3 类的特殊成员 315
10.3.1 静态成员 315
10.3.2 const成员 319
10.3.3 内联函数 321
10.3.4 友元 322
习题 324
第11章 类间关系的实现 334
11.1 一般-特殊关系的实现 334
11.1.1 类的继承与派生 334
11.1.2 赋值兼容规则 344
11.1.3 两义性与作用域分辨 346
11.2 多态性与虚函数 353
11.2.1 编译时刻的多态性 354
11.2.2 运行时刻的多态性 355
11.2.3 虚函数 356
11.2.4 纯虚函数与抽象类 366
11.3 整体-部分关系的实现 370
11.4 关联关系的实现 373
11.5 关于类层次的总结 374
11.5.1 认知规律与类层次 374
11.5.2 构造函数的一般形式 375
11.5.3 成员函数的特征 376
习题 377
第12章 面向对象程序设计的其他技术 382
12.1 运算符重载 382
12.1.1 友元运算符 383
12.1.2 类运算符 385
12.1.3 友元及类运算符的应用 386
12.1.4 ++和--运算符的重载 388
12.2 流类库 391
12.2.1 格式化输入输出 393
12.2.2 运算符《和》的重载 394
12.2.3 流式文件 395
12.2.4 流错误 408
12.3 模板 409
12.3.1 函数模板 409
12.3.2 类模板 410
12.3.3 模板应用实例 412
习题 416
附录A Microsoft C++的保留字 419
附录B C++中的基本数据类型 420
附录C 扩展ASCII字符集 421
附录D C++的运算符 422
词汇索引 424
参考文献 429