程序设计教程:用C++语言编程(第3版)

综合评级:
★★★★★

定价:
¥45.00

作者:
陈家骏,郑滔 编著

出版社:
机械工业出版社

出版日期:
2015年6月

页数:
381

字数:
436000

ISBN:
9787111501237

书籍介绍

本书是以C++作为实现语言的第一门程序设计课程的教材,以基本的程序设计问题为核心,系统地介绍程序设计的技术、方法和理念。

本书概念讲解准确、系统性强,既有简单解法的描述,又有深层次的话题讨论。适合以C++为平台讲授程序设计课程的高校采用。

目录

第3版前言

第2版前言

第1版前言

教学建议

第1章概述

1.1计算机的工作模型

1.1.1冯·诺依曼体系结构

1.1.2硬件与软件

1.1.3机内信息表示

1.2程序设计

1.2.1程序设计范式

1.2.2程序设计步骤

1.2.3程序设计语言

1.3C++语言

1.3.1概述

1.3.2C++程序的构成

1.3.3C++语言的词法

1.3.4C++程序的运行步骤

1.4小结

1.5习题

 

第2章简单数据的描述-基本数据类型和表达式

2.1概述

2.2基本数据类型

2.2.1整数类型

2.2.2实数类型

2.2.3字符类型

2.2.4逻辑类型

2.3数据的表现形式

2.3.1常量

2.3.2变量

2.3.3变量值的输入

2.4数据的基本运算-操作符

2.4.1操作符概述

2.4.2算术操作符

2.4.3关系与逻辑操作符

2.4.4位操作符

2.4.5赋值操作符

2.4.6其他操作符

2.4.7操作数的类型转换

2.5数据基本运算的实现-表达式

2.5.1表达式的构成与分类

2.5.2操作符的优先级和结合性

2.5.3表达式中操作数的类型转换

2.5.4带副作用操作符的表达式计算

2.5.5表达式结果的输出

2.6小结

2.7习题

 

第3章程序的流程控制(算法)描述-语句

3.1概述

3.2顺序执行

3.2.1表达式语句

3.2.2复合语句

3.2.3空语句

3.3选择执行

3.3.1if语句

3.3.2switch语句

3.4循环(重复)执行

3.4.1迭代与穷举

3.4.2while语句

3.4.3dowhile语句

3.4.4for语句

3.4.5计数循环和事件循环

3.4.6循环程序设计实例

3.5无条件转移

3.5.1goto语句

3.5.2break语句

3.5.3continue语句

3.6程序设计风格

3.6.1结构化程序设计

3.6.2关于goto语句

3.7小结

3.8习题

 

第4章过程抽象-函数

4.1概述

4.1.1功能分解与复合

4.1.2子程序及子程序间的数据传递

4.2C++函数

4.2.1函数的定义

4.2.2函数的调用

4.2.3值作为参数传递

4.2.4局部变量与全局变量

4.2.5基于函数的过程式程序设计

4.3标识符的作用域与变量的生存期

4.3.1程序的多模块结构

4.3.2标识符的作用域

4.3.3命名空间

4.3.4变量的生存期(存储分配)

*4.3.5基于栈的函数调用的实现

4.4递归函数

4.4.1什么是递归函数

4.4.2"分而治之"的程序设计

4.4.3递归与循环的选择

4.4.4递归函数应用实例

4.5标准函数库

4.6C++函数的进一步讨论

4.6.1内联函数

4.6.2带默认值的形式参数

4.6.3函数名重载

4.6.4匿名函数-λ表达式

4.7小结

4.8习题

 

第5章复合数据的描述-构造数据类型

5.1枚举类型-自定义值集的数据描述

5.1.1枚举类型的定义

5.1.2枚举类型的操作

5.2数组类型-由多个同类型元素构成的复合数据描述

5.2.1一维数组类型-线性复合数据的描述

5.2.2一维字符数组-字符串类型的一种实现

5.2.3二维数组类型-二维复合数据的描述

5.2.4数组类型的应用

5.3结构类型-由若干属性构成的复合数据描述

5.3.1结构类型的定义

5.3.2结构类型的操作

5.3.3结构类型的应用

5.4联合类型-用一种类型表示多种类型的数据

5.4.1联合类型的定义与操作

5.4.2联合类型的应用

5.5指针类型-内存地址的描述

5.5.1指针类型的定义

5.5.2指针类型的基本操作

5.5.3指针作为参数类型

5.5.4指针与动态变量

5.5.5指针与数组

5.5.6函数指针

*5.5.7多级指针

