C/C++程序设计实用教程

C/C++程序设计实用教程"

作者:王大伦
ISBN:9787302140986
定价:¥28.80
字数:千字
页数:
出版时间:2006.12.01
开本:
版次:1-1
装帧:
出版社:清华大学出版社
简介

C/C++是当今从事软、硬件开发的科技工作者必须熟练掌握的编程语言。学习程序设计的上好方法是边看书、边上机、边思考。基于这种理念,本书用大量例子来说明基本概念、各种库函数的使用方法以及程序的设计与调试技巧,并辨明是与非。本书共有16章。第1~10章讲述C与C++的基本语句和过程化程序结构。第11~16章讲述面向对象程序设计的特点与方法。作者提供了分门别类的程序例子约600多个,其中有复数类、矩阵类、多项式等实用类,所有正面程序均在VC++6.0或BC++3.0调试通过;另外,作者还设有12个讲座,讲解读者感兴趣的专题。这些程序示例和讲座可以从http://www.tup.tsinghua.edu.cn上下载。

本书适于作为高等院校非计算机专业的程序设计课程教材和高职院校的编程实践教材,也可供自学的读者和在职的技术人员使用。

前言

21世纪影响世界的三大关键技术是: 以计算机和网络为代表的信息技术;以基因工程为代表的生命科学和生物技术;以纳米技术为代表的新型材料技术。信息技术居三大关键技术之首。国民经济的发展采取信息化带动现代化的方针,要求在所有领域中迅速推广信息技术,导致需要大量的计算机科学与技术领域的优秀人才。

计算机科学与技术的广泛应用是计算机学科发展的原动力,计算机科学是一门应用科学。因此,计算机学科的优秀人才不仅应具有坚实的科学理论基础,而且更重要的是能将理论与实践相结合,并具有解决实际问题的能力。培养计算机科学与技术的优秀人才是社会的需要、国民经济发展的需要。

制定科学的教学计划对于培养计算机科学与技术人才十分重要,而教材的选择是实施教学计划的一个重要组成部分,《21世纪计算机科学与技术实践型教程》主要考虑了下述两方面。

一方面,高等学校的计算机科学与技术专业的学生,在学习了基本的必修课和部分选修课程之后,立刻进行计算机应用系统的软件和硬件开发与应用尚存在一些困难,而《21世纪计算机科学与技术实践型教程》就是为了填补这部分鸿沟。将理论与实际联系起来,结合起来,使学生不仅学会了计算机科学理论,而且也学会应用这些理论解决实际问题。

另一方面,计算机科学与技术专业的课程内容需要经过实践练习,才能深刻理解和掌握。因此,本套教材增强了实践性、应用性和可理解性,并在体例上做了改进——使用案例说明。

实践型教学占有重要的位置,不仅体现了理论和实践紧密结合的学科特征,而且对于提高学生的综合素质,培养学生的创新精神与实践能力有特殊的作用。因此,研究和撰写实践型教材是必须的,也是十分重要的任务。优秀的教材是保证高水平教学的重要因素,选择水平高、内容新、实践性强的教材可以促进课堂教学质量的快速提升。在教学中,应用实践型教材可以增强学生的认知能力、创新能力、实践能力以及团队协作和交流表达能力。

实践型教材应由教学经验丰富、实际应用经验丰富的教师撰写。此系列教材的作者不但从事多年的计算机教学,而且参加并完成了多项计算机类的科研项目,把他们积累的经验、知识、智慧、素质融合于教材中,奉献给计算机科学与技术的教学。

我们在组织本系列教材过程中,虽然经过了详细地思考和讨论,但毕竟是初步的尝试,不完善甚至缺陷不可避免,敬请读者指正。

本系列教材主编陈明

2005年1月于北京

我们有幸躬逢信息化时代。在这个知识大爆炸的时代,我们迎来机遇,也面临挑战。

计算机技术迅猛发展始于何时,很难界定。在计算机高级语言的领域,自从20世纪60 年代初期以来,先后开发了许多高级语言。其中,面向过程的程序设计语言首先面世,之后,面向对象的程序设计语言陆续登台。但在科学运算方面,从20世纪80年代末期至今,一枝独秀的高级语言只有C/C++。在可以预见的将来,C/C++仍将葆其青春。

C++是“带类的C”,是面向对象的程序设计(ObjectOriented Programming,OOP)语言。“面向对象”是一个很时髦的关键词。“面向对象”究竟是什么?本书将给读者一个满意的答复。

