
程式设计基础(2019年清华大学出版社出版的图书)
《程式设计基础》是由赵宏主编,2019年清华大学出版社出版的高等学校计算机基础教育教材。该教材适合高等院校理工类、特别是新工科学生使用,也适合结合MOOC课程自主学习的读者使用。
全书共分3部分:结构化程式设计方法,面向对象程式设计方法,数据结构和算法。
基本介绍
- 书名:程式设计基础
- 作者:赵宏、王恺
- ISBN:9787302532156
- 类别:高等学校计算机基础教育教材
- 出版社:清华大学出版社
- 出版时间:2019年9月1日
- 装帧:平装
- 开本:16开
成书过程
《程式设计基础》面向高等院校理工类特别是新工科学生掌握如何使用计算机求解问题、具有主动使用计算机解决生活和学科问题的意识和能力的需求,针对计算机学科最基础性的问题编写的教材。
该教材是由南开大学计算机学院公总计算机基础教学部的教师结合教学经验及理工类和新工科大学生对计算机基础知识的需要编写的,教材综合考虑了MOOC和SPOC课程知识碎片化的特点。赵宏负责第1~3章、第7章、第10~13章和第16章的编写并统编全书,王恺负责第4~6章、第8章、第9章、第14章和第15章的编写。
该教材在编写过程中,得到了清华大学出版社张瑞庆编审的支持,还参考了中国国内外的一些程式设计方面的开放课程网站和书籍。
2019年9月1日,该教材由清华大学出版社出版。
内容简介
全书共分3部分:结构化程式设计方法,面向对象程式设计方法,数据结构和算法。
全书共16章,主要内容如下:
- 《程式设计基础》 前言、第1-6章为结构化程式设计方法。
- 第1章如何让计算机进行计算。首先介绍计算思维和程式流程图的基本画法;然后介绍程式设计的基本概念、步骤和方法;最后介绍C++源程式的基本结构和组成元素以及Visualstudio2010集成开发环境;
- 第2章计算机如何表示与处理数据。首先介绍二进制数及几种基本数据类型的二进制数据表示方法,包括不同数制数据之间的转换方法,整数、实数、字元和逻辑型数据的二进制表示方法等;然后介绍如何通过C++语言实现这些基本数据类型在计算机中的存储,以及如何对这些基本数据类型的数据进行处理的方法;
- 第3章选择与叠代算法。介绍处理问题时的选择算法和叠代算法,以及如何使用C++语言实现选择和叠代算法;
- 第4章结构化数据的处理。介绍多记录数据和多属性数据的存储方法,以及如何使用C++语言实现这些数据的存储和处理;
- 第5章模组化。介绍模组化的思想,以及如何使用C++语言编写模组化程式;
- 第6章数据存储。重点介绍计算机中数据存储的基本原理,以及如何使用C++语言编写程式去操作记忆体中的数据。
- 第7~10章为面向对象程式设计方法
- 第7章面向对象方法。介绍面向对象方法的基本概念,以及用C++语言实现面向对象程式设计的基本方法;
- 第8章继承与多态。介绍如何使用C++语言来实现面向对象程式设计的两个重要特性——继承和多态;
- 第9章输入输出流。介绍标準输入输出的基本方法,即输入输出流和档案输入输出流两方面的内容;
- 第10章模板。介绍模板的基本概念,以及C++中函式模板和类模板的定义及使用方法等。
- 第11~16章为基本的数据结构和算法
- 第11章数据结构与算法的基本概念。首先介绍数据结构的基本术语、抽象数据类型、数据结构的存储结构和逻辑结构,然后介绍算法的基本概念和算法分析方法,最后介绍算法设计基本方法与常用的算法设计策略;
- 第12章线性表。介绍线性表的逻辑结构,并给出线性表的抽象数据类型;还介绍线性表的顺序存储和链式存储的表示和实现方法等;
- 第13章栈和伫列。介绍栈的逻辑结构和抽象数据类型,并分别给出栈的顺序存储和链式存储的表示和实现方法;介绍伫列的逻辑结构和抽象数据类型,并分别给出伫列的顺序存储和链式存储的表示及实现方法等;
- 第14章树和二叉树。介绍树的基本概念、二叉树的基本特性;二叉树的顺序表示、链式表示,二叉树的遍历和其他常用操作及其实现方法;哈夫曼树和哈夫曼码等;
- 第15章图。介绍图的基本概念;图在计算机中常用的3种表示方法、图的遍历方法及其实现方法;结合具体套用问题,讲解最小生成树和最短路径的问题等;
- 第16章算法设计策略及套用实例。介绍分治、贪心、动态规划、回溯和分支限界5种算法设计策略,并给出相应的套用实例。
教材目录
第1章如何让计算机进行计算11.1计算思维和程式流程图1 1.1.1计算思维1 1.1.2程式流程图2 1.2程式设计的基本概念4 1.2.1用计算机求解问题的过程4 1.2.2程式设计方法6 1.3高级程式设计语言——C++7 1.4初识C++程式8 1.4.1简单C++程式实例9 1.4.2C++源程式的组成9 1.4.3C++源程式的组成元素12 1.5集成开发环境——VS201013 第2章计算机如何表示与处理数据16 2.1常用数制及不同数制数值之间的转换17 2.1.1数制17 2.1.2不同数制之间的转换18 2.2整数在计算机中的表示20 2.2.1数据的单位20 2.2.2整数的表示方法20 2.3实数在计算机中的表示24 2.4非数值数据在计算机中的表示25 2.4.1字元型数据在计算机中的表示25 2.4.2字元串27 2.4.3逻辑型数据27 2.5C++中的基本数据类型和转义字元27 2.5.1C++的基本数据类型27 2.5.2C++中的转义字元28 2.6变数和常量29 2.6.1常量29 2.6.2变数30 2.7基本数据的处理31 2.7.1运算符和表达式31 2.7.2算术运算符与算术表达式31 2.7.3赋值运算符与赋值表达式32 2.7.4关係运算符与关係表达式33 2.7.5逻辑运算符与逻辑表达式34 2.7.6基本数据类型之间的转换35 2.8C++中的基本语句38 2.8.1定义/声明语句38 2.8.2表达式语句41 2.8.3複合语句和空语句41 2.8.4输入输出语句42 2.9C++中的几个特殊运算符42 2.9.1++和--42 2.9.2条件运算符43 2.9.3逗号运算符45 2.9.4sizeof运算符45 2.10更多关于C++的运算符和表达式46 2.10.1运算符的优先权和结合性46 2.10.2有副作用的表达式和无副作用的表达式48 2.10.3表达式的求值顺序49 第3章选择与叠代算法50 3.1单路选择算法及其C++实现50 3.1.1单路选择问题50 3.1.2用C++的if语句编程解决单路选择问题51 3.2双路选择算法及其C++实现52 3.2.1双路选择问题52 3.2.2用C++提供的if…else语句编程解决双路选择问题53 3.3嵌套选择及其C++实现54 3.4多路选择算法及其C++实现56 3.4.1多路选择问题56 3.4.2用C++提供的switch语句编程解决多路选择问题56 3.5叠代算法及其for语句的实现58 3.5.1叠代算法59 3.5.2用C++提供的for语句实现叠代算法59 3.6叠代算法及其while语句的实现60 3.6.1用C++提供的while语句实现叠代算法60 3.6.2用C++提供的do…while语句实现叠代算法61 3.7叠代嵌套及其C++实现62 3.8叠代与选择嵌套及其C++实现64 3.8.1叠代与选择嵌套及其C++实现64 3.8.2选择与叠代嵌套及其C++实现65 3.9C++中的转向语句65 3.9.1break语句66 3.9.2continue语句66 3.9.3return语句67 3.9.4goto语句67 第4章结构化数据的处理69 4.1一维数据及其C++实现69 4.1.1一维数据问题69 4.1.2用C++提供的一维数组存储一维数据71 4.2二维数据及其C++实现73 4.2.1二维数据问题73 4.2.2C++提供的一维数组或二维数组存储二维数据74 4.3字元串及其C++实现77 4.3.1字元串问题77 4.3.2用C++提供的一维数组存储字元串78 4.4多个字元串的处理79 4.4.1多个字元串问题79 4.4.2用C++提供的二维数组存储来多个字元串80 4.5多属性数据及其C++实现81 4.5.1多属性数据问题81 4.5.2用C++提供的结构体存储多属性数据81 4.6一组多属性数据的处理84 4.6.1一组多属性数据的问题84 4.6.2使用结构体数组对一组多属性数据进行存储和处理84 4.7C++中的枚举数据类型85 4.7.1枚举类型的定义85 4.7.2枚举变数的定义86 4.7.3枚举变数的使用86 4.8数组的套用——选择排序87 4.8.1选择排序算法87 4.8.2用C++实现选择排序算法88 第5章模组化90 5.1模组化及其C++实现90 5.1.1採用模组化思想处理问题91 5.1.2用C++实现结构化程式设计91 5.1.3函式的调用机制及内联函式94 5.1.4调用库函式95 5.2递归算法及其C++实现95 5.2.1递归算法95 5.2.2递归算法实例96 5.3默认形参值98 5.3.1指定默认形参值的位置98 5.3.2默认形参值的指定顺序99 5.4函式重载99 5.5编译预处理101 5.5.1档案包含101 5.5.2宏定义102 5.5.3条件编译103 5.6多档案结构105 5.6.1头档案105 5.6.2源档案106 5.6.3多档案结构程式实例106 5.6.4避免头档案被重複包含108 5.7变数和函式的作用域与生存期109 5.7.1全局变数的作用域与生存期109 5.7.2局部变数的作用域与生存期110 5.7.3函式的作用域112 5.8模组化套用实例——二分查找法114 5.8.1二分查找法114 5.8.2二分查找法套用实例115 第6章数据存储117 6.1数据存储的基本原理117 6.2地址与C++中的指针118 6.2.1指针变数的定义119 6.2.2指针变数的初始化119 6.2.3使用指针访问记忆体中的数据120 6.3指针与数组123 6.3.1数组在记忆体中的存储方式123 6.3.2使用指针运算元组124 6.3.3数组名与指针变数的区别125 6.3.4指向行的指针变数126 6.4指针与字元串127 6.5动态使用记忆体空间129 6.6二级指针133 6.7指针与函式134 6.7.1指针作为函式参数134 6.7.2指针作为函式返回值140 6.8引用与函式141 6.8.1引用的概念和声明141 6.8.2函式的传值调用142 6.8.3函式的引用调用143 6.8.4返回引用的函式144 第7章面向对象方法146 7.1面向对象方法的基本概念147 7.2C++中的类和对象150 7.2.1类的定义150 7.2.2构造函式152 7.2.3对象的定义和对象的访问153 7.3类成员的访问控制156 | 7.4析构函式158 7.5拷贝构造函式160 7.6类声明与实现的分离162 7.7类的静态成员164 7.7.1静态数据成员164 7.7.2静态成员函式166 7.8类的常量成员168 7.8.1常量数据成员168 7.8.2常量成员函式168 7.9this指针169 7.10类的友元170 7.11类的对象成员174 7.12自定义类的运算符重载177 7.12.1类成员函式形式的运算符重载177 7.12.2类友元形式的运算符重载179 第8章继承与多态184 8.1继承184 8.1.1继承概述184 8.1.2派生类的定义185 8.1.3访问控制方式和派生类的继承方式187 8.1.4成员函式重定义189 8.1.5派生类的构造函式和析构函式190 8.1.6多继承192 8.2多态199 8.2.1类型兼容和多态性的概念199 8.2.2多态性的实现202 8.3抽象类204 8.3.1抽象类的作用204 8.3.2抽象类的实现205 第9章输入输出流207 9.1输入输出流概述207 9.2cout和cin对象以及插入和提取运算符208 9.2.1标準流对象208 9.2.2>>和<<运算符与标準输入输出208 9.3使用成员函式进行标準输出和输入210 9.3.1使用put()函式进行标準输出210 9.3.2使用get()函式进行标準输入210 9.3.3getline()函式进行标準输入212 9.4档案流对象以及插入和提取运算符213 9.4.1档案流对象213 9.4.2<<和>>运算符与档案输入输出216 9.5使用成员函式进行档案的输出和输入217 9.5.1使用put()函式进行文本档案输出217 9.5.2使用get()函式进行文本档案输入218 9.5.3使用getline()函式进行文本档案输入218 9.6按数据块进行输出和输入220 9.6.1使用write()函式按数据块进行输出220 9.6.2使用read()函式按数据块进行输入221 9.7档案的随机读写225 9.8自定义数据类型的输入输出227 第10章模板231 10.1函式模板231 10.1.1函式模板的定义232 10.1.2函式模板的使用232 10.2类模板234 10.2.1类模板的定义235 10.2.2类模板的使用236 10.2.3类模板的静态成员和友元238 第11章数据结构和算法的基本概念240 11.1数据结构的基本概念24011.1.1基本术语241 11.1.2数据的逻辑结构242 11.1.3数据的存储结构244 11.1.4数据的操作245 11.2抽象数据类型246 11.3算法设计与算法分析基础248 11.3.1算法的基本概念248 11.3.2算法分析249 11.3.3算法分析实例254 11.4算法设计基本方法与策略基础256 11.4.1算法设计的方法256 11.4.2算法设计策略260 第12章线性表269 12.1线性表及其抽象数据类型269 12.1.1线性表的基本概念270 12.1.2线性表的抽象数据类型270 12.2线性表的顺序存储结构及其实现271 12.2.1线性表的顺序表示271 12.2.2顺序表的实现273 12.2.3顺序表代码复用实例277 12.3线性表的链式表示方法及实现281 12.3.1链式存储结构281 12.3.2单向鍊表及其基本操作281 12.3.3单向鍊表代码复用实例288 12.3.4线性表的顺序存储与链式存储的比较291 12.3.5循环鍊表及其基本操作292 12.3.6双向鍊表及其基本操作294 第13章栈和伫列297 13.1栈的基本概念297 13.1.1栈的基本概念297 13.1.2栈的抽象数据类型298 13.2栈的表示及实现299 13.2.1栈的顺序表示及实现299 13.2.2顺序栈代码复用实例303 13.2.3栈的链式表示及实现304 13.3伫列的基本概念307 13.3.1伫列的基本概念307 13.3.2伫列的抽象数据类型308 13.4伫列的表示及实现308 13.4.1伫列的顺序表示及实现309 13.4.2循环伫列代码复用实例313 13.4.3伫列的链式表示及实现315 第14章树和二叉树319 14.1树的基本概念319 14.1.1树的定义321 14.1.2树的表示形式321 14.1.3树的基本术语322 14.2二叉树及其基本性质324 14.2.1二叉树的定义324 14.2.2二叉树的基本性质325 14.3二叉树的抽象数据类型和表示方式327 14.3.1二叉树的顺序表示及实现328 14.3.2二叉树的链式表示及实现333 14.4二叉树的遍历及常用操作339 14.4.1二叉树的遍历及其实现339 14.4.2二叉树其他常用操作的实现345 14.5二叉排序树350 14.5.1二叉排序树的定义350 14.5.2二叉排序树的生成350 14.5.3二叉排序树的查找353 14.6二叉树排序树套用示例355 14.7哈夫曼树和哈夫曼码356 14.7.1基本术语356 14.7.2哈夫曼树及其构造方法357 14.7.3哈夫曼码及其编解码方法358 第15章图360 15.1图的基本概念及特性360 15.2图的抽象数据类型和表示方式364 15.2.1图的抽象数据类型364 15.2.2图的表示法365 15.2.3图的邻接矩阵表示法的实现367 15.3图的遍历370 15.3.1广度优先遍历及其实现371 15.3.2深度优先遍历及其实现373 15.4套用实例376 15.4.1图的套用376 15.4.2用图来描述和求解实际问题377 第16章算法设计策略及套用实例380 16.1分治策略380 16.1.1分治策略概述380 16.1.2分治策略的算法设计步骤和程式模式381 16.1.3分治策略套用实例382 16.2贪心策略385 16.2.1最最佳化问题与最最佳化原理385 16.2.2贪心策略概述385 16.2.3贪心策略的算法设计步骤及程式模式386 16.2.4贪心策略套用实例387 16.3动态规划策略389 16.3.1动态规划策略概述390 16.3.2动态规划策略的相关概念392 16.3.3动态规划策略算法设计步骤及程式模式394 16.3.4动态规划策略套用实例395 16.4回溯策略398 16.4.1回溯策略概述398 16.4.2回溯策略算法设计步骤及程式模式399 16.4.3回溯策略套用实例400 16.5分支限界策略401 16.5.1堆401 16.5.2分支限界策略概述404 16.5.3分支限界策略算法设计步骤及程式模式405 16.5.4分支限界策略套用实例405 |
(注:目录排版顺序为从左列至右列)
教学资源
该教材还是学堂线上的“程式设计基础(上)”和“程式设计基础(下)”MOOC课程使用的教材,同时还配套了《程式设计基础——上机实习及习题》。
书名 | 书号 | 出版社 | 作者 |
---|---|---|---|
《程式设计基础——上机实习及习题集》 | 9787302532033 | 清华大学出版社 | 王恺、赵宏 |
教材特色
该教材中除了讲解计算的基本概念、方法,还给出了完整的实现代码。几乎每一章都给出了拓展学习的内容。该教材通过对一些精选问题求解思路和方法的分析,以及针对初学者容易出现错误和困惑的地方提供了的提示,帮助读者更好地理解使用计算机解决问题的基本原理和方法、提高他们的计算思维能力、使他们初步具备使用C++程式设计语言解决实际问题的能力。
作者简介
赵宏,博士后,南开大学计算机学院副教授、硕士生导师、公总计算机基础教学部主任。长期从事公总计算机基础课程的教学和科学研究工作。主讲南开大学《计算机基础(理)》《数据结构与算法》等公总计算机基础课程。
王恺,男,1979年生人,南开大学计算机套用技术专业博士。于2006年留校,任南开大学信息学院教师、副教授。研究方向为图像、视频中的智慧型信息检索、最佳化问题建模和求解算法。主讲南开大学《计算机基础(理)》《数据结构与算法》等公总计算机基础课程。
转载请注明出处海之美文 » 程式设计基础(2019年清华大学出版社出版的图书)