5.6引用类型-变量的别名

5.6.1引用类型的定义

5.6.2引用作为参数类型

5.7小结

5.8习题

 

第6章数据抽象-对象与类

6.1概述

6.1.1数据抽象与封装

6.1.2面向对象程序设计

*6.1.3面向对象程序设计与过程式程序设计的对比

6.2类

6.2.1数据成员

6.2.2成员函数

6.2.3成员的访问控制-信息隐藏

6.3对象

6.3.1对象的创建

6.3.2对象的操作

6.3.3this指针

6.4对象的初始化和消亡前处理

6.4.1构造函数

6.4.2析构函数

6.4.3成员对象的初始化

6.4.4拷贝构造函数

6.5类作为模块

6.5.1类模块的组成

*6.5.2Demeter法则

6.6对象与类的进一步讨论

6.6.1对常量对象的访问-常(const)成员函数

6.6.2同类对象之间的数据共享-静态(static)数据成员

6.6.3提高对象私有数据成员的访问效率-友元(friend)

6.6.4对象拷贝构造过程的优化-转移构造函数

6.6.5操作符重载

6.7小结

6.8习题

 

第7章继承(类的复用)-派生类

7.1概述

7.1.1类之间的继承关系-基类与派生类

7.1.2继承的作用

7.2单继承

7.2.1单继承派生类的定义

7.2.2在派生类中访问基类成员-protected访问控制

7.2.3派生类对基类成员的访问控制-继承方式

7.2.4派生类对象的初始化和赋值操作

7.2.5单继承的应用实例

7.2.6类之间的聚集关系

7.3消息(成员函数调用)的动态绑定

7.3.1消息的多态性

7.3.2虚函数与消息的动态绑定

7.3.3纯虚函数和抽象类

*7.3.4虚函数动态绑定的一种实现

7.4多继承

7.4.1多继承的必要性

7.4.2多继承派生类的定义

7.4.3命名冲突

7.4.4重复继承-虚基类

7.5小结

7.6习题

 

第8章类属类型(泛型)-模板

8.1概述

8.2模板

8.2.1函数模板

8.2.2类模板

8.2.3模板的复用

8.3C++标准模板库

8.3.1概述

8.3.2容器

8.3.3迭代器

8.3.4算法

8.4小结

8.5习题

 

第9章输入/输出

9.1概述

9.2面向控制台的输入/输出

9.2.1基于函数库的控制台I/O

9.2.2基于类库的控制台I/O

9.2.3抽取/插入操作符">>"和"<<"的重载

9.3面向文件的输入/输出

9.3.1文件概述

9.3.2基于函数库的文件I/O

9.3.3基于类库的文件I/O

9.4面向字符串变量的输入/输出

9.5小结

9.6习题

 

第10章异常处理

10.1概述

10.1.1什么是异常

10.1.2异常处理的基本手段

10.2C++异常处理机制

10.2.1try、throw以及catch语句

10.2.2异常的嵌套处理

10.3基于断言的程序调试

10.4小结

10.5习题

 

第11章Windows应用程序设计

11.1Windows应用程序的基本结构

11.1.1Windows应用程序简介

11.1.2消息驱动的程序结构

11.2面向对象的Windows应用程序结构

11.2.1Windows应用程序中的对象

11.2.2微软基础类库(MFC)

11.2.3基于MFC"文档视"结构的应用框架

11.3小结

11.4习题

 

附录AASCII字符集及其编码

附录BIEEE浮点数的内部表示

附录CC++标准函数库中的常用函数

附录DC++编译预处理命令

附录EC++标准模板库(STL)常用功能

附录FMFC一些常用类的功能

参考文献

