程序设计教程——用C++语言编程 第2版
作者 : 陈家骏; 郑滔
出版日期 : 2009-04-30
ISBN : 978-7-111-26801-7
适用人群 : 高等院校计算机及相关专业本科生
定价 : 35.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 310
开本 : 16开
原书名 :
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书以介绍基本的程序设计思想、概念和技术为中心,强调了数据结构、算法、过程抽象以及数据抽象等重要的程序设计思想。具体内容包括:数据类型、表达式、循环、子程序、递归、类/对象、继承、类属、输入/输出以及异常处理等。还对目前流行的c++标准模板库进行了介绍。本书内容全面,深入浅出,适合作为高等院校计算机及相关专业程序设计课程的教材,也适合相关技术人员阅读。

图书特色

图书前言

第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++标准规范方面所提出的建议;感谢胡昊和徐锋,作者对一些基本概念的理解是在与他们就相关问题的讨论中获得的。另外,还要感谢机械工业出版社的温丽芳总编辑对本书编写工作的鼓励和支持。
  最后,要感谢我们的家人对本书编写工作的理解和支持,本书的编写占用了大量的本应属于与他们在一起共度家庭欢乐的时间。感谢所有支持和帮助过本书编写工作的人们。
  由于作者水平有限,加之时间仓促,错误和疏漏在所难免,恳请广大读者不吝指教,以便于我们在今后的版本中进行改进。
  陈家骏
  南京大学计算机科学与技术系
  chenjj@nju.edu.cn
  郑滔
  南京大学软件学院
  zt@nju.edu.cn
  2004年4月

上架指导

计算机\程序设计

封底文字

本书是作者多年从事程序设计教学以及实际科研项目开发经验的结晶。它以C++作为实现语言来介绍基本的程序设计思想、概念和技术,强调数据结构、算法、过程抽象以及数据抽象等重要的程序设计思想,可作为高等院校本科生第一门程序设计课程的教材。读者通过阅读本书,再辅以必要的训练和实践,可掌握程序设计的规律和步骤。
 
  本书特色
  内容全面、组织合理,突出了程序设计的主流思想、概念和技术。
  利用丰富的实例说明程序设计思想和重要概念,并为例子中的程序代码增加了注释,帮助读者理解。
  对STL进行了详细的介绍,包括一些常用的容器和算法以及使用实例,以便读者更好地进行泛型程序设计。
  习题丰富,以便读者进行有针对性的训练。
  本书为授课教师提供电子教案和习题答案,需要者请登录华章网站(www.hzbook.com)下载。

译者序

陈家骏,男,1963年生。获南京大学博士学位,现为南京大学计算机科学与技术系教授,博士生导师。主要从事自然语言处理和软件工程领域的研究工作,曾多次主持国家及省级科研项目的研究与开发,其中包括:863“基于语义和多策略融合的日汉机器翻译关键技术研究”、国家自然科学基金“基于统计关系学习的汉语指代消解研究”以及江苏省自然科学基金“基于条件随机场和核集成的自适应中文信息抽取技术研究”等项目,研究成果多次获得省部级科研奖励。具有多年的软件开发和程序设计课程教学的经历。
  郑滔,男,1966年生。获南京大学硕士学位,现为南京大学软件学院教授。主要从事软件工程和嵌入式系统领域的研究工作。曾多次参加国家/省科技攻关项目、国家/省自然科学基金项目和国家863高科技项目的研究与开发,研究成果两次获得部级科技成果二等奖。具有多年软件开发和程序设计以及编译技术课程教学的经历。
  封面图片介绍
  南京大学座落在钟灵毓秀、虎踞龙盘的六朝古都南京,是直属国家教育部的重点综合性大学。南京大学治学严谨,具有多学科的综合优势和高素质的教师队伍,办学水平在全国高校中名列前茅。“诚朴雄伟,励学敦行”的校训继承和反映了南大百年办学的优良传统,同时体现了办学理念的更高追求。
  南京大学的标志是位于鼓楼校区北园最北端的北大楼,她的特异之处在于布满全身的爬山虎,每至春夏之交,悠久的北大楼一片绿叶绵延,迎着入口处的石阶拾级而上,仰望她的宁静致远,俯看南大的建筑群体,静谧之气悄然而至。

图书目录