长期以来,存在着学习C++是否要先学C 语言的争论。我们的观点是:C++是C的扩充;不学C,焉能学C++。再者,C是结构化程序设计语言,虽说是适合于面向过程的程序设计,但在设计面向对象的程序中的主函数和成员函数中,通晓C程序设计技巧,仍是十分必要的。本书按照学习规律,先介绍C的编程技术,然后过渡到对C++的论述。 

在科学计算领域,C/C++无疑是主流的程序设计语言。只要从事科技开发,那么,无论做软件还是硬件,都要通晓C/C++程序设计语言。市场上有关 C/C++的教材和参考书可谓争妍斗奇,目不暇接。那么,为什么还要写这本书呢?这本书有什么特点?适合于哪些读者?下面简要地介绍一下。1. 本书的宗旨

本书的取材和体裁服从惟一的宗旨:帮助读者切实地掌握 C/C++程序分析能力和设计技能。2. 本书的特点

 (1) 通俗易懂

本书注意用通俗易懂的语言阐述基本理论,特别是讲深讲透许多“难点”,例如:

 数组和指针;

 引用;

 函数中的参数传递、函数体的编写、函数的调用;

 多文件操作;

 变量的存储和作用域;

 类的创建;

 继承;

 多态性与虚函数。

书中提供许多实例,从正反两方面来说明什么是正确的,什么是错误的。

(2) 利于自学

实践出真知。只有通过不懈的实践,才能真正掌握程序设计技巧。本书作者向读者提供了大量详加注释的程序例题。读者无须输入程序代码,即可在Borland C++(简称BC++)3.0或Visual C++(简称VC++)6.0中运行。这些程序是我们教学经验的积累,已在 BC++3.0 和 VC++6.0 中验证过了, 保证执行结果正确无误。建议读者把这些程序复制到硬盘中,选出一些重点程序,反复思考、运行、修改。

限于篇幅,本书只录入短小的或必须加以解释的程序文本,其他程序只标以名称。列出文本或不列出文本的程序,都附以如下图标:

表示读者应细读该程序;

表示该程序任读者选读。

盛传C/C++“难学”,“不容易”掌握指针、引用、数组以及C/C++的许多概念,而且据说“学了也很难用”。的确,只听几十学时的课,只看教科书,很难掌握C/C++编程技术。所有教材都说C++有 this 指针,但鲜有能确证它的存在和说明它的作用者。本书中将解决这类问题。本书之所以利于自学,是因为书中有许多程序来说明难懂的抽象概念。通过许多实例,将帮助读者走出认识上的种种误区。根据我们的经验,只要读者坚持边阅读,边上机,勤于思考,就会越学越有信心,领悟作为面向对象的编程语言 C++竟是如此惊人地接近人类的思维规律。

(3) 提高学习效率

我们认为,在当今信息大爆炸的信息化时代,如果你要角逐其中,开发新产品,那么,无论你参与软件或硬件的研制,你都无法绕过 C/C++程序设计。但是,在编制程序的过程中,C/C++只是一种工具。学习C/C++并不是终极目标,读者最需要的是学习本行业的专业知识,不通晓专业知识就无法提出据以编程的算法。本书作者提供的大量程序,无须读者自行输入。这会帮助读者在比较短的时间内,高效率地掌握作为工具的C/C++,从而能腾出更多时间学习专业知识,进行开发工作。

(4) 内容丰富,照顾面广

为照顾初学者,本书在几个讲座中介绍了一些不常提及的基本概念,例如整数的上溢出和下溢出,定点数和浮点数的数据结构等。本书也满足对编程有兴趣的读者,对某些问题用多个编程方案加以描述。例如,迭代算法可以用不同的循环结构实现;递归算法可以用非递归算法实现;在说明序列卷积算法时,给出多个程序。在说明对矩阵元素的访问方法时,书中给出几个方案,以深化对数组、指针的认识。

(5) 着重实际应用

学习计算机语言,要面向实际应用。如果只局限于某些概念,满足于了解一些语句,是难以胜任实际开发工作的。本书除了正面阐述,说明什么是正确的,还注意从反面来说明什么是不正确的。作者提供的讲座将介绍在 BC++3.0 和 VC++6.0 环境中怎样编译、连接和运行程序。

本书作为一本教材,难以面面俱到地结合各行各业的实际来阐述。但本书尽量举出众多实例。其中有高斯噪声发生器、定积分的计算、拉格朗日插值公式的计算、多项式的求值,以及卷积算法等。作为学习面向对象程序设计的小结,本书在讲座中给出基于直角坐标的复数类和基于极坐标的复数类、多项式类以及实用的矩阵类等,说明它们的应用。3. 本书的结构

