目录
第1章如何让计算机进行计算1
1.1程序设计的基本方法2
1.2程序流程图3
1.3使用计算机求解问题的过程5
1.4初识C++程序7
1.4.1简单的C++程序示例7
1.4.2C++源程序的组成8
1.4.3C++源程序的组成元素10
1.4.4C++开发工具——Visual Studio11
1.5应用案例——智能五子棋人机对战程序11
1.5.1Excitation——提出感兴趣的话题11
1.5.2Exploration——探索发现问题本质12
1.5.3Enhancement——拓展学习求解问题必备的
知识和能力12
1.5.4Execution——实际动手解决问题15
1.5.5Evaluation——评价与反思17
1.6拓展学习18
第2章计算机如何表示与处理数据19
2.1常用数制及数制之间的转换19
2.1.1数制19
2.1.2不同数制之间的转换21
2.2整数在计算机中的表示22
2.2.1数据的单位22
2.2.2整数的表示方法23
2.3实数在计算机中的表示26
2.4非数值数据在计算机中的表示27
2.4.1字符型数据在计算机中的表示27
2.4.2字符串29
2.4.3逻辑型数据29
2.5C++中的基本数据类型和转义字符29
2.5.1C++的基本数据类型29
2.5.2C++中的转义字符30
2.6常量和变量30
2.6.1常量31
2.6.2变量32
2.7基本数据的处理32
2.7.1运算符和表达式32
2.7.2算术运算符与算术表达式33
2.7.3赋值运算符与赋值表达式33
2.7.4关系运算符与关系表达式35
2.7.5逻辑运算符与逻辑表达式35
2.7.6基本数据类型之间的转换36
2.8C++中的基本语句38
2.8.1定义/声明语句38
2.8.2表达式语句41
2.8.3复合语句和空语句41
2.8.4输入输出语句42
2.9C++中的几个特殊运算符43
2.9.1++和--43
2.9.2条件运算符44
2.9.3逗号运算符45
2.9.4sizeof运算符45
2.10关于C++的运算符和表达式的更多介绍46
2.10.1运算符的优先级和结合性46
2.10.2表达式的求值顺序48
2.11应用案例——智能五子棋人机对战程序49
2.11.1Excitation——提出感兴趣的话题49
2.11.2Exploration——探索发现问题本质49
2.11.3Enhancement——拓展学习求解问题必备的知识和能力51
2.11.4Execution——实际动手解决问题63
2.11.5Evaluation——评价与反思67
2.12拓展学习68
第3章选择与迭代算法69
3.1单路选择算法及其C++实现69
3.1.1单路选择问题69
3.1.2用C++的if语句编程解决单路选择问题70
3.2双路选择算法及其C++实现71
3.2.1双路选择问题71
3.2.2用C++提供的if…else语句编程解决双路选择问题71
3.3嵌套选择算法及其C++实现73
3.4多路选择算法及其C++实现74
3.4.1多路选择问题74
3.4.2用C++提供的switch语句编程解决多路选择问题75
3.5迭代算法及其for语句的实现76
3.5.1迭代算法77
3.5.2用C++提供的for语句实现迭代算法77
3.6迭代算法及其while语句的实现78
3.6.1用C++提供的while语句实现迭代算法78
3.6.2用C++提供的do…while语句实现迭代算法79
3.7迭代嵌套及其C++实现80
3.8迭代与选择嵌套及其C++实现81
3.8.1迭代与选择嵌套及其C++实现81
3.8.2选择与迭代嵌套及其C++实现82
3.9C++中的转向语句82
3.9.1break语句83
3.9.2continue语句83
3.9.3return语句84
3.9.4goto语句84
3.10应用案例——智能五子棋人机对战程序85
3.10.1Excitation——提出感兴趣的话题85
3.10.2Exploration——探索发现问题本质85
3.10.3Enhancement——拓展学习求解问题必备的知识和能力87
3.10.4Execution——实际动手解决问题95
3.10.5Evaluation——评价与反思98
3.11拓展学习99
第4章结构化数据100
4.1一维数据及其C++实现100
4.1.1一维数据问题100
4.1.2用C++提供的一维数组存储一维数据102
4.2二维数据及其C++实现104
4.2.1二维数据问题104
4.2.2用C++提供的一维数组或二维数组存储二维数据105
4.3字符串及其C++实现107
4.3.1字符串问题107
4.3.2用C++提供的一维数组存储字符串108
4.4多个字符串的处理109
4.4.1多个字符串问题109
4.4.2用C++提供的二维数组存储多个字符串110
4.5多属性数据及其C++实现110
4.5.1多属性数据问题111
4.5.2用C++提供的结构体存储多属性数据111
4.6一组多属性数据的处理113
4.6.1一组多属性数据的问题113
4.6.2使用结构体数组对一组多属性数据进行存储和处理113
4.7C++中的枚举数据类型115
4.7.1枚举类型的定义115
4.7.2枚举变量的定义115
4.7.3枚举变量的使用116
4.8数组的应用——选择排序116
4.8.1选择排序算法116
4.8.2用C++实现选择排序算法117
4.9应用案例——智能五子棋人机对战程序118
4.9.1Excitation——提出感兴趣的话题118
4.9.2Exploration——探索发现问题本质119
4.9.3Enhancement——拓展学习求解问题必备的知识和能力120
4.9.4Execution——实际动手解决问题129
4.9.5Evaluation——评价与反思129
4.10拓展学习130
第5章模块化131
5.1模块化及其C++实现131
5.1.1可以采用模块化处理的问题132
5.1.2用C++实现结构化程序设计132
5.1.3函数的调用机制及内联函数134
5.1.4调用库函数135
5.2递归算法及其C++实现136
5.2.1递归算法136
5.2.2递归算法实例136
5.3默认形参值138
5.3.1指定默认形参值的位置138
5.3.2默认形参值的指定顺序139
5.4函数重载139
5.5编译预处理141
5.5.1文件包含141
5.5.2宏定义141
5.5.3条件编译143
5.6多文件结构144
5.6.1头文件144
5.6.2源文件145
5.6.3多文件结构程序实例145
5.6.4避免头文件被重复包含147
5.7变量和函数的作用域和生存期147
5.7.1全局变量和静态全局变量147
5.7.2局部变量和静态局部变量148
5.7.3函数的作用域150
5.8模块化应用实例——二分查找算法151
5.9应用案例——智能五子棋人机对战程序153
5.9.1Excitation——提出感兴趣的话题154
5.9.2Exploration——探索发现问题本质154
5.9.3Enhancement——拓展学习求解问题必备的知识和能力155
5.9.4Execution——实际动手解决问题170
5.9.5Evaluation——评价与反思172
5.10拓展学习173
第6章数据存储174
6.1数据存储的基本原理174
6.2地址与C++中的指针175
6.2.1指针变量的定义176
6.2.2指针变量的初始化176
6.2.3使用指针访问内存中的数据177
6.3指针与数组180
6.3.1数组在内存中的存储方式180
6.3.2使用指针操作数组180
6.3.3数组名与指针变量的区别182
6.3.4指向行的指针变量182
6.4指针与字符串183
6.5动态使用内存空间185
6.5.1动态分配内存185
6.5.2释放动态分配的内存空间186
6.6二级指针189
6.7指针与函数189
6.7.1指针作为函数参数190
6.7.2指针作为函数返回值196
6.8引用与函数196
6.8.1引用的概念和声明196
6.8.2函数的传值调用197
6.8.3函数的引用调用198
6.8.4返回引用的函数199
6.9应用案例——智能五子棋人机对战程序199
6.9.1Excitation——提出感兴趣的话题200
6.9.2Exploration——探索发现问题本质200
6.9.3Enhancement——拓展学习求解问题必备的知识和能力201
6.9.4Execution——实际动手解决问题207
6.9.5Evaluation——评价与反思213
6.10拓展学习214
第7章面向对象方法215
7.1面向对象方法的基本概念215
7.2C++中的类和对象219
7.2.1类的定义219
7.2.2构造函数220
7.2.3对象的定义和对象的访问221
7.3类成员的访问控制223
7.4析构函数226
7.5拷贝构造函数227
7.6类声明与实现的分离230
7.7类的静态成员231
7.7.1静态数据成员231
7.7.2静态成员函数233
7.8类的常量成员234
7.8.1常量数据成员234
7.8.2常量成员函数235
7.9this指针236
7.10类的友元237
7.11类的对象成员240
7.12自定义类的运算符重载242
7.12.1类成员函数形式的运算符重载243
7.12.2类友元形式的运算符重载244
7.13拓展学习248
第8章继承与多态249
8.1继承249
8.1.1继承概述249
8.1.2派生类的定义250
8.1.3访问控制方式和派生类的继承方式252
8.1.4成员函数重定义253
8.1.5派生类的构造函数和析构函数254
8.1.6多继承256
8.2多态262
8.2.1类型兼容和多态性的概念262
8.2.2多态性的实现264
8.3抽象类266
8.3.1抽象类的作用266
8.3.2抽象类的实现267
8.4拓展学习268
第9章输入输出流269
9.1输入输出流概述269
9.2cout和cin对象以及插入和提取运算符270
9.2.1标准流对象270
9.2.2>>和<<运算符与标准输入输出270
9.3使用成员函数进行标准输出和输入271
9.3.1使用put()函数进行标准输出271
9.3.2使用get()函数进行标准输入272
9.3.3使用getline()函数进行标准输入273
9.4文件流对象及插入和提取运算符275
9.4.1文件流对象275
9.4.2<<和>>运算符与文件输入输出277
9.5使用成员函数进行文件的输出和输入278
9.5.1使用put()函数进行文本文件输出278
9.5.2使用get()函数进行文本文件输入278
9.5.3使用getline()函数进行文本文件输入279
9.6按数据块进行输出和输入280
9.6.1使用write()函数按数据块进行输出280
9.6.2使用read()函数按数据块进行输入281
9.6.3程序实例283
9.7文件的随机读写284
9.8自定义数据类型的输入输出286
9.9拓展学习288
第10章模板289
10.1函数模板289
10.1.1函数模板的定义289
10.1.2函数模板的使用290
10.2类模板292
10.2.1类模板的定义292
10.2.2类模板的使用293
10.2.3类模板的静态成员和友元295
10.3拓展学习296
第11章数据结构的基本概念297
11.1数据结构的基本术语297
11.2数据的逻辑结构298
11.3数据的存储结构301
11.4数据的操作301
11.5拓展学习302
第12章线性表303
12.1抽象数据类型303
12.2线性表及其抽象数据类型305
12.2.1线性表的基本概念305
12.2.2线性表的抽象数据类型306
12.3线性表的顺序存储结构及其实现307
12.3.1线性表的顺序表示307
12.3.2顺序表的实现308
12.3.3顺序表代码复用实例——简单数据元素309
12.3.4顺序表代码复用实例——复杂数据元素309
12.4线性表的链式表示方法及其实现310
12.4.1链式存储结构310
12.4.2单向链表及其类模板310
12.4.3单向链表的基本操作及其实现311
12.4.4单向链表代码复用实例313
12.4.5循环链表及其基本操作314
12.4.6双向链表及其基本操作314
12.5拓展学习314
第13章栈与队列315
13.1栈的基本概念和抽象数据类型315
13.1.1栈的基本概念315
13.1.2栈的抽象数据类型316
13.2栈的表示及其实现316
13.2.1栈的顺序表示317
13.2.2顺序栈的实现318
13.2.3顺序栈代码复用实例318
13.2.4栈的链式表示及实现319
13.3队列的基本概念和抽象数据类型319
13.3.1队列的基本概念319
13.3.2队列的抽象数据类型320
13.4队列的表示及其实现320
13.4.1队列的顺序表示321
13.4.2顺序循环队列的实现323
13.4.3顺序循环队列代码复用实例323
13.4.4队列的链式表示及实现323
13.5拓展学习324
第14章树和二叉树325
14.1树的基本概念325
14.1.1树的定义326
14.1.2树的表示形式326
14.1.3树的基本术语327
14.2二叉树及其基本性质329
14.2.1二叉树的定义329
14.2.2二叉树的基本性质330
14.3二叉树的抽象数据类型和表示方式330
14.3.1二叉树的抽象数据类型330
14.3.2二叉树的顺序表示及实现331
14.3.3二叉树的链式表示333
14.3.4二叉树链式表示的实现334
14.4二叉树的遍历及常用操作336
14.4.1二叉树的遍历及其实现336
14.4.2二叉树常用操作的实现337
14.5二叉树排序树337
14.5.1二叉排序树的定义337
14.5.2二叉排序树的生成338
14.5.3二叉排序树的查找339
14.5.4二叉排序树应用实例339
14.6哈夫曼树和哈夫曼码339
14.7拓展学习340第15章图341
15.1图的基本概念及特性341
15.2图的抽象数据类型和表示方式344
15.2.1图的抽象数据类型344
15.2.2图的表示法345
15.2.3图的邻接矩阵表示法的实现348
15.3图的遍历348
15.3.1广度优先遍历及其实现348
15.3.2深度优先遍历及其实现349
15.4应用实例349
15.5拓展学习350