第2版前言
第1版前言
作者简介
教学建议
第1章 概述 1
1.1 计算机的工作模型 1
1.1.1 硬件 1
1.1.2 软件 3
1.1.3 机内信息表示 3
1.2 程序设计 6
1.2.1 程序设计范型 6
1.2.2 程序设计步骤 7
1.2.3 程序设计语言 9
1.3 C++语言 11
1.3.1 C++语言概述 11
1.3.2 C++程序的构成 12
1.3.3 C++程序的运行步骤 12
1.3.4 C++语言的词法 13
1.4 小结 15
1.5 习题 16
第2章 数据描述(Ⅰ)—基本数据类型
和表达式 17
2.1 数据类型概述 17
2.2 基本数据类型 18
2.2.1 整数类型 18
2.2.2 实数类型 19
2.2.3 字符类型 19
2.2.4 逻辑类型 20
2.3 数据的表现形式 20
2.3.1 常量 20
2.3.2 变量 23
2.3.3 变量值的输入 24
2.4 操作符(运算符) 25
2.4.1 算术操作符 25
2.4.2 关系与逻辑操作符 26
2.4.3 位操作符 28
2.4.4 赋值操作符 30
2.4.5 其他操作符 31
2.4.6 操作数的类型转换 32
2.5 表达式 35
2.5.1 表达式的构成与分类 35
2.5.2 操作符的优先级和结合性 36
2.5.3 表达式中操作数的类型转换 37
2.5.4 表达式结果的输出 38
2.5.5 表达式的副作用 38
2.6 小结 39
2.7 习题 39
第3章 流程控制—语句 41
3.1 程序流程控制概述 41
3.2 顺序控制 41
3.2.1 表达式语句 42
3.2.2 复合语句 43
3.2.3 空语句 43
3.3 选择控制 44
3.3.1 if语句 44
3.3.2 switch语句 48
3.4 循环(重复)控制 51
3.4.1 while语句 52
3.4.2 do-while语句 53
3.4.3 for语句 53
3.4.4 计数循环和事件循环 55
3.4.5 循环程序设计实例 57
3.5 无条件转移控制 61
3.5.1 goto语句 61
3.5.2 break语句 62
3.5.3 continue语句 63
3.6 程序设计风格 65
3.6.1 结构化程序设计 65
3.6.2 关于goto语句 66
3.7 小结 66
3.8 习题 67
第4章 过程抽象—函数 68
4.1 基于过程抽象的程序设计 68
4.1.1 功能分解与复合 68
4.1.2 子程序 68
4.1.3 子程序间的数据传递 69
4.2 C++函数 70
4.2.1 函数的定义 70
4.2.2 函数的调用 72
4.2.3 值作为参数传递 73
4.2.4 基于函数的过程式程序设计 74
4.3 标识符的作用域与变量的生存期 75
4.3.1 变量的局部性—局部变量与
全局变量 75
4.3.2 C++程序的多模块结构 77
4.3.3 标识符的作用域 79
4.3.4 名空间 83
4.3.5 变量的生存期(存储分配) 85
*4.3.6 基于栈的函数调用的实现 87
4.4 递归函数 89
4.4.1 什么是递归函数 89
4.4.2 “分而治之”的程序设计 89
4.4.3 递归与循环的选择 91
4.4.4 递归函数应用实例 92
4.5 函数的进一步讨论 93
4.5.1 内联函数 93
4.5.2 带默认值的形式参数 95
4.5.3 函数名重载 97
4.6 C++标准函数库 99
4.7 C++的条件编译 101
4.7.1 条件编译命令 101
4.7.2 基于多环境的程序编制 102
4.7.3 程序调试 103
4.8 小结 104
4.9 习题 105
第5章 数据描述(Ⅱ)—构造数据类型 107
5.1 枚举类型 107
5.2 数组类型 110
5.2.1 一维数组的定义与操作 110
5.2.2 字符串类型的一种实现—
一维字符数组 114
5.2.3 二维数组的定义与操作 117
5.2.4 数组类型的应用 120
5.3 结构类型 125
5.3.1 结构类型的定义与操作 125
5.3.2 结构类型的应用 128
5.4 联合类型 131
5.5 指针类型 135
5.5.1 指针类型的定义 135
5.5.2 指针类型的基本操作 136
5.5.3 指针作为参数传递 140
5.5.4 指针与动态变量 145
5.5.5 函数指针 154
5.5.6 指针与数组 156
*5.5.7 多级指针 160
5.6 引用类型 161
5.6.1 引用类型的定义 161
5.6.2 引用作为参数传递 162
5.6.3 引用类型与指针类型的区别 164
5.7 小结 164
5.8 习题 165
第6章 数据抽象—对象与类 168
6.1 基于数据抽象的程序设计 168
6.1.1 什么是面向对象程序设计 168
6.1.2 为什么要面向对象 170
6.1.3 面向对象程序设计的基本内容 173
6.2 类 174
6.2.1 数据成员 174
6.2.2 成员函数 175
6.2.3 成员的访问控制—信息隐藏 176
6.3 对象 178
6.3.1 对象的创建和标识 178
6.3.2 对象的操作 179
6.3.3 this指针 181
6.4 对象的初始化和消亡前处理 183
6.4.1 构造函数与析构函数 183
6.4.2 成员对象的初始化 188
6.4.3 拷贝构造函数 189
6.5 对象与类的进一步讨论 192
6.5.1 对常量对象的访问—常
成员函数 192
6.5.2 对象之间的数据共享—
静态数据成员 193
6.5.3 提高对对象私有数据成员的
访问效率—友元 195
6.6 类作为模块 198
6.6.1 类模块的组成 198
*6.6.2 Demeter法则 200
6.7 小结 200
6.8 习题 201
第7章 操作符重载 204
7.1 操作符重载概述 204
7.1.1 操作符重载的必要性 204
7.1.2 操作符重载的方式 205
7.1.3 操作符重载的基本原则 206
7.2 操作符重载的实现 206
7.2.1 双目操作符重载 206
7.2.2 单目操作符重载 208
7.3 C++中几个特殊操作符的重载 210
7.3.1 赋值操作符“=” 210
7.3.2 数组元素访问操作符(下标
操作符)“[]” 211
7.3.3 类成员访问操作符“->” 212
7.3.4 动态存储分配与去配操作符
new与delete 214
7.3.5 自定义类型转换操作符 217
7.3.6 函数调用操作符“()” 218
7.4 操作符重载的实例—字符串类
String的一种实现 219
7.5 小结 221
7.6 习题 222
第8章 类的继承—派生类 223
8.1 类之间的继承关系—基类与
派生类 223
8.2 单继承 224
8.2.1 单继承的定义 224
8.2.2 在派生类中访问基类成员—
protected访问控制 225
8.2.3 派生类对基类成员的访问控制—
继承方式 227
8.2.4 派生类对象的初始化和赋值操作 229
8.2.5 单继承的应用实例 230
8.2.6 类之间的聚集关系 231
8.3 消息(成员函数调用)的动态绑定 233
8.3.1 消息的多态性 233
8.3.2 虚函数与消息的动态绑定 234
8.3.3 纯虚函数和抽象类 236
*8.3.4 虚函数动态绑定的一种实现 241
8.4 多继承 242
8.4.1 多继承的必要性 242
8.4.2 多继承的定义 243
8.4.3 名冲突 243
8.4.4 重复继承—虚基类 244
8.5 小结 245
8.6 习题 246
第9章 类属(泛型)机制—模板 249
9.1 类属(泛型)程序设计 249
9.2 模板 250
9.2.1 函数模板 250
9.2.2 类模板 253
9.2.3 模板的复用 254
9.3 C++标准模板库 256
9.3.1 概述 256
9.3.2 容器 257
9.3.3 迭代器 262
9.3.4 算法 262
9.4 小结 269
9.5 习题 269
第10章 输入/输出 270
10.1 输入/输出概述 270
10.2 面向控制台的输入/输出 271
10.2.1 基于函数库的控制台I/O 271
10.2.2 基于类库的控制台I/O 273
10.2.3 抽取/插入操作符“>>”和
“<<”的重载 276
10.3 面向文件的输入/输出 277
10.3.1 基于函数库的文件I/O 278
10.3.2 基于类库的文件I/O 283
10.4 面向字符串变量的输入/输出 289
10.5 小结 290
10.6 习题 290
第11章 异常处理 291
11.1 异常处理概述 291
11.1.1 什么是异常 291
11.1.2 异常处理的基本手段 292
11.2 C++异常处理机制 292
11.2.1 try、throw以及catch语句 292
11.2.2 异常处理的嵌套 294
11.3 小结 295
11.4 习题 296
第12章 实例—面向对象的Windows
应用程序框架 297
12.1 Windows应用程序的基本结构 297
12.1.1 应用程序的用户界面 297
12.1.2 消息驱动的程序结构 298
12.2 面向对象的Windows应用程序结构 299
12.2.1 Windows应用程序中的对象 300
12.2.2 MFC对面向对象Windows应用
程序开发的支持 300
12.2.3 Visual C++的应用向导和
类向导 305
12.3 小结 306
12.4 习题 306
附录A ASCII字符集及其编码 308
附录B IEEE浮点数的内部表示 309
参考文献 310

教学资源推荐
作者: [美]梁勇(Y.Daniel Liang) 著
作者: 郑阿奇 主编 丁有和 编著
作者: 邱李华 曹青 郭志强
作者: [美] 托尼·加迪斯(Tony Gaddis) 著
参考读物推荐
作者: (美)Elizabeth Drake 著
作者: (美)H.M.Deitel,P.J.Deitel,T.R.Nieto
作者: (美)Evan Burchard 著