1、C 程序设计(第四版) 适用专业:通用ISBN:978-7-302-22446-4出版日期:2010 年 6 月定价:29.00 元页码:390 页作者:谭浩强教授,1958 年清华大学自动控制系毕业,是我国著名的计算机教育专家,现任全国高等院校计算机基础教育研究会荣誉会长,教育部全国计算机应用技术证书考试委员会主任委员。曾获全国高校教学成果国家级奖、国家科技进步奖,原国家科委授予“全国先进科普工作者” ,北京市政府授予“有突出贡献专家”称号。 计算机世界报组织的“世纪评选”把他评为我国“20 世纪最有影响的IT 人物”10 个人之一(排在第 2 位) 。他的功绩是把千百万群众带入计算机的大门
2、。所属项目:原电子工业部优秀教材一等奖,全国高等院校计算机基础教育研究会优秀教材一等奖,全国高校出版社优秀畅销书特等奖。教材特点:C 语言是国内外广泛学习和使用的计算机语言,使用 C 语言进行程序设计是计算机工作者的一项基本功。本书的第一版于 1991 年出版,第二版于 1999 年出版,第三版于 2006 年出版。由于本书作者具有丰富的教学经验和编写教材的经验,并针对初学者的特点,精心策划、准确定位,使得本书概念清晰、例题丰富、深入浅出,受到专家和读者的一致好评。本书被普遍认为是学习 C 语言的好教材,并被全国大多数高校选用。本书累计发行逾 1100 万册,不仅创同类书的全国最高纪录,在世界
3、上也是独一无二的。本书是在广受赞誉的C 程序设计(第三版的基础上修订出版的。作者认为:任何工作都要与时俱进,不断完善,追求完美。计算机科学技术不断发展,C 语言也在发展,高校计算机教学累积了新的经验,也出现了新的问题,广大读者也提出了新的期望和建议。因此,2010 年作者对C 程序设计一书再次进行修订,出版了C 程序设计(第四版) 。第四版保持了前三版的写作风格和概念清晰、通俗易懂的特点,并在以下几个方面作了修改:(1) 按照 C 99 标准进行介绍,以适应 C 语言的发展,使程序更加规范目前大多数介绍 C 语言的教材是按照 C89 标准介绍的,而国外的同类教材多以 C 99 为蓝本。这样,在
4、阅读国外书刊或进行国际交流时会发生一些问题。本书按照 C99 的规定进行介绍,程序符合 C99 的要求。(2)采用 Visual C+ 6.0 作为编译和运行环境考虑到国内当前的情况和读者使用的方便,本书中的程序是用 Windows 环境下使用的 Visual C+ 6.0编译的,运行结果也是在 Visual C+ 6.0 环境下得到的。在分析时也以 Visual C+6.0 为环境为例进行介绍。读者使用会更加方便,容易理解。(3)加强算法,以程序设计为中心把算法与语言工具紧密结合专门用一章介绍算法的概念、算法的特点、表示算法的工具以及怎样设计算法,并通过一些简单的例子说明怎样构造一个算法,使
5、读者有一个初步的、基本的了解。在以后各章中,由浅入深地结合例题介绍各种典型的算法,并且用 C 语言实现此算法,写出程序。这样就使算法与程序紧密结合,而且通过运行程序,得到结果,便于验证算法的正确性。学习时不会觉得抽象,而会觉得算法具体有趣,看得见,摸得着。实践证明这种方法可取得很好的效果。 (4)更加通俗易懂,容易学习本书采用作者提出的“提出问题解决问题归纳分析”的新的教学三部曲,先具体后抽象,先实际后理论,先个别后一般。而不是先抽象后具体,先理论后实际,先一般后个别。实践证明这样做符合读者的认知规律,读者很容易理解。在介绍每个例题时,都采取以下的步骤:给出问题解题思路编写程序运行结果程序分析
6、有关说明,使读者很容易理解。具有高中以上文化水平的人,即使没有教师讲解,也能基本上掌握本书的内容。这样就便于自学,就有可能做到:教师少讲,提倡自学,上机实践。(5)根据当前需要重新组织教材内容根据近年来各校教学中的实际情况,作者对本书内容作了相应的取舍与调整,目的是使本书更切合需要,贴近读者,深入浅出,降低难度。调整的细节请见本书前言。为了帮助读者学习本书,作者编了一本C 程序设计(第四版)学习辅导 ,内容包括:主教材各章习题的参考解答,预处理指令,位运算,C 程序案例,如何使用 Visual C+集成环境运行程序,以及上机实践指导等。该书由清华大学出版社于 2010 年出版。对使用本教材的建
7、议:(1) 本书是作为高等学校学生学习 C 程序设计的教材,对象是没有学过计算机程序设计的大学生。本书既注重概念清晰,使读者建立起对程序设计和 C 语言的清晰理解,又注意引导学生学以致用,使学生在较短的时间内初步学会用 C 语言编写程序,具有初步的编程知识和能力,而不是仅停留在理论知识层面上。虽然如此,本书与就业上岗前的职业培训教材是有区别的,也不是供软件开发人员使用的手册和技术规范,本书带有基础的性质,主要帮助学生学习程序设计方法,学习怎样去编写程序,为以后的进一步提高与应用打好基础。如果读者准备从事软件开发工作,可以在学习本书的基础上进一步学习有关专业知识和职业要求。(2) 本书系统全面,
8、内容丰富,供基础较好的学校和学生学习。建议采取课堂讲授与自学相结合的方法。在课堂上教师主要介绍编程思路和怎样用 C 语言去实现算法,不要孤立地一一介绍语法的细节,但是要在介绍程序时重点指出关键之处,以及容易出错的地方。要求学生通过自己上机实践来理解程序设计方法,学会正确使用 C 语言工具,具有初步编程能力。语法不是靠讲和背学会的,而是在实践中掌握的。(3) 在本书第 11 章“常见错误分析”中列举了初学者在编程序时常出现的错误,这是作者在多年教学实践中收集和总结出来的,是很有价值的,希望教师和同学能充分利用这个资源。教师可以结合教学提醒学生避免出现类似的错误。学生在学习过程中可以随时翻阅,了解
9、在什么情况下容易出错。在经过一段时间的编程和上机实践后,再系统地阅读一下,回顾和总结自己易出错的问题,这样可以减少错误,提高编程效率。(4) 要善于利用习题。本书各章中的习题包括不同类型、不同程度的 142 道题目。其中有些题目的难度高于书中的例题,这样做的目的是使学生不满足于已学过的内容,而要举一反三,善于发展已有知识,提倡创新精神,培养解决问题的能力。有的专家和读者说,如果能独立地完成全部习题,他的 C 语言学习就过关了。希望教师能指定学生完成各章中有一定难度的习题。希望学生能尽量多做习题,以提高自己的水平。在C 程序设计(第四版)学习辅导一书中,提供了绝大多数习题的参考解答,列出了程序。
10、对于比较难的习题,除了给出程序外,还作了比较详细的说明。这些习题解答实际上是作者对本教材例题的补充,希望读者能充分利用它。学生即使没有时间自己做全部习题,如果能把全部习题的参考解答都看一遍,而且都能看懂,也会很有收获,能扩大眼界,丰富知识。教师也可以挑选一些习题解答在课堂上讲授,作为补充例题。(5) 预处理指令往往是 C 程序中必要的部分,尤其是用#include 指令来包含头文件和用#define 指令定义符号常量。在本教材中结合编写程序,介绍了怎样使用这两种预处理指令。在C 程序设计(第四版)学习辅导一书中,专门有一章系统地、详细地介绍各种预处理指令的使用,以供使用参考。教师可在介绍#in
11、clude 指令和#define 指令时,说明还有其他预处理指令,请同学们自己学习参考。(6) “位运算”是 C 语言区别于其他高级语言的一个重要特点。C 语言能对“位” 进行操作,使得 C具有比较接近机器的特点。考虑到非计算机专业学生的情况,在这次修订时在教材中不再包括位运算的内容。但是,在编写系统软件和数据采集、检测与控制中往往需要用到位运算。信息类专业的学生需要学习这方面的知识,因此,把位运算的内容放到C 程序设计(第四版)学习辅导一书中,计算机和其他信息类专业可以把它列入教学内容,其他读者可以选学。(7) 为了便于教学,本教材中的例题程序的规模一般都不大。在学完各章内容之后,需要综合应
12、用已学过的知识,编写一些应用程序,以提高编程能力。在C 程序设计(第四版)学习辅导一书中专门有一章“C 程序案例” ,这些案例很有实用价值,对于读者在学习本书后提高编程能力会有很大的帮助。要善于利用这些资源,教师可以指定学生阅读这些程序。(8) 由于学时少,只靠几十小时的教学就能使学生真正掌握 C 程序设计是困难的,如果有条件,最好在学完本教材后安排一次课程设计,要求学生独立完成一个有一定规模的程序设计,这是一个重要的教学实践环节,能大大提高学生的独立编程能力。(9) 有的学校由于分配给本课程的学时有限,可能不能讲完教材中的全部内容。建议不要把本书后面几章舍弃,应当让学生基本学完第 110 章
13、,使学生对 C 语言有全面的了解。例如,文件的概念是很重要的,宁可作简单的介绍,也不要放弃。前 5 章的进度可以快些,有些程序可指定学生自学。配套资源: 1 C 程序设计(第四版)学习辅导 。ISBN:9787302226727,2010 年 6 月出版。2向选用本教材的教师免费提供讲课的电子演示文稿,可在清华大学出版社网站下载。目录:第 1 章程序设计和 C 语言 11.1 什么是计算机程序 11.2 什么是计算机语言 11.3C 语言的发展及其特点 31.4 最简单的 C 语言程序 51.4.1 最简单的 C 语言程序举例 61.4.2C 语言程序的结构 101.5 运行 C 程序的步骤与
14、方法 121.6 程序设计的任务 14习题 15第 2 章算法程序的灵魂 162.1 什么是算法 162.2 简单的算法举例 172.3 算法的特性 212.4 怎样表示一个算法 222.4.1 用自然语言表示算法 222.4.2 用流程图表示算法 222.4.3 三种基本结构和改进的流程图 262.4.4 用 NS 流程图表示算法 282.4.5 用伪代码表示算法 312.4.6 用计算机语言表示算法 322.5 结构化程序设计方法 34习题 36第章最简单的 C 程序设计顺序程序设计 373.1 顺序程序设计举例 373.2 数据的表现形式及其运算 393.2.1 常量和变量 393.2.
15、2 数据类型 423.2.3 整型数据 443.2.4 字符型数据 473.2.5 浮点型数据 493.2.6 怎样确定常量的类型 513.2.7 运算符和表达式 523.3C 语句 573.3.1C 语句的作用和分类 573.3.2 最基本的语句赋值语句 593.4 数据的输入输出 653.4.1 输入输出举例 653.4.2 有关数据输入输出的概念 673.4.3 用 printf 函数输出数据 683.4.4 用 scanf 函数输入数据 753.4.5 字符数据的输入输出 78习题 82第 4 章选择结构程序设计 854.1 选择结构和条件判断 854.2 用 if 语句实现选择结构
16、874.2.1 用 if 语句处理选择结构举例 874.2.2if 语句的一般形式 894.3 关系运算符和关系表达式 914.3.1 关系运算符及其优先次序 914.3.2 关系表达式 924.4 逻辑运算符和逻辑表达式 924.4.1 逻辑运算符及其优先次序 934.4.2 逻辑表达式 944.4.3 逻辑型变量 964.5 条件运算符和条件表达式 974.6 选择结构的嵌套 994.7 用 switch 语句实现多分支选择结构 1024.8 选择结构程序综合举例 105习题 111第 5 章循环结构程序设计 1145.1 为什么需要循环控制 1145.2 用 while 语句实现循环 1
17、155.3 用 dowhile 语句实现循环 1175.4 用 for 语句实现循环 1205.5 循环的嵌套 1245.6 几种循环的比较 1255.7 改变循环执行的状态 1255.7.1 用 break 语句提前终止循环 1265.7.2 用 continue 语句提前结束本次循环 1275.7.3break 语句和 continue 语句的区别 1285.8 循环程序举例 131习题 140第 6 章利用数组处理批量数据 1426.1 怎样定义和引用一维数组 1426.1.1 怎样定义一维数组 1436.1.2 怎样引用一维数组元素 1446.1.3 一维数组的初始化 1456.1.4
18、 一维数组程序举例 1466.2 怎样定义和引用二维数组 1486.2.1 怎样定义二维数组 1496.2.2 怎样引用二维数组的元素 1506.2.3 二维数组的初始化 1516.2.4 二维数组程序举例 1526.3 字符数组 1546.3.1 怎样定义字符数组 1546.3.2 字符数组的初始化 1556.3.3 怎样引用字符数组中的元素 1556.3.4 字符串和字符串结束标志 1566.3.5 字符数组的输入输出 1596.3.6 使用字符串处理函数 1616.3.7 字符数组应用举例 165习题 168第 7 章用函数实现模块化程序设计 1707.1 为什么要用函数 1707.2
19、怎样定义函数 1727.2.1 为什么要定义函数 1727.2.2 定义函数的方法 1737.3 调用函数 1747.3.1 函数调用的形式 1747.3.2 函数调用时的数据传递 1757.3.3 函数调用的过程 1777.3.4 函数的返回值 1787.4 对被调用函数的声明和函数原型 1797.5 函数的嵌套调用 1827.6 函数的递归调用 1847.7 数组作为函数参数 1927.7.1 数组元素作函数实参 1937.7.2 数组名作函数参数 1947.7.3 多维数组名作函数参数 1977.8 局部变量和全局变量 1997.8.1 局部变量 1997.8.2 全局变量 2007.9
20、 变量的存储方式和生存期 2047.9.1 动态存储方式与静态存储方式 2047.9.2 局部变量的存储类别 2057.9.3 全局变量的存储类别 2087.9.4 存储类别小结 2127.10 关于变量的声明和定义 2147.11 内部函数和外部函数 2157.11.1 内部函数 2157.11.2 外部函数 215习题 218第 8 章善于利用指针 2208.1 指针是什么 2208.2 指针变量 2228.2.1 使用指针变量的例子 2228.2.2 怎样定义指针变量 2238.2.3 怎样引用指针变量 2248.2.4 指针变量作为函数参数 2268.3 通过指针引用数组 2308.3
21、.1 数组元素的指针 2308.3.2 在引用数组元素时指针的运算 2318.3.3 通过指针引用数组元素 2338.3.4 用数组名作函数参数 2378.3.5 通过指针引用多维数组 2458.4 通过指针引用字符串 2558.4.1 字符串的引用方式 2558.4.2 字符指针作函数参数 2598.4.3 使用字符指针变量和字符数组的比较 2638.5 指向函数的指针 2668.5.1 什么是函数指针 2668.5.2 用函数指针变量调用函数 2668.5.3 怎样定义和使用指向函数的指针变量 2688.5.4 用指向函数的指针作函数参数 2708.6 返回指针值的函数 2748.7 指针
22、数组和多重指针 2778.7.1 什么是指针数组 2778.7.2 指向指针数据的指针 2808.7.3 指针数组作 main 函数的形参 2828.8 动态内存分配与指向它的指针变量 2858.8.1 什么是内存的动态分配 2858.8.2 怎样建立内存的动态分配 2858.8.3void 指针类型 2878.9 有关指针的小结 288习题 291第 9 章用户自己建立数据类型 2939.1 定义和使用结构体变量 2939.1.1 自己建立结构体类型 2939.1.2 定义结构体类型变量 2959.1.3 结构体变量的初始化和引用 2979.2 使用结构体数组 3009.2.1 定义结构体数
23、组 3009.2.2 结构体数组的应用举例 3019.3 结构体指针 3039.3.1 指向结构体变量的指针 3039.3.2 指向结构体数组的指针 3049.3.3 用结构体变量和结构体变量的指针作函数参数 3069.4 用指针处理链表 3099.4.1 什么是链表 3099.4.2 建立简单的静态链表 3109.4.3 建立动态链表 3119.4.4 输出链表 3159.5 共用体类型 3179.5.1 什么是共用体类型 3179.5.2 引用共用体变量的方式 3189.5.3 共用体类型数据的特点 3199.6 使用枚举类型 3239.7 用 typedef 声明新类型名 326习题 3
24、30第 10 章对文件的输入输出 33110.1C 文件的有关基本知识 33110.1.1 什么是文件 33110.1.2 文件名 33210.1.3 文件的分类 33210.1.4 文件缓冲区 33310.1.5 文件类型指针 33310.2 打开与关闭文件 33510.2.1 用 fopen 函数打开数据文件 33510.2.2 用 fclose 函数关闭数据文件 33710.3 顺序读写数据文件 33810.3.1 怎样向文件读写字符 33810.3.2 怎样向文件读写一个字符串 34110.3.3 用格式化的方式读写文件 34410.3.4 用二进制方式向文件读写一组数据 34510.
25、4 随机读写数据文件 34910.4.1 文件位置标记及其定位 34910.4.2 随机读写 35210.5 文件读写的出错检测 353习题 354 第 11 章常见错误分析 355 附录 370 附录 A 在 Visual C+ 6.0 环境下运行 C 程序的方法 370附录 B 常用字符与 ASCII 代码对照表 377附录 CC 语言中的关键字 378附录 D 运算符和结合性 378附录 EC 语言常用语法提要 380附录 FC 库函数 384参考文献 390第 4 章选择结构程序设计 854.1 选择结构和条件判断 854.2 用 if 语句实现选择结构 874.2.1 用 if 语句
26、处理选择结构举例 874.2.2if 语句的一般形式 894.3 关系运算符和关系表达式 914.3.1 关系运算符及其优先次序 914.3.2 关系表达式 924.4 逻辑运算符和逻辑表达式 924.4.1 逻辑运算符及其优先次序 934.4.2 逻辑表达式 944.4.3 逻辑型变量 964.5 条件运算符和条件表达式 974.6 选择结构的嵌套 1004.7 用 switch 语句实现多分支选择结构 1024.8 选择结构程序综合举例 106习题 112第 5 章循环结构程序设计 1155.1 为什么需要循环控制 1155.2 用 while 语句实现循环 1165.3 用 dowhil
27、e 语句实现循环 1185.4 用 for 语句实现循环 1215.5 循环的嵌套 1255.6 几种循环的比较 1265.7 改变循环执行的状态 1265.7.1 用 break 语句提前终止循环 1275.7.2 用 continue 语句提前结束本次循环 1285.7.3break 语句和 continue 语句的区别 1295.8 循环程序举例 132习题 141第 6 章利用数组处理批量数据 1436.1 怎样定义和引用一维数组 1436.1.1 怎样定义一维数组 1446.1.2 怎样引用一维数组元素 1456.1.3 一维数组的初始化 1466.1.4 一维数组程序举例 1476
28、.2 怎样定义和引用二维数组 1496.2.1 怎样定义二维数组 1506.2.2 怎样引用二维数组的元素 1516.2.3 二维数组的初始化 1526.2.4 二维数组程序举例 1536.3 字符数组 1556.3.1 怎样定义字符数组 1556.3.2 字符数组的初始化 1566.3.3 怎样引用字符数组中的元素 1566.3.4 字符串和字符串结束标志 1576.3.5 字符数组的输入输出 1606.3.6 使用字符串处理函数 1626.3.7 字符数组应用举例 166习题 169第 7 章用函数实现模块化程序设计 1717.1 为什么要用函数 1717.2 怎样定义函数 1737.2.
29、1 为什么要定义函数 1737.2.2 定义函数的方法 1747.3 调用函数 1757.3.1 函数调用的形式 1757.3.2 函数调用时的数据传递 1767.3.3 函数调用的过程 1787.3.4 函数的返回值 1797.4 对被调用函数的声明和函数原型 1817.5 函数的嵌套调用 1837.6 函数的递归调用 1857.7 数组作为函数参数 1937.7.1 数组元素作函数实参 1937.7.2 数组名作函数参数 1957.7.3 多维数组名作函数参数 1987.8 局部变量和全局变量 2007.8.1 局部变量 2007.8.2 全局变量 2017.9 变量的存储方式和生存期 2
30、057.9.1 动态存储方式与静态存储方式 2057.9.2 局部变量的存储类别 2067.9.3 全局变量的存储类别 2097.9.4 存储类别小结 2137.10 关于变量的声明和定义 2157.11 内部函数和外部函数 2167.11.1 内部函数 2167.11.2 外部函数 216习题 219第 8 章善于利用指针 2218.1 指针是什么 2218.2 指针变量 2238.2.1 使用指针变量的例子 2238.2.2 怎样定义指针变量 2248.2.3 怎样引用指针变量 2258.2.4 指针变量作为函数参数 2278.3 通过指针引用数组 2328.3.1 数组元素的指针 232
31、8.3.2 在引用数组元素时指针的运算 2338.3.3 通过指针引用数组元素 2348.3.4 用数组名作函数参数 2398.3.5 通过指针引用多维数组 2478.4 通过指针引用字符串 2578.4.1 字符串的引用方式 2578.4.2 字符指针作函数参数 2618.4.3 使用字符指针变量和字符数组的比较 2658.5 指向函数的指针 2688.5.1 什么是函数指针 2688.5.2 用函数指针变量调用函数 2688.5.3 怎样定义和使用指向函数的指针变量 2708.5.4 用指向函数的指针作函数参数 2728.6 返回指针值的函数 2768.7 指针数组和多重指针 2798.7
32、.1 什么是指针数组 2798.7.2 指向指针数据的指针 2828.7.3 指针数组作 main 函数的形参 2848.8 动态内存分配与指向它的指针变量 2878.8.1 什么是内存的动态分配 2878.8.2 怎样建立内存的动态分配 2878.8.3void 指针类型 2898.9 有关指针的小结 290习题 293第 9 章用户自己建立数据类型 2959.1 定义和使用结构体变量 2959.1.1 自己建立结构体类型 2959.1.2 定义结构体类型变量 2979.1.3 结构体变量的初始化和引用 2999.2 使用结构体数组 3029.2.1 定义结构体数组 3029.2.2 结构体
33、数组的应用举例 3049.3 结构体指针 3059.3.1 指向结构体变量的指针 3059.3.2 指向结构体数组的指针 3069.3.3 用结构体变量和结构体变量的指针作函数参数 3089.4 用指针处理链表 3119.4.1 什么是链表 3119.4.2 建立简单的静态链表 3129.4.3 建立动态链表 3139.4.4 输出链表 3179.5 共用体类型 3199.5.1 什么是共用体类型 3199.5.2 引用共用体变量的方式 3209.5.3 共用体类型数据的特点 3219.6 使用枚举类型 3259.7 用 typedef 声明新类型名 328习题 332第 10 章对文件的输入
34、输出 33310.1C 文件的有关基本知识 33310.1.1 什么是文件 33310.1.2 文件名 33410.1.3 文件的分类 33410.1.4 文件缓冲区 33510.1.5 文件类型指针 33510.2 打开与关闭文件 33710.2.1 用 fopen 函数打开数据文件 33710.2.2 用 fclose 函数关闭数据文件 33910.3 顺序读写数据文件 34010.3.1 怎样向文件读写字符 34010.3.2 怎样向文件读写一个字符串 34310.3.3 用格式化的方式读写文件 34610.3.4 用二进制方式向文件读写一组数据 34710.4 随机读写数据文件 351
35、10.4.1 文件位置标记及其定位 35110.4.2 随机读写 35410.5 文件读写的出错检测 355习题 356第 11 章常见错误分析 374附录 390 附录 A 在 Visual C+ 6.0 环境下运行 C 程序的方法 390附录 CC 语言中的关键字 398附录 D 运算符和结合性 398附录 EC 语言常用语法提要 400附录 FC 库函数 404参考文献 410出版界的奇迹 记谭浩强教授 C 程序设计(第四版) 你听说过一本科技书发行量超过 1000 万册吗?无论在中国还是外国,这大概都会被认为是可望不可及的奇迹。然而这个奇迹被谭浩强教授著、清华大学出版社出版的C 程序设
36、计一书实现了。2008年,在美国举行的一次信息技术教育国际会议上,当各国专家知道谭浩强教授编著的科技书籍有两种(BASIC 语言 和C 程序设计) 的发行量双双超过 1000 万册时,无不感到震惊,热烈鼓掌,争相与谭浩强教授握手并合影,这是我们中国人的骄傲。谁说中国人比外国人差,我们做到了外国人想都不敢想的事迹。C 程序设计自 1991 年出版后,很快占领了国内市场,先后出版了三版,重印 160 余次,目前已累计发行 1100 多万册,平均每年发行 60 多万册,一本书 20 年经久不衰,这是出版界的奇迹。北京三大图书市场之一的中关村图书大厦 2008 年底根据 5 年来畅销图书的销售排名,评
37、出 10 种图书获 “最具影响力图书奖” ,获奖图书中只有C 程序设计 (第三版)一书是自然科学类图书,其他9 种全是社科类图书。多年来C 程序设计始终位于北京图书大厦“畅销书排行榜”的前列。全国出版的 C 语言教材超过 1000 种,唯有C 程序设计一枝独秀,销量始终独占鳌头。为什么会有这样的奇迹?谭浩强教授谦虚地说:因为中国人多,时势造英雄。可是,机遇对每个人都是平等的,为什么在同一个时代、同一个环境下,谭浩强教授做到了别人做不到的事情。这不是偶然的,从谭浩强教授的计算机教育理念和创作思想中可以找到答案。谭浩强教授多年来坚持计算机基础教育应当面向应用,注重能力培养,主张学以致用。在教学中提
38、出“提出问题解决问题归纳分析”的新的教学三部曲,先具体后抽象,先实际后理论,先个别后一般。而不是先抽象后具体,先理论后实际,先一般后个别。在工作中,坚持不唯书、不唯外、不唯上、只唯实,始终从实际出发,面向实际,面向群众,注重研究对象特点,有针对性地进行工作。在编写教材中,不故弄玄虚,不把简单的问题复杂化,而是把复杂的问题简单化,善于用通俗易懂的方法和语言说明复杂的概念。许多看似复杂抽象难懂的概念,在谭浩强教授笔下变成生动活泼的叙述和比喻。许多问题看似复杂难懂,一旦捅破了窗户纸,也就迎刃而解。谭浩强教授多年来形成自己独特的写作风格,看他写的书感到亲切好懂,像一位师长在和你面对面地交流,自然而然就
39、理解和接受了书中的内容,所以谭浩强教授能赢得读者的心。这种风格是在多年实践中养成的。这是他能写出优秀教材的秘密,也是一般人难以企及的优势所在。看看读者对C 程序设计的反映: C 语言原来是比较难学的,自从C 程序设计出版后, C 语言变得不难学了。 是国内最权威、最经典的 C 教材,在别的教材中没有解决的问题,看C 程序设计基本上都能解决。 介绍非常详尽,有许多作者的心得和实践经验,特别是经常指出初学者容易出现的错误,切中要害,非常有针对性。 这本书值得珍藏,在参加工作后遇到问题,再查此书都能找到答案。 我校老师没有用谭浩强老师的教材,而用老师自己编的教材,学生看不懂,后来有同学买了一本谭浩强
40、老师的C 程序设计 ,一看就明白了,结果每人都去买了一本,成了学生自己的“指定教材” 。 对基本概念讲解非常透彻, “指针” 一章尤为精彩。许多教材对此都讲不明白,一看谭浩强教授的教材,不禁恍然大悟,感觉既深入又通俗。写教材就应像谭浩强教授这样处处为读者着想。 多年来已习惯用谭浩强教授的教材了,特别好教好学,与其他教材相比,有很明显的优势。 清华大学计算机系主任要讲授“C 程序设计”课,需要选教材,找了十几本国内的教材,最后选中谭浩强教授的C 程序设计 。他说,我选教材不看是谁写的,而只看内容是否好。谭浩强教授的书确实写得好。 许多出国留学生写信回国,专门托人指定买谭浩强教授的C 程序设计 。在国外上课一般要求自学, C 程序设计内容详尽,程度较高,而且一看就懂,节省了宝贵的时间。