图书简介:
目 录
上篇 高级语言程序设计基础
第1章 C++语言概述 3
1.1 C++语言简介 3
1.2 C++语言的基本组成 4
1.2.1 基本字符集 4
1.2.2 词法记号 4
1.2.3 语句 4
1.2.4 标准函数库 5
1.3 数据类型 5
1.3.1 常量 5
1.3.2 变量 8
1.4 C++的运算规则与表达式 9
1.4.1 C++语言的运算规则 9
1.4.2 算术运算符与算术表达式 10
1.4.3 自增、自减运算 11
1.4.4 赋值运算符和赋值表达式 11
1.4.5 组合赋值运算符与组合赋值表达式 12
1.4.6 关系运算符与关系表达式 13
1.4.7 逻辑运算符与逻辑表达式 13
1.4.8 条件运算符与条件表达式 15
1.5 C++程序的基本结构、编写与实现 15
1.5.1 C++程序的基本结构 15
1.5.2 C++程序的编写与实现 18
小结 19
习题1 20
第2章 函数 21
2.1 函数的声明和调用 21
2.1.1 函数的声明 21
2.1.2 函数的调用 22
2.2 函数间的参数传递 23
2.2.1 值传递 23
2.2.2 函数参数为指针类型 24
2.3 带默认参数的函数 24
2.4 变量的存储属性 25
2.4.1 动态存储方式与静态存储方式 25
2.4.2 局部变量的存储属性 26
2.4.3 全局变量的存储属性 28
小结 30
习题2 30
第3章 数组、指针和结构 32
3.1 数组 32
3.1.1 一维数组 32
3.1.2 多维数组 33
3.1.3 字符数组和字符串 35
3.2 指针 38
3.2.1 指针的概念 38
3.2.2 指针变量定义 39
3.2.3 指针运算 39
3.3 指针与数组 41
3.3.1 指向数组的指针 41
3.3.2 指向字符串的指针 44
3.3.3 指针数组和指向指针的指针 45
3.4 指针与函数 46
3.4.1 指向函数的指针 46
3.4.2 返回指针值的函数 48
3.5 结构类型 49
3.5.1 结构类型的概念与定义 49
3.5.2 结构变量的说明 50
3.5.3 引用结构中的成员 51
3.5.4 结构的初始化 51
3.6 结构数组 51
3.7 结构指针 53
3.8 在函数之间传递结构 54
小结 56
习题3 57
第4章 C++类及其对象的封装性 58
4.1 从结构到类 58
4.1.1 复习结构 58
4.1.2 从结构提高到类 59
4.1.3 对象的创建和使用 63
4.2 类的成员函数 65
4.2.1 成员函数的定义方式 65
4.2.2 成员函数的访问属性 66
4.2.3 成员函数的执行效率 67
4.2.4 成员函数的存储方式 69
4.3 构造函数 71
4.3.1 对象初始化的要求 71
4.3.2 构造函数的形式 72
4.3.3 拷贝构造函数 77
4.4 析构函数 79
4.4.1 析构函数的形式 79
4.4.2 调用顺序 80
4.5 动态存储 81
4.5.1 内存分配与释放 81
4.5.2 避免内存泄漏 83
小结 84
习题4 85
第5章 引用、友元和重载 87
5.1 引用 87
5.1.1 引用的概念与理解 87
5.1.2 在函数通信中大显身手 89
5.2 友元 93
5.2.1 友元的定义 93
5.2.2 友元函数 94
5.2.3 友元成员 95
5.2.4 友元类 97
5.3 重载 99
5.3.1 函数重载 99
5.3.2 运算符重载 103
小结 114
习题5 114
第6章 继承 116
6.1 合成与继承 116
6.2 单继承 118
6.2.1 派生类的声明和构成 118
6.2.2 派生类成员的访问 119
6.2.3 派生类的构造函数和析构函数 126
6.3 多继承 132
6.3.1 声明多继承的方法 132
6.3.2 多继承派生类的构造函数 135
6.3.3 多继承引起的二义性问题 138
6.3.4 虚基类 141
小结 146
习题6 147
第7章 多态 150
7.1 继承呼唤多态 150
7.2 虚函数 151
7.2.1 虚函数的定义与调用 151
7.2.2 虚函数的特例 155
7.2.3 避免虚函数的误用 156
7.3 纯虚函数与抽象类 159
7.3.1 纯虚函数 159
7.3.2 抽象类 160
小结 162
习题7 162
第8章 模板 164
8.1 模板的概念 164
8.2 函数模板 164
8.2.1 函数模板和模板函数 164
8.2.2 函数模板的使用 167
8.2.3 重载模板函数 170
8.3 类模板 170
8.3.1 模板和模板类 170
8.3.2 类模板的派生 173
小结 173
习题8 173
下篇 算法分析与设计
第9章 算法导引 177
9.1 算法基础 177
9.1.1 算法 177
9.1.2 作为技术的算法 178
9.2 算法的设计和性能度量 179
9.2.1 函数的增长 179
9.2.2 标准记号与常用函数 182
小结 185
习题9 186
第10章 基本数据结构 187
10.1 线性表 187
10.1.1 线性表的逻辑结构 187
10.1.2 线性表的顺序表示和实现 187
10.1.3 线性表的链式表示和实现 189
10.2 栈和队列 192
10.2.1 栈 192
10.2.2 队列 195
10.3 哈希表 199
10.3.1 哈希表简介 199
10.3.2 哈希函数的构造方法 201
10.3.3 处理冲突的方法 203
10.3.4 哈希表的查找及其分析 205
10.4 树 206
10.4.1 树、二叉树和森林的基本概念 206
10.4.2 二叉树的遍历和树的遍历 211
10.4.3 二叉树的计数 212
小结 213
习题10 213
第11章 经典设计和分析技术 214
11.1 递归与分治法 214
11.1.1 二分检索问题 214
11.1.2 递归的概念 215
11.1.3 分治法的基本思想 216
11.1.4 分治法的应用 217
11.2 贪心算法 228
11.2.1 活动选择问题 228
11.2.2 贪心算法的基本思想 230
11.2.3 贪心算法的应用 231
11.3 动态规划 234
11.3.1 钢条切割问题 235
11.3.2 动态规划的基本思想 237
11.3.3 动态规划的应用 239
11.4 经典算法蕴涵的计算思维在其他学科的泛化 242
习题11 244
第12章 图的算法 246
12.1 图的基本算法 246
12.1.1 图的表示 246
12.1.2 广度优先搜索 258
12.1.3 深度优先搜索 259
12.1.4 拓扑排序 260
12.2 最小生成树 262
12.2.1 最小生成树的形成 262
12.2.2 Kruskal算法和Prim算法 263
12.3 单源最短路径 269
12.3.1 有向无环图的单源最短路径 270
12.3.2 Dijkstra算法 272
12.4 图算法蕴涵的计算思维在其他学科的泛化 274
习题12 275
参考文献 277
展开
前 言
本书是教育部高等教育司大学计算机课程改革项目“理工类高校计算思维与大学计算机课程研究与教材建设”的成果之一。本书编写团队是“计算思维导论”项目的参研者,也是国家级优秀教学团队和北京市优秀教学团队“计算机公共课教学团队”的主要成员。
在参加由哈尔滨工业大学战德臣教授主持的大学计算机课程改革项目“理工类高校计算思维与大学计算机课程研究与教材建设”的研究中,本书编写团队逐步对计算思维的精髓和本质加深了理解。我们认为,计算机解题的核心是算法设计,算法设计是在良好数学素养的基础上,对实际问题进行抽象和形式化,从而使用计算机来解决实际问题,而这恰恰正是培养计算思维的过程。
在计算学科领域,问题求解的核心是算法和系统。算法类问题强调的是数学建模及算法设计和分析。而程序设计语言则是实现算法的载体,语言只有满足算法实现的需求,才能被认识和掌握,算法只有通过程序语言才能实现。因此,本书兼顾了程序设计语言和算法的学习。
本书在介绍C++语言的程序设计方法的基础上,采用C++语言描述算法。C++语言是一种既支持面向过程程序设计,又支持面向对象程序设计的混合型语言,它独特的面向对象特征,可以为面向对象技术提供全面支持,是描述算法的一种较为理想的语言。采用面向对象程序设计语言描述算法,不仅有利于学习算法设计和面向对象技术,也为上机实践提高高级语言程序设计水平提供了方便。
全书共12章,分为上下篇。
上篇为高级语言程序设计基础,包括第1~8章。第1~3章,介绍C++简单程序设计,没有学习过“C语言程序设计”的读者可通过选学这部分内容,掌握C++程序设计基础。第4~8章系统介绍C++语言的封装性、继承性、多态性,以及模板的概念和使用。
下篇为算法分析与实现,包括第9~12章。第9章是算法导论,主要介绍算法的基本概念、算法设计以及算法的性能度量所需要的数学基础。第10章主要介绍C++语言描述的典型数据结构,包括线性表、栈和队列、树以及哈希表等基本概念和应用。第11章介绍经典算法的设计和分析技术,主要包括递归与分治法、贪心算法和动态规划等的基本思想及应用。第12章介绍图算法,主要包括基本的图算法、最小生成树和单源最短路径等。
本书由高飞设计总体架构。第1、2、3章由薛艳明编写,第4、5、6、7、8章由白霞编写,第9、10章由高飞编写,第11、12章由聂青编写。全书由高飞、薛艳明统稿、定稿。
感谢哈尔滨工业大学战德臣教授在计算思维研究中的贡献,正是他所领导的研究团队的研究成果给予了我们非同凡响的启发和影响,这些智慧的结晶对本书的编写具有重要意义的指导作用。感谢“理工类高校计算思维与大学计算机课程研究与教材建设”项目组所有参与学校的老师们对于本书的建议和帮助。感谢北京理工大学“计算机公共课教学团队”中从事教学工作多年的各位同仁提出的宝贵建议。感谢电子工业出版社对本书的编写给予热情支持。
由于计算机算法和程序设计技术发展迅速,作者水平有限,书中的疏漏与不足在所难免,敬请广大读者和同仁不吝赐教,拨冗指正。
欢迎读者对本书提出意见和建议。作者E-mail:gaofei@bit.edu.cn。
本书为教师提供相关教学资源,有需要者,请登录华信教育资源网http://www.hxedu.com.cn,注册之后进行下载。
作 者
展开