本书共有16章。第1章介绍 C/C++的背景知识,说明面向过程和面向对象的程序设计特点,介绍C/C++程序的开发过程。第2~10章提供基础知识,阐述 C 语言程序设计技术。在此基础上,第11~16章介绍作为面向对象程序设计语言C++的三大特点(封装性、继承性和多态性)、运算符重载和类型转换、C++的代码重用机制(类模板、函数模板)以及输入/输出操作。

为了适应读者的不同需求,或者对某些章节作些补充,或者深入讨论某些专题, 开阔视野,作者提供了12个讲座的内容,读者可按需阅读。

作者提供的800多个程序,供读者上机时使用。这些程序经过调试,能在VC++6.0 和BC++3.0中运行。所有程序均有详细注解,并附有运行结果。列入教材的程序存于目录P中。12个讲座所用的程序存入目录L中。目录R既有目录P和目录L中的程序,还有其他大量程序。此外,作者编写了三个Word文档,简要地介绍了目录P、L、R内的各个程序,以便选用。4. 本书的对象

基于上述特点,本书可用作高等院校非计算机专业和高职院校的编程实践教材。

在职的工程技术人员在百忙之中可以阅读本书。

本书也献给想从事 Windows应用程序开发的朋友。没有C/C++的基础,恐怕难以应用像VC++6.0、BC++等开发系统。

如果读者用其他语言进行程序设计,那么,本书所附的众多程序示例会在算法上给你提供参考。5. 学习方法

学习并无捷径可寻。但正确的学习方法可以收到事半功倍之功。根据作者的工作、学习经验,读者若要快速地掌握一种程序设计语言,就一定要多看书,多上机操练。眼、手、脑并用,是为“捷径”。工夫不负有心人。作者提供的大量程序,既是例题,也是思考题和习题。建议读者先照样运行这些程序,然后思考、看书、修改、求变、再运行……学习程序设计语言,无须死记硬背,重要的是系统的理解和实践,学会查阅资料。作者提供的示例程序和讲座文稿,读者可以从http://www.tup.tsinghua.edu.cn上下载。

本书虽根据多年教学和科研实践写成,但难免有不当之处,敬请读者不吝指正。  作者的电子邮件信箱是: dalunwang@126.com。

作者2006年11月

目录

第1章走近C/C++1

1.1C语言和面向过程的程序设计1

1.1.1简介 1

1.1.2C 源程序的组成 2

1.1.3注释 2

1.1.4C程序例子3

1.1.5面向过程的程序设计特点 4

1.1.6结构化程序的三种基本结构 5

1.2C++语言和面向对象的程序设计6

1.2.1C++的起源 6

1.2.2C++的兼容性 7

1.2.3面向对象的程序设计语言——C++的特点7

1.2.4面向对象的程序设计特点10

1.3C/C++程序的开发过程11

第2章变量、常量和输入输出14

2.1基本字符集14

2.2保留字15

2.3标识符16

2.4基本数据类型16

2.5常量和变量18

2.5.1常量 18

 2.5.2变量19

2.6整型数据20

2.6.1整型常量的表示方法20

2.6.2整型常量的类型20

2.6.3整型变量的类型21

2.6.4溢出21

2.7实型数据21

2.7.1实型常量的表示方法 21

2.7.2实型数据在内存中的存放形式22

2.7.3实型数据的截尾误差 22

2.7.4实型常量的类型及其转换23

2.8字符型数据24

2.8.1字符常量 24

2.8.2ASCII 码——字符变量在内存中的存放形式25

2.8.3字符变量与单字节整型变量的关系 25

2.8.4字符串常量26

2.8.5字符数据的输出26

2.8.6字符数据的输入27

2.9格式化输出函数printf28

2.9.1一般格式28

2.9.2格式字符29

2.10格式化输入函数scanf30

2.10.1一般格式30

 2.10.2格式字符32

2.11C++的I/O流简介32

2.11.1输入操作 33

2.11.2输出操作33

习题234

第3章表达式和运算符38

3.1语句和语句块38

3.2表达式39

3.3简单赋值和算术运算41

3.4溢出42

3.5数据类型转换43

3.5.1隐式数据类型转换43

3.5.2显式类型转换44

3.6自增1和自减145

3.7关系运算符48

3.8逻辑运算符48

3.9位操作运算符 50

3.10条件运算符51

3.11复合赋值运算符52

3.12逗号表达式53

习题354

第4章过程化语句58

4.1表达式语句58

4.2选择语句59

4.2.1条件语句59

4.2.2开关语句63

4.3for 循环语句65

4.3.1for 语句的一般格式 65

4.3.2continue 语句及其与break 语句的区别68

