新書推薦:
《
学术的中心:英法德美
》
售價:HK$
87.4
《
为什么要读人类学
》
售價:HK$
77.3
《
井邑无衣冠 : 地方视野下的唐代精英与社会
》
售價:HK$
95.2
《
星地融合移动通信系统与关键技术从5G NTN到6G的卫星互联网发展
》
售價:HK$
212.6
《
妈妈,你好吗?(一封写给妈妈的“控诉”信,日本绘本奖作品)
》
售價:HK$
42.6
《
保守主义:为传统而战
》
售價:HK$
154.6
《
不同境遇的36岁:无尽与有限+人生半熟
》
售價:HK$
112.0
《
小时光 油画棒慢绘零基础教程
》
售價:HK$
88.5
|
編輯推薦: |
本书定位准确,概念清晰,深入浅出,取舍合理,以通俗易懂的语言对C 的许多难懂的概念作了透彻而通俗的说明,大大降低了初学者学习的困难,是初学者学习C 的优秀教材,荣获全国高校出版社优秀畅销书一等奖。本书可供各专业学生使用,也可作为计算机培训班的教材以及自学教材。
|
內容簡介: |
C 是近年来国内外广泛使用的现代计算机语言。它既支持基于过程的程序设计,也支持面向对象的程序设计。国内许多高校开设了“C 程序设计”课程。但是,由于C 涉及概念很多,语法比较复杂,内容十分广泛,使不少人感到学习难度较大,难以入门。 作者深入调查了大学的程序设计课程的现状和发展趋势,参阅了国内外数十种有关C 的教材,认真分析了读者在学习中的困难和认识规律,设计了读者易于学习的教材体系,出版了《C 程序设计》一书。广大师生用后反映该书定位准确,概念清晰,深入浅出,取舍合理,以通俗易懂的语言对C 的许多难懂的概念做了透彻而通俗的说明,大大降低了初学者学习的困难,是初学者学习C 的优秀教材。 根据教学实践的需要,作者对《C 程序设计》进行了多次修订,现在出版《C 程序设计(第4版)》。本书从零起点介绍程序设计和C ,包括基于过程的程序设计、基于对象的程序设计和面向对象的程序设计。学习本书不需要C语言的基础,书中基于过程的程序设计部分涵盖了C语言程序设计的基本内容,因此本书实际上是一本C/C 教材,学习本书后既可以用C语言进行程序设计,也可以用C 进行程序设计。 为了便于教学,本书有《C 程序设计 (第4版)学习辅导》和《C 程序设计实践指导》两本配套教材,旨在帮助学生通过实践掌握C 的编程方法。 本书内容全面,例题丰富,循序渐进,易于学习,即使没有教师讲授,读者也能看懂书中的大部分内容。本书可供各专业学生使用,也可作为计算机培训班的教材以及自学教材。
|
關於作者: |
谭浩强,我国著名计算机教育专家,全国高等学校计算机基础教育研究会名誉理事长。著有《C程序设计》等经典教材多部。
|
目錄:
|
第1篇基 本 知 识
第1章C 的初步知识3
1.1从C到C 3
1.2简单的C 程序5
1.3C 程序的构成和书写形式11
1.4C 程序的编写和实现13
1.5关于C 上机实践14
习题15
第2章数据的存储、表示形式和基本运算18
2.1C 的数据类型18
2.2常量20
2.2.1什么是常量20
2.2.2数值常量20
2.2.3字符常量22
2.2.4符号常量25
2.3变量26
2.3.1什么是变量26
2.3.2变量名规则26
2.3.3定义变量27
2.3.4对变量赋初值28
2.3.5常变量28
2.4C 的运算符29
2.5算术运算符与算术表达式30
2.5.1基本的算术运算符30
2.5.2算术表达式和运算符的优先级与结合性30
2.5.3表达式中各类数值型数据间的混合运算30
2.5.4自增( )和自减(--)运算符31
2.5.5强制类型转换运算符32
2.6赋值运算符和赋值表达式33
2.6.1赋值运算符33
2.6.2赋值过程中的类型转换33
2.6.3复合赋值运算符35
2.6.4赋值表达式35
2.7逗号运算符和逗号表达式36
习题37
第2篇基于过程的程序设计
第3章C 程序设计初步41
3.1基于过程的程序设计和算法41
3.1.1算法的概念41
3.1.2算法的表示42
3.2C 的程序结构和C 语句43
3.3赋值操作46
3.4C 的输入与输出46
3.4.1输入流与输出流的基本操作47
3.4.2在标准输入流与输出流中使用控制符49
3.4.3用getchar和putchar函数进行字符的输入和输出52
3.4.4用scanf和printf函数进行输入和输出53
3.5编写顺序结构的程序54
3.6关系运算和逻辑运算55
3.6.1关系运算和关系表达式56
3.6.2逻辑常量和逻辑变量57
3.6.3逻辑运算和逻辑表达式58
3.7选择结构和if语句60
3.7.1if语句的形式60
3.7.2if语句的嵌套63
3.7.3条件运算符和条件表达式64
3.7.4多分支选择结构与switch语句65
3.7.5编写选择结构的程序67
3.8循环结构和循环语句69
3.8.1用while语句构成循环70
3.8.2用do…while语句构成循环71
3.8.3用for语句构成循环72
3.8.4循环的嵌套74
3.8.5提前结束循环(break语句和continue语句)74
3.8.6编写循环结构的程序75
习题80
第4章利用函数实现指定的功能83
4.1什么是函数83
4.1.1为什么需要函数83
4.1.2函数调用举例84
4.1.3函数的分类85
4.2定义函数的一般形式85
4.2.1定义无参函数的一般形式85
4.2.2定义有参函数的一般形式86
4.3函数参数和函数的值86
4.3.1形式参数和实际参数86
4.3.2函数的返回值88
4.4函数的调用89
4.4.1函数调用的一般形式89
4.4.2函数调用的方式89
4.4.3对被调用函数的声明和函数原型90
4.5函数的嵌套调用92
4.6函数的递归调用95
4.7内置函数98
4.8函数的重载100
4.9函数模板102
4.10有默认参数的函数104
4.11局部变量和全局变量106
4.11.1局部变量106
4.11.2全局变量107
4.12关于变量的声明和定义109
4.13内部函数和外部函数110
4.13.1内部函数110
4.13.2外部函数110
4.14头文件112
4.14.1头文件的内容112
4.14.2关于C 标准库和头文件的形式113
习题113
第5章利用数组处理批量数据115
5.1为什么需要用数组115
5.2定义和引用一维数组116
5.2.1定义一维数组116
5.2.2引用一维数组的元素116
5.2.3一维数组的初始化117
5.2.4一维数组程序举例117
5.3定义和引用二维数组119
5.3.1定义二维数组120
5.3.2引用二维数组的元素121
5.3.3二维数组的初始化121
5.3.4二维数组程序举例122
5.4用数组作函数参数124
5.5字符数组128
5.5.1定义和初始化字符数组128
5.5.2字符数组的赋值与引用129
5.5.3字符串和字符串结束标志130
5.5.4字符数组的输入输出131
5.5.5使用字符串处理函数对字符串进行操作132
5.5.6字符数组应用举例135
5.6C 处理字符串的方法——字符串类与字符串变量136
5.6.1字符串变量的定义和引用136
5.6.2字符串变量的运算137
5.6.3字符串数组138
5.6.4字符串运算举例139
习题142
第6章善于使用指针与引用144
6.1什么是指针144
6.2变量与指针146
6.2.1定义指针变量146
6.2.2引用指针变量148
6.2.3用指针作函数参数150
6.3数组与指针155
6.3.1指向数组元素的指针155
6.3.2用指针变量作函数形参接收数组地址157
6.4字符串与指针160
6.5函数与指针162
*6.6void指针类型163
6.7有关指针的数据类型和指针运算的小结164
6.7.1有关指针的数据类型的小结164
6.7.2指针运算小结165
*6.8引用166
6.8.1什么是变量的引用166
6.8.2引用的简单使用168
6.8.3引用作为函数参数169
习题172
第7章用户自定义数据类型174
7.1结构体类型174
7.1.1为什么需要用结构体类型174
7.1.2结构体类型变量的定义方法及其初始化175
7.1.3引用结构体变量177
7.1.4结构体数组179
7.1.5指向结构体变量的指针181
7.1.6结构体类型数据作为函数参数184
7.1.7用new和delete运算符进行动态分配和撤销存储空间187
7.2枚举类型188
7.3用typedef声明新的类型名192
习题194
第3篇基于对象的程序设计
第8章类和对象的特性199
8.1面向对象程序设计方法概述199
8.1.1什么是面向对象的程序设计199
8.1.2面向对象程序设计的特点203
8.1.3类和对象的作用204
8.1.4面向对象的软件开发205
8.2类的声明和对象的定义206
8.2.1类和对象的关系206
8.2.2声明类类型207
8.2.3定义对象的方法209
8.3类的成员函数210
8.3.1成员函数的性质210
8.3.2在类外定义成员函数211
8.3.3内置成员函数212
8.3.4成员函数的存储方式213
8.4怎样访问对象的成员215
8.4.1通过对象名和成员运算符访问对象中的成员215
8.4.2通过指向对象的指针访问对象中的成员216
8.4.3通过对象的引用来访问对象中的成员216
8.5类的封装性和信息隐蔽217
8.5.1公用接口与私有实现的分离217
8.5.2类声明和成员函数定义的分离218
8.5.3面向对象程序设计中的几个名词220
8.6类和对象的简单应用举例220
习题228
第9章怎样使用类和对象230
9.1对象的初始化230
9.1.1需要对类对象进行初始化230
9.1.2用构造函数实现数据成员的初始化231
9.1.3带参数的构造函数233
9.1.4在构造函数中用参数初始化表对数据成员初始化235
9.1.5可以对构造函数进行重载236
9.1.6构造函数中可以使用默认参数238
9.1.7利用析构函数进行清理工作240
9.1.8调用构造函数和析构函数的顺序242
9.2对象数组244
9.3对象指针246
9.3.1指向对象的指针246
9.3.2指向对象成员的指针247
9.3.3指向当前对象的this指针250
9.4共用数据的保护251
9.4.1定义常对象251
9.4.2定义常对象成员253
9.4.3指向对象的常指针254
9.4.4指向常对象的指针变量255
9.4.5对象的常引用258
9.4.6const型数据的小结259
9.5对象的动态建立和释放259
9.6对象的赋值和复制260
9.6.1对象的赋值260
9.6.2对象的复制262
9.7不同对象间的数据共享264
9.7.1把数据定义为静态265
9.7.2用静态成员函数访问静态数据成员267
9.8允许访问私有数据的“朋友”——友元269
9.8.1可以访问私有数据的友元函数270
9.8.2友元类273
9.9类模板274
习题278
第10章运算符重载282
10.1什么是运算符重载282
10.2对运算符重载的方法284
10.3重载运算符的规则287
10.4运算符重载函数作为类成员函数和友元函数288
10.5重载双目运算符292
10.6重载单目运算符296
10.7重载流插入运算符“<<”和流提取运算符“>>”299
10.7.1重载流插入运算符“<<”299
10.7.2重载流提取运算符“>>”301
10.8有关运算符重载的归纳303
10.9不同类型数据间的转换304
10.9.1标准类型数据间的转换304
10.9.2用转换构造函数将其他类型数据转换为类对象305
10.9.3将类对象转换为其他类型数据——类型转换函数306
习题312
第4篇面向对象的程序设计
第11章类的继承315
11.1继承与派生的概念315
11.2派生类的声明方式318
11.3派生类的构成318
11.4派生类成员的访问属性320
11.4.1公用继承321
11.4.2私有继承323
11.4.3保护成员和保护继承326
11.4.4多级派生时的访问属性330
11.5派生类的构造函数和析构函数331
11.5.1简单的派生类的构造函数331
11.5.2有子对象的派生类的构造函数335
11.5.3多层派生时的构造函数338
11.5.4派生类构造函数的特殊形式340
11.5.5派生类的析构函数340
11.6多重继承341
11.6.1声明多重继承的方法341
11.6.2多重继承派生类的构造函数341
11.6.3多重继承引起的二义性问题344
11.6.4虚基类347
11.7基类与派生类的转换352
11.8继承与组合355
11.9继承在软件开发中的重要意义357
习题358
第12章C 的多态性363
12.1什么是多态性363
12.2一个典型的例子364
12.3利用虚函数实现动态多态性369
12.3.1虚函数的作用369
12.3.2静态关联与动态关联373
12.3.3在什么情况下应当声明虚函数375
12.3.4虚析构函数375
12.4纯虚函数与抽象类377
12.4.1没有函数体的纯虚函数377
12.4.2不能用来定义对象的类——抽象类377
12.4.3应用实例378
习题384
第13章输入输出流385
13.1C 的输入和输出385
13.1.1输入输出的含义385
13.1.2C 的I/O对C的发展——类型安全和可扩展性385
13.1.3C 的输入输出流386
13.2标准输出流391
13.2.1cout,cerr和clog流391
13.2.2标准类型数据的格式输出393
13.2.3用流成员函数put输出字符396
13.3标准输入流398
13.3.1cin流398
13.3.2用流成员函数get输入字符398
13.3.3istream类的其他成员函数400
13.4对数据文件的操作与文件流403
13.4.1文件的概念403
13.4.2文件流类与文件流对象404
13.4.3文件的打开与关闭405
13.4.4对ASCII文件的操作407
13.4.5对二进制文件的操作412
13.5字符串流418
习题422
第14章C 工具424
14.1对出现异常情况的处理424
14.1.1异常处理的任务424
14.1.2异常处理的方法425
14.1.3在函数声明中进行异常情况指定432
14.1.4在异常处理中处理析构函数432
14.2用命名空间避免同名冲突434
14.2.1同名冲突435
14.2.2什么是命名空间438
14.2.3使用命名空间解决名字冲突439
14.2.4使用命名空间中成员的方法441
14.2.5无名的命名空间443
14.2.6标准命名空间std444
14.3使用早期的函数库445
习题446
附录A常用字符与ASCII码对照表448
附录B运算符和结合性449
参考文献451
|
內容試閱:
|
20世纪90年代,我曾经写过一本《C程序设计》(现已更新到第5版),由清华大学出版社出版。该书出版后,社会各界反响强烈,许多人说,C语言原来是比较难学的,自从《C程序设计》出版后,C语言变得不难学了。该书已累计发行逾1600万册,创造了科技书籍的发行纪录,成为广大初学者学习C语言的主要用书。这使我深受鼓舞和鞭策,感受到广大读者的殷切期望,也更加意识到了计算机教育工作者身上的重任。
近年来,支持面向对象程序设计的C 语言迅速地在国内推广,不少高校开设了C 课程,由于C 涉及概念很多,语法比较复杂,内容十分广泛,不少人(尤其是非计算机专业的初学者)感到学习难度较大,难以入门。许多热情的读者希望我能在《C程序设计》的基础上,再写一本易于入门的《C 程序设计》教材,以帮助更多的初学者更顺利地迈进C 的大门。
在动手写《C 程序设计》这本书之前,我认真考虑过怎样设计这本书的定位和内容。学习C 的读者有两类人: 一类人是先学习C语言,然后再学习C ;另一类人是直接学习C 。前者人数比较多,有了C语言的基础,再学C 相对容易些,但要先后学习两门课程,可能面临学时不够的问题;后者只需要学习一门课程,但要直接学习面向对象程序设计,入门的难度比较大。作者考虑:C 是由C语言发展而成的,它包含了C语言的主要内容。实际上C 既支持面向过程的程序设计,也支持面向对象的程序设计。对于程序设计的初学者来说,学习面向过程的程序设计是有好处的。因此,作者决定编写一本新的C 教材,不需要C语言的基础,直接学习C 。但和其他C 教材不同,本书先介绍C 面向过程程序设计,然后再介绍C 面向对象程序设计。学习了本书,既可以用C语言进行编程,也可以用C 进行编程。因此实际上本书是一本C/C 的教材。
基于以上考虑和设计,我于2004年编写了《C 程序设计》一书,由清华大学出版社正式出版。该书出版后,受到各高校的欢迎,许多师生认为该书定位准确,概念清晰,深入浅出,取舍合理,以通俗易懂的语言对C 许多难懂的概念做了透彻而通俗的说明,大大降低了初学者学习的困难程度,是一本初学者学习C 的好教材。根据教学的实践,我于2011年和2015年对该书进行了两次修订,现在再次修订出版《C 程序设计(第4版)》,内容更加精练,讲解更加清晰,学习更加容易。
要写好和教好C 程序设计,绝不是一个纯技术问题,需要综合考虑多方面因素,作出合理的决策和安排。我调查了我国大学的程序设计课程的现状和发展趋势,了解了国内外C 的教学和使用情况,认真分析了学习者在学习过程中遇到的困难,研究了初学者的认识规律,并且参阅了国内外数十种有关C 的教材,形成了以下几点看法,并体现在本教材中。
(1) 教材必须准确定位,要求恰当,合理取舍。写书首先要弄清楚本书是为什么人写的,他们学习C 的目的和要求是什么,应当学到什么程度。
目前学习C 的读者包括以下三部分人:
① 当前需要用C 编写面向对象程序的软件开发人员。
② 将来有可能成为软件开发人员,需要熟练掌握面向对象程序设计的知识和C 语言工具,打好进一步发展基础的人员,其中包括部分计算机专业的学生。
③ 希望初步学习面向对象程序设计的知识、了解用C 语言进行面向对象程序设计方法的人员。这部分人中的大多数将来并不是专业的软件开发人员,目前并不要求熟练掌握C 语言进行程序设计。
应当说明: 本书的对象不是C 软件开发专业人员,而是大学各专业(尤其是非计算机专业)的大学生,他们目前尚无程序设计的实际经验,将来也不一定从事C 程序开发工作。他们对C 程序设计的学习是入门性、基础性的,主要是初步了解软件开发的方法,了解C 语言的特点,扩大知识面,以利于将来的工作。
众所周知,研发C 的初衷是为了解决大型软件开发中遇到的问题,提高软件的开发效率。只有参加过研制大型软件的人才能真正体会到C 的优越性,并善于利用C 的独特机制进行软件开发。
对多数大学生(尤其是非计算机专业的学生)在校期间初学C 程序设计的要求要恰当。主要是初步学习面向对象程序设计方法,能够初步利用C 编写简单的程序,为以后进一步学习和应用打下初步的基础。不可能设想,通过几十个小时的学习,能使一个没有程序设计基础的人变成一个熟练的C 开发人员。应当有一个实事求是的分析和估计。因此,本书着力于使读者对面向对象程序设计的概念有清晰的了解,对C 语言的全貌和使用方法有基本的认识,用容易理解的方法讲清楚有关的基本概念和基本方法,而不去罗列C 语法中各种烦琐的细节,否则将会使篇幅过大,而且会使读者感到枯燥无味。
如果以后从事C 程序开发工作,应当在此基础上再深入学习C 程序设计提高课程。
(2) 需要选好学习C 的切入点。对于怎样介绍C ,国内外的教材有多种模式。有的不介绍基于过程的程序设计,一开始就直接介绍类和对象,有的先介绍基于过程的程序设计,然后介绍面向对象的程序设计。我认为: 不应当把基于过程和面向对象的程序设计对立起来,任何程序设计都需要用到过程化的知识。作为一个程序设计人员,要掌握过程化的程序设计,也要掌握面向对象的程序设计。以前,人们通过C语言学习过程化程序设计,再通过C 学习面向对象的程序设计。其实,C 并不是纯粹的面向对象的语言,它是一种混合语言。学习C 既可以编写过程化的程序,也可以编写面向对象的程序。C语言相当于C 的过程化部分。
综合以上看法,我确定了本书的结构。全书分为4部分: 第1部分介绍程序设计的基本知识;第2部分介绍C 基于过程的程序设计;第3部分介绍C 基于对象的程序设计;第4部分介绍C 面向对象的程序设计。
许多教师的实践表明,以基于过程的程序设计作为切入点,从编写简单的程序开始,循序渐进,由基于过程到面向对象,逐步深入,比较符合读者的认识规律,每一步的台阶都比较小,学习难度不大,读者容易理解。
为了适应不同读者的需要,我编写了两种教材:一是《C 程序设计》,即本书,学习本书不需要C语言基础;二是对于已经学过C语言的读者,不必再学面向过程的部分,因此,将本书面向对象的部分自成系统,单独成书,出版《C 面向对象程序设计》一书。以上两书均由清华大学出版社出版,供读者选用。
(3) 设计合适的教材体系。C 程序设计涉及面向对象程序设计的理论、C 语言的语法以及算法3方面的内容,其中每一方面都包含十分丰富的内容,都可以分别单独成书。显然在一本教材中深入、详细地介绍以上3方面的知识是不可能的,必须把它们有机地结合起来,综合应用。不同的书对此采取不同的写法,侧重点有所不同,适合于不同的读者。需要在教学实践中检验,不断完善。
要进行C 程序设计,当然需要了解面向对象程序设计的有关概念,但是本课程毕竟不是一门面向对象程序设计的理论课程,在本书中不是抽象地介绍面向对象程序设计的理论,而是结合C 的使用自然而然地引出面向对象程序设计的有关概念,通过C 的编程过程理解面向对象程序设计方法。在介绍程序设计的过程中,介绍有关算法,引导读者思考怎样构造一个算法。
要用C 编程序,基本的要求是正确掌握和运用C ,由于C 语法复杂,内容又多,如果对它缺乏系统了解,将难以真正应用,编出来的程序将会错误百出,编译出错,事倍功半。本书的做法是比较全面地介绍C 的主要特点和功能,引导读者由简而繁地学会编写C 程序。有了C 编程的初步基础后,再进一步提高。这样的方法可能符合大多数学习者的情况。
决不能使读者陷于语法细节的汪洋大海之中。对于C 的众多功能和语法细节,在初学阶段没有必要全部细讲,必须有所选择,合理取舍,不应追求深而全。建议读者对于语言的细节不必深究,更不必死记,知道怎么用即可。有些细节,可以在以后编写程序遇到问题时回过头再查阅本书的介绍,这样可以有效地降低当前学习的难度。
(4) 重要的是要建立清晰的概念。由于人们过去习惯于过程化的编程方法,对面向对象的原理和实现机制理解不深,本书把面向对象程序设计划分为两个有机联系的阶段——基于对象的程序设计和面向对象的程序设计。从类和对象开始逐步深入地引出面向对象程序设计的各个概念以及用C 实现的方法。凡引入一个新的概念,都做了通俗而透彻的讲解,把来龙去脉交代清楚,讲清楚“这是什么”“为什么需要它” “怎样使用它”,并举例说明。使读者建立起清晰的概念,知其然也知其所以然,而不是盲目地照葫芦画瓢。
本书是入门性、基础性的教材,任务是帮助读者顺利入门,打好基础。以后根据需要再深入学习和实践,是不困难的。
(5) 努力化解难点,把复杂的问题简单化。为了使学习C 更容易,我在写作过程中花了很大的精力去考虑怎样使读者易于接受和理解。我一贯认为,教材编著者应当与读者换位思考,要站在读者的立场上思考问题,帮助他们排除学习中的困难,要善于把复杂的问题简单化,而不应把简单的问题复杂化,要善于化解难点,深入浅出。不要难倒读者,更不应吓跑读者。我们的任务是要使“难”变成“不难”,循序渐进地引导初学者进入C 的大门。
在学习过程中不要被一大堆高深莫测的名词术语吓唬住,有些问题看起来很深奥,其实换一个角度解释就很容易理解,甚至用一个通俗的例子就可以把问题说清楚。本书尽量用通俗易懂的方法和语言叙述复杂的概念,力求减少初学者学习C 的困难。
C 的名词术语很多,许多C 的教材的章节标题都是一些陌生的、深奥莫测的专业词汇,往往使人摸不着头脑,不知道要学的是什么,难以引发学习的兴趣和欲望。在这次修订中,作者改变了标题的写法,不是简单地列出一个专业术语,而是着重说明它是解决什么问题的。例如,原来有一节的标题是“带参的构造函数”,标题很技术,但读者不明白它是什么,为什么要学它。这次我把它改为“用带参的构造函数对不同对象进行初始化”,使读者从标题就可以知道带参的构造函数的作用。从前一节到下一节,前后连贯,承上启下,读者就会想看看究竟是怎样处理的。又如有一节的标题原来是“友元”,读者次听到这个术语,往往不知所云,这次我把标题改为“可以访问私有数据的‘朋友’——友元”,通俗易懂,具有目的性和启发性,使读者想去了解和学习。
在各章的叙述中,本书不是先给出一个新概念或新术语,再去解释它,而是先提出需要解决的问题,然后讨论用什么方法去处理它,从而引出新的概念和新的方法。使人感到自然而然,呼之欲出,不会感到突然而一头雾水。
传统的教学三部曲是:“提出概念—解释概念—举例说明”,我在多年的计算机教学实践中,采用了新的教学三部曲:“提出问题—分析和解决问题—归纳分析”。在引入每一个程序时,都按照以下步骤展开:提出问题—编写程序—运行结果—程序分析。由浅入深,逐步展开。不是先理论后实际,先抽象后具体,先一般后个别,而是从具体到抽象,从实际到理论,从个别到一般,从零散到系统。这样做,符合初学者的认知规律。
本书便于自学,即使没有老师讲解,读者也能看懂本书的大部分内容。这样,老师教学时就可以不必完全按照教材的内容和顺序详细讲解,而可以有选择地重点讲授,其余内容由学生自学。
(6) 按照教学的特点组织教材。不应当把教材写成手册,教材的任务是用读者容易理解的方法讲清基本的概念和方法,而手册的任务则是给出一个包罗万象的备查资料。读者在学习时应重点掌握基本的概念和方法,以后如果从事软件开发,在遇到具体问题时,进一步学习或查阅手册即可。
本教材所举的程序,是从教学的角度考虑的,是为了帮助读者更好地理解和应用某一方面的教学内容而专门编写的,并不一定是实际应用的程序。一个实际的C 程序需要考虑许多因素,综合各部分知识,有许多注释行,而且一般是多文件的程序,篇幅较长,往往不适合作为教学程序。教学程序对问题做了简化,尽量压缩不必要的语句,减少注释行,篇幅一般不长,力求使读者能读懂程序。在初步掌握C 编程方法后,可以逐步使程序复杂些,长一些,更接近真实程序一些。
考虑到教学的不同要求,我们提供了3个层次的程序实例:
(1) 教材各章中的例题。这是基本的,对此做了比较详细的分析介绍,读者容易理解与掌握。
(2) 教材各章所给出的习题。由于教材的篇幅有限,有些很好的例子无法在教材中列出,则将其作为习题,习题的难度比例题大一些,希望读者在学习教材的基础上自己完成。在本书的配套教材《C 程序设计(第4版)学习辅导》中提供了全部习题的参考解答。教师可以从中选择一些习题作为例题讲授。建议读者除了完成教师指定的习题外,把习题解答中的程序全部看一遍,以更好地理解C 程序。
(3) 为了提供更丰富、更贴近实际的实例,在本书的另一本配套教材《C 程序设计实践指导》中提供了一批C 应用程序。教师可以指定学生阅读其中一些程序实例,也可选择一些在课堂上讲授。使学生扩大眼界,启迪思路,丰富知识,增长能力。
关于如何使用本教材:
(1) 学习本教材可以有两个入口: 未学过C语言的读者从第1章学起;已学过C语言的读者可以从第8章学起。由于C 是从C语言发展而来的,它保留了C语言的大部分内容。本书第1~7章介绍的内容主要是C 从C语言继承来的部分,因此,学过C语言的读者可以跳过这几章,而直接学习第8章。但好在学习第8章之前,简单浏览前7章,以对C 与C的异同有所了解。尤其应看前7章中带星号()的部分,它们是C 对C语言的发展,是C语言中没有的。
无论学过C语言还是未学过C语言的读者都会感到本教材容易入门,易于学习。
(2) 本教材提供两本配套参考书:
①《C 程序设计(第4版)学习辅导》,谭浩强编著,清华大学出版社出版。除了提供教材各章中的全部习题解外,还介绍在3种典型的环境下运行C 程序的方法: Windows环境下的Visual C 2010、在线编译器和GCC。GCC是自由软件,可以在Windows环境或非Windows环境(如DOS, UNIX, Linux)下使用。此外,该书还给出上机实践任务,指导学生完成课后上机实践。
②《C 程序设计实践指导》,陈清华、朱红编著,清华大学出版社出版。书中精心选择了五十多个不同类型、不同难度的C 程序。可以供学生进一步深入学习的参考,以提高编程能力。
本书由谭浩强编著,谭亦峰高级工程师参加了部分编写工作。全国高等院校计算机基础教育研究会以及全国各高校老师几年来对本书的编写始终给予了热情的支持,清华大学出版社对本书的出版十分重视,使本书在短时间内得以出版。对一切曾经鼓励、支持和帮助过我的领导、组织、专家、朋友和读者,在此谨表示真挚的谢意。
本书肯定会有不妥甚至错误之处,诚盼专家和广大读者不吝指正。
2021年8月于清华园
|
|