前言

  自本教材的第2版出版以来,根据我们的教学实践以及广大读者的反馈意见,我们发现教材还存在一些不尽如人意的地方,现予以修订。

  教材第3版的变动主要体现在以下几个方面:

  1.重新组织和调整了一些章节的内容,使得教材内容安排更加合理,并进一步突出教材对主流程序设计思想、概念和技术的介绍。例如:把对整数的补码表示以及实数的浮点表示的描述集中放入1.1.3 节“机内信息表示”中介绍;把基于断言的程序调试从第4章“过程抽象—函数”移至第10章“异常处理”中介绍;在第5章“复合数据的描述—构造数据类型”的子标题中显式指出每种类型的作用;把“操作符重载”从单独的一章(第2版的第7章)变成一节(6.6.5节)放入6.6节的“对象与类的进一步讨论”中;把C++的编译预处理命令(包括条件编译)、常用标准函数和STL算法以及MFC常用类的介绍放到附录中;围绕“消息驱动”和“文档视”软件结构重新组织了第11章对基于MFC的面向对象程序设计的介绍;等等。

  2.针对C++新的国际标准(C++11),增加一些对程序设计有良好支持的C++内容。例如:增加了对λ表达式的介绍,包括λ表达式的定义(4.6.4节“匿名函数—λ表达式”)、实现(6.6.5节中的“函数调用操作符重载”)以及应用(5.5.6节“函数指针”和8.3节“C++标准模板库”),通过λ表达式可以实现匿名函数,它把函数定义和使用合二为一,以提高程序中“临时用一下”的小函数的灵活性;增加了对转移构造函数(6.6.4节“对象拷贝构造过程的优化—转移构造函数”)和转移赋值操作符重载函数(6.6.5节)的介绍,它们基于“右值引用”参数类型实现把资源从即将消亡的对象转移(而不是复制)到新创建的或已有的对象中,从而提高程序效率;等等。

  3.针对初学者,尤其是自学者,对一些内容的描述进行了完善,并对全书的语言文字和逻辑进行了优化,使得教材更加便于阅读;对教材例子中的程序代码增加了注释,使得它们更加容易理解。另外,尽量减少了在前面出现而在后面才会详细介绍的概念,以避免给初学者带来困扰。对于必须提前出现的概念以“将在……节……中介绍”的引用形式给出,而在后面用到前面介绍的内容时,将采用“参见……节的……”的引用形式。

  4.补充了一些习题,使得读者能更好地理解和掌握核心内容,并有针对性地进行程序设计训练。

  5.修正了教材第2版中的一些错误。

  本书修订过程中得到了很多人的帮助,在第3版出版之际向他们表示感谢。特别感谢刘奇志老师和黄书剑老师,他们在与作者一起承担程序设计课程的教学过程中发现了本教材的一些问题,并对本教材的修订提出了很多很好的建议,作者获益良多。另外,还要感谢策划编辑朱劼对我们的鼓励与鞭策,并为教材编写出谋划策。

  作者于南京大学2015年2月第2版前言本书第1版自2004年出版以来,得到了广大读者的热情关注和支持,很多读者还提出了宝贵的建议,我们深表感谢。

  在近几年的教学中,我们也发现了本书的一些不足之处。首先,编写该教材的初衷是介绍程序设计的基本思想、概念和技术,C++语言是作为编程实现语言的角色出现,然而,在教材某些内容的表述上违背了这个初衷,教材的一些地方出现了C++语言“喧宾夺主”的情况。其次,教材在一些内容的表达上过于“精炼”,使初学者有“看天书”的感觉。再次,教材对现在比较流行的C++标准模板库(STL)以及它所支持的泛型程序设计没有给出足够的介绍,从而给读者学习使用STL带来了困难。此外,教材中还存在少量的错误。

  针对上述问题,我们对教材进行了修订。第2版的变动主要体现在以下几个方面:

  1)重新组织了一些章节的内容,并调整了相应章节(主要是节)的标题和次序,进一步突出了程序设计的主流思想、概念和技术。

  2)对教材的文字进行了润色,补充了例子,并为例子中的程序代码增加了注释,使之更加容易理解。

  3)补充了对STL的介绍,包括一些常用的容器和算法以及它们的使用实例,有利于读者更好地进行泛型程序设计。

  4)增加了对计算机内部信息表示的介绍,使得读者能更好地理解程序设计中涉及的二进制。

  5)补充了一些习题,使读者有更多的机会进行有针对性的训练。

  6)对一些重要的程序设计术语用不同的字体加以突出的标注并给出了它们的英文对照,突出了对程序设计重要概念的介绍。

  7)修正了上一版中的一些错误。

  在教材的修订过程中,得到了很多人帮助,在教材第2版出版之际向他们表示感谢,并希望继续得到大家的支持,使教材进一步得到完善。

  作者于南京大学2009年2月

  第1版前言随着计算机应用领域的不断扩大、应用层次的不断加深,社会对计算机软件的需求急剧增长,这就导致了软件的规模不断扩大、复杂程度不断提高。如何设计出大量的满足用户需求的高质量软件是软件工作者所面临的严峻挑战。

  作为计算机软件的主要表现形式—计算机程序不同于其他程序(如音乐会程序),它是由计算机来执行的。这就使得计算机程序的编制(程序设计)不能完全以人的思维模式和习惯来进行,它往往要受到计算机解决问题的方式和特点的限制。除此之外,要设计出解决各种问题的程序,程序设计者往往还需要了解与问题领域有关的知识。这些都给程序设计带来一定的难度。

  从程序设计的发展历史来看,程序设计经历了从低级语言到高级语言、从以编码为中心到面向软件生存周期的软件工程、从过程式到面向对象的发展过程。这一过程体现了人们对程序设计活动的不断认识和改进的过程,特别是从过程式程序设计到面向对象程序设计的发展,体现了人们对以自然的方式来描述和解决问题的需求,它使得解题过程更接近于人的思维方式。

  有人认为程序设计是一门艺术,而艺术基于人的灵感和天赋。对于一些小型程序的设计而言,上述的说法可能有一些道理。但是,对于大型、复杂的程序设计问题,灵感和天赋是不能很好地解决问题的,几十年的程序设计实践已证明了这一点。不可否认,程序设计需要灵感和天赋,它们往往在程序的一些局部设计上发挥着作用。但从总体上讲,程序设计是一门科学,它是有规律和步骤可循的。通过对程序设计的基本思想、概念和技术的学习,再加上必要的训练和实践,程序设计的规律和步骤是可以掌握的,这正是本书的主旨所在。本书强调准确的程序设计基本概念、良好的程序设计风格和实际动手能力的训练与培养。

  关于C++语言是否适合作为介绍程序设计时的编程实现语言,目前存在不同的看法。持反对意见的人认为C++太灵活,以至于会使初学者感到无所适从。本书之所以选择C++语言作为实现语言,首先,因为C++语言是一种流行的高级语言,很多人都在用C++编写实际的程序;其次,C++支持大部分基本的程序设计思想、概念和技术,其中包括对过程式及面向对象两种程序设计范型的支持。再次,与其他高级语言相比,C++语言具有灵活和高效等特点,这使得一些程序设计思想、概念和技术能够更好地实现。本书是以介绍基本的程序思想、概念和技术为主旨,C++服务于这个主旨,而不是相反,这样,初学者在使用C++时能够做到有的放矢。因此,本书对C++的一些特殊的、用于解决非主流的程序设计问题的成分和技巧不予重点介绍。特别地,本书对一些属于C++语言“文化”范畴的内容不予过分强调。

  本书的内容分成两大部分:第1章至第5章为第一部分,主要对一些基本的程序设计思想、概念和技术以及过程式程序设计的基本内容进行介绍,其中包括:数据类型、表达式、流程控制、子程序(函数)、递归等;第6章至第12章为第二部分,重点介绍面向对象程序设计的基本内容,其中包括:类/对象、继承、操作符重载、类属(模板)、输入/输出、异常处理以及面向对象的Windows应用程序基本框架等。

  本书既适合于程序设计的初学者使用,同时,对具有一些程序设计经验的人也有一定的参考价值。本书可以作为一学年的程序设计课程使用,其中,第一学期介绍第1章到第5章的全部内容以及第10章的部分内容;第二学期介绍第6章到第9章全部内容、第10章的部分内容以及第11章到12章的全部内容。如果读者已学过过程式程序设计(如C语言程序设计等)的基本内容,则本书也可作为一学期的面向对象程序设计课程使用,重点介绍第6章到12章的内容。书中加“*”标记的节在初次阅读时可以跳过。

  本书的编写和完成与很多人的帮助是分不开的。首先,要感谢郑国梁教授对本书编写工作的精心指导。在内容的选取、安排、用语的规范性等方面,郑老师都事无巨细地给予了考虑,并检查了全文(包括每个例子程序)。值得一提的是,作者编写本书所必备的专业知识和专业素质是在郑老师的长期熏陶下获得的,这些知识和素质使得作者能够完成本书的编写。其次,非常感谢尹存燕老师和戴新宇在本书习题的设计和文字易读性方面所做的大量工作;非常感谢孙明欣和周明对书中内容所做的检查工作,特别是对本书初稿中一些概念上的模糊与谬误、内容安排的合理性与易读性以及在遵守C++标准规范方面所提出的建议;感谢胡昊和徐锋,作者对一些基本概念的理解是在与他们就相关问题的讨论中获得的。另外,还要感谢机械工业出版社的温莉芳总编辑对本书编写工作的鼓励和支持。

  最后,要感谢我们的家人对本书编写工作的理解和支持,本书的编写占用了大量本应与他们共度的家庭欢乐时间。感谢所有支持和帮助过本书编写工作的人们。

  由于作者水平有限,加之时间仓促,错误和疏漏在所难免,恳请广大读者不吝指教,以便于我们在今后的版本中进行改进。

课课家教育

未登录