4.3.3for 语句的嵌套与穷举法 69

4.3.4迭代法70

4.4do…while 语句71

4.5while 语句73

4.6循环语句综述 74

4.6.1循环结构的组成 74

4.6.2for 语句的变异形式 74

4.6.3循环语句的嵌套 75

4.6.4break语句 77

4.6.5goto 语句78

习题478

第5章函数80

5.1函数简介80

5.2函数定义81

5.3return语句83

5.4函数原型85

5.5局部变量与全局变量85

5.5.1程序的内存区域86

5.5.2非静态局部变量(自动变量)86

5.5.3静态局部变量87

5.5.4register (寄存器)变量 88

5.5.5全局变量88

5.6函数调用机制89

5.6.1栈 89

5.6.2函数的调用过程89

5.7内联函数91

5.7.1运行效率与代码重用的矛盾91

5.7.2内联函数91

5.7.3注意事项 92

5.8重载函数92

5.8.1引进重载函数的原因 92

5.8.2重载函数应满足的条件 92

5.8.3匹配重载函数的顺序93

5.9具有默认参数的函数94

5.10递归函数96

5.10.1概述 96

5.10.2直接递归函数 97

5.10.3递归算法和迭代算法综述98

习题599

第6章程序结构101

6.1编译与连接101

6.1.1单文件的编译与连接 102

6.1.2多文件的编译与连接103

6.2变量的作用域与可见性105

6.2.1作用域 105

6.2.2可见性 106

6.2.3单个源程序文件中的全局变量 106

6.2.4局部变量和全局变量的应用107

6.3变量的存储类别和生命期109

6.3.1动态存储方式与静态存储方式 109

6.3.2变量的生命期 109

6.3.3单个源文件中的变量小结110

6.3.4用 extern 声明外部变量110

6.3.5外部变量小结112

6.4外部函数和内部函数114

6.5编译指令115

6.5.1嵌入(包含)指令 116

6.5.2宏定义与宏取消指令 116

6.5.3条件编译指令118

习题6119

第7章数组121

7.1数组的定义和默认值121

7.1.1数组的定义121

7.1.2数组的默认值122

7.2通过下标访问数组122

7.3作用域122

7.4一维非字符数组的初始化123

7.5字符数组及其初始化123

7.6二维数组125

7.6.1二维数组定义 125

7.6.2二维数组元素在内存中的排列——降维处理 125

7.6.3二维数组的初始化126

7.7数组作为函数的形参126

7.8数组应用举例128

7.8.1矩阵转置——二维数组与一维数组的关系 128

7.8.2拉格朗日插值法130

7.8.3程序设计的探索法——设计魔方图132

习题7133

第8章指针和引用135

8.1地址、指针和指针变量的概念135

8.2指针的定义和初始化136

8.3指针的类型137

8.4指针的作用域137

8.5指针变量运算符137

8.6指针使用须知138

8.7指针运算140

8.8数组与指针141

8.8.1数组名是一个常量 141

8.8.2一维数组与指针 141

8.8.3二维数组与指针143

8.9字符数组、字符串与字符指针144

8.9.1字符数组和字符串144

8.9.2字符串常量和字符数组145

8.9.3字符指针 145

8.9.4字符串赋值146

8.10字符串数组与指针数组147

8.10.1重要概念 147

8.10.2应用举例149

8.11字符和字符串处理函数149

8.11.1字符串长度 150

8.11.2字符串复制 150

8.11.3字符串比较 151

8.11.4字符串串接152

8.11.5与字符和字符串有关的库函数152

8.12NULL指针155

8.13void指针155

8.14堆内存分配156

8.14.1函数malloc()和free()156

8.14.2运算符new和delete 157

8.14.3采样数据处理159

8.15常量指针(const对象)160

8.16指针常量(const指针)162

8.17指向常量的指针常量163

8.18函数指针164

8.18.1函数指针概念164

8.18.2用函数指针变量调用函数 164

8.18.3函数指针数组 166

8.18.4用指向函数的指针作函数参数167

8.19引用168

8.19.1引用的概念168

8.19.2引用与被引用变量的关系 169

8.19.3注意事项169

习题8170

第9章再论函数173

9.1参数传递的三种方式173

9.1.1函数的一般形式173

9.1.2传值方式174

9.1.3传址方式174

9.1.4传引用方式175

9.1.5例子175

9.1.6小结179

9.2函数的返回值181

9.2.1函数返回地址181

9.2.2函数返回引用182

9.2.3函数不能返回临时变量的地址或引用184

9.3使用常量指针和常引用传递参数185

习题9187

第10章枚举类型、结构体和共同体189

10.1枚举类型189

10.2结构体193

10.2.1结构体的声明和结构体变量的定义 193

10.2.2访问结构体变量的成员 194

10.2.3结构体数组195

10.3结构体用作函数参数和返回值196

10.4链表196

10.4.1链表的概念 196

10.4.2结点的构成与访问 197

10.4.3链表的两种构造方法 198

10.4.4简单链表操作 199

10.5共同体200

10.5.1共同体的特点 200

10.5.2共同体和共同体变量的定义格式200

10.5.3共同体变量的内存空间 201

10.5.4共同体变量成员的访问方式和特点201

10.6结构体、共同体和枚举类型的综合应用203

习题10203

第11章类和对象205

11.1类的声明与定义205

11.1.1类的组成 205

11.1.2内联函数207

11.2对象的定义208

11.3访问类的成员209

11.4认识构造函数211

11.4.1构造函数的功能与特点 211

11.4.2构造函数的调用次序 212

11.4.3构造函数的初始化列表213

11.5析构函数214

11.6对象在内存中的布局和 this 指针215

11.7再论构造函数217

11.7.1默认构造函数217

11.7.2复制构造函数 218

11.7.3具有默认参数的构造函数 219

11.7.4重载构造函数220

11.8堆对象221

11.8.1创建和删除单个堆对象的方法 221

11.8.2创建和删除堆对象数组的方法222

11.9静态数据成员和静态成员函数224

11.9.1静态数据成员的特点及定义方法 224

11.9.2访问静态数据成员的方法225

11.9.3链表的创建和简单的操作 225

11.9.4静态成员函数229

11.10无名对象与临时对象230

11.11常量对象和常量成员函数231

11.12类成员232

11.13友元233

11.13.1为什么需要友元 233

11.13.2友元的定义方法 233

11.13.3友元函数的特点234

习题11239

第12章继承241

12.1继承的概念241

12.2公有继承、保护继承和私有继承242

12.2.1类成员访问权限242

12.2.2三种继承模式242

12.3构造函数和析构函数的调用245

12.3.1构造函数的调用次序245

12.3.2析构函数的调用次序245

12.3.3派生类的初始化方法——初始化列表的用法247

12.4重载和操纵251

12.5类层次中的对象数据结构和指针应用252

12.6多继承和虚基类253

12.6.1没有公共基类的多继承——简单的多继承253

12.6.2具有公共基类的多继承254

12.6.3虚基类255

习题12260

第13章多态性和虚函数262

13.1多态性概述262

13.2联编263

13.3静态多态性263

13.4虚函数和动态多态性265

13.5对虚函数的限制270

13.6虚析构函数271

13.7成员函数调用虚函数271

13.8在构造函数中调用虚函数272

13.9纯虚函数和抽象类272

习题13277

第14章运算符重载与类型转换280

14.1运算符重载基础280

14.1.1例子 280

14.1.2注意事项282

14.2运算符重载函数284

14.2.1类运算符 284

14.2.2友元运算符286

14.3赋值运算符和四则运算符的重载 287

14.4自增1和自减1运算符重载289

14.5下标运算符的重载289

14.6关系运算符的重载291

14.7算术赋值运算符的重载 292

14.8输出与输入运算符的重载292

14.8.1重载输出运算符 292

14.8.2重载输入运算符293

14.9类型转换294

14.9.1基本类型转换为自定义类型 295

14.9.2自定义类型转换为基本类型 295

14.9.3自定义类型之间的转换295

习题14296

第15章模板298

15.1模板的概念298

15.2函数模板与模板函数299

15.2.1函数模板的定义格式 299

15.2.2模板函数——函数模板的应用300

15.3类模板303

15.3.1类模板的定义格式 303

15.3.2模板类——类模板的应用304

习题15306

第16章I/O流307

16.1C的标准I/O函数的缺陷307

16.2I/O流的概念308

16.3I/O流类库结构309

16.4标准I/O流310

16.4.1标准 I/O流的类层次 310

16.4.2预定义流对象 310

16.4.3预定义的插入类型 311

16.4.4预定义的提取类型312

16.5格式化I/O流313

16.5.1使用控制格式符实现I/O格式化 313

16.5.2使用控制输出格式的成员函数315

16.6用于无格式I/O的ios类成员函数317

16.7文件与文件流概述319

16.8文件流的类层次320

16.9文件的打开和关闭操作321

16.10顺序文件的读写操作323

16.11二进制文件的读写操作324

16.12随机访问数据文件324

16.13字符串流326

习题16327

附录AASCII码表简介330

参考文献333

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个