图书前言

       程序设计是计算机工作者的一项基本功。C语言是被国内外计算机用户广泛学习和使用的一种计算机语言,受到广大计算机用户的喜爱。我国几乎所有的理工科大学都开设了C语言程序设计课程。

许多学校积累了多年的教学经验,全国各出版社出版的C语言教材琳琅满目,令人目不暇接。当前的任务是研究怎样推进C语言程序设计课程的改革,提高教学质量,使教学取得更好的效果。

为了使C语言程序设计课程教学取得更好的效果,需要解决以下几个问题:

(1) 为什么要学习程序设计?计算机的本质是“程序的机器”,程序和指令的思想是计算机系统中最基本的概念。学习程序设计能使我们了解计算机是怎样工作的,更好地理解和应用计算机;能使我们懂得怎样让计算机按照人们的意图进行工作;学习使用计算机处理问题的方法,能培养我们分析问题和解决问题的能力以及具有编写程序的初步能力。非计算机专业的学生学习程序设计,可以了解软件的特点和生产过程,能与程序开发人员更好地沟通,有利于共同合作进行应用软件的开发工作。因此,大学生(尤其是理工类学生)学习程序设计是很必要的。

归纳起来,学习程序设计有两个目的: ①学习用计算机解决问题的思路和方法,即算法; ②了解怎样用计算机去实现算法,即怎样才能实现用计算机解题。

(2) 要从实际出发,准确定位。人们学习C语言程序设计有着不同的目的和作用: 有的是计算机专业的,有的是非计算机专业的;有的是本科,有的是高职;有的以后是计算机专业人员,有的是计算机应用人员;有的要求精通,有的要求粗通,有的则只求一般了解。不同的人有不同的要求。因此必须准确定位,从具体实际出发,对不同对象提出不同的要求,采取不同的方案,编写出不同的教材。切不可不问对象一刀切,统一要求,这样反而达不到应有效果。

(3) 大学生学习C语言程序设计,带有基础学习的性质。非计算机专业的学生,其中大多数人将来并不一定会成为专业的软件开发人员,不一定有许多机会用C语言编写实用程序。但是在大学期间学习程序设计仍然是必要的,这就需要制定恰当的标准。在有限的学时内,只能学习基本的内容,为今后进一步的学习和使用打下必要的基础。如果有少数人将来需要熟练地编程,甚至成为专业的软件开发人员,则应当在学习本课程的基础上继续进行更深入的学习,例如至少应当进行一个综合作业,完成一个具有一定规模的应用软件的实践项目。

(4) 正确处理好语言和算法的关系。如前所述,学习程序设计课程的目的,一是掌握设计程序的思路,二是学会用计算机语言编写程序。应当指出:算法是程序的核心和灵魂,语言是工具。接受一个任务后,首先要考虑解题的思路,即设计算法,然后考虑怎样编写成程序。因此,算法和语法二者都很重要,都要重视。不掌握算法就不可能解决任务,不掌握语法也就谈不上编程,即使编出来,也会错误百出。不要孤立地学习算法,更不能孤立地学习语法。正确的做法是把语言和算法紧密结合起来,从最简单的程序入手,这时的算法和语法都是简单的,引导学生很自然地接触C程序设计,使他们学会初步编写简单的C程序。然后随着算法的逐步深入,语法也逐步深入,二者很自然地结合在一起。始终把算法与语法紧密捆绑在一起,同步地走向深入。读者可以通过大量的例题,学习到怎样设计一个算法、构造一个程序,并将它付诸实现。

要进行程序设计需要学习以下几方面的知识:①算法,即解题思路; ②程序设计语言及其使用环境; ③程序设计方法(如结构化程序设计方法、面向对象程序设计方法). 

作者在1991年编著了《C程序设计》一书,由清华大学出版社出版。各校师生普遍认为该书内容系统,讲解详尽,包含了许多其他教材中没有的内容,尤其是针对编程实践中容易出现的问题作了提醒和分析,是学习C语言程序设计的理想教材。2001年,针对应用型大学和高职院校的特点,作者在《C程序设计》一书的基础上编写出版了《C语言程序设计》一书,适当压缩了内容,降低了起点。以上两本书出版后受到了广大读者的热烈欢迎,至今已累计发行了1000多万册。

经过几年的教学实践,作者决定对《C语言程序设计》一书进行修订,在修订时考虑了以下一些因素:①当前大多数学校是把“C语言程序设计”作为第一语言来学习的(而在多年前,许多学生是先学了BASIC语言后再学C语言的),由于学生没有任何程序设计知识的基础,因此起点必须再降低些; ②各校情况差别很大,如专业方向、学生基础、教学条件、师资状况都很不相同,在全国范围内不能统一要求,不能用一本教材去满足所有学校的要求,必须有不同内容、不同程度、不同写法的教材,以满足不同类型学校的需求;③由于教学总学时压缩,许多学校分配给“C语言程序设计”的学时往往并不充分,难以学习更多的内容。

在本次修订中按照以下原则进行修订:

(1) 由于作者所著的《C程序设计》和《C语言程序设计》内容全面,叙述清晰,通俗易懂,在教学实践中取得了很好的效果,因此在修订时尽量保持原有的优点,基本上保留原书的体系,注意概念准确,讲解透彻,使读者对C语言和程序设计有全面、完整的理解。

(2) 考虑到不同对象的差别,把教学内容分为基本要求和提高要求两个部分。在每一章中把一部分较深入的内容作为“提高部分”,单独列出,放在各章的最后,供选学。如果学时不够,可以只学基本部分。通过学习基本部分,能初步掌握C程序设计的基本内容,写出比较简单的程序。如果希望学习更深入一些,掌握更多的编程思路和技巧,可以选学各章的“提高部分”。也可以由教师讲授基本部分,学生自学“提高部分”,以培养学生的自学能力。

(3) 本书较前一版本更加通俗易懂,易于学习,按照作者提出的教学三部曲组织教学,即:“提出问题-解决问题-归纳分析”。实践证明这对于计算机基础教育是十分有效的。在介绍每一个程序时,一般包括以下几个部分:提出问题、解题思路、编写程序、运行结果、程序说明、深入思考等。这可以使读者思路清晰、容易理解。

(4) 在每一章最后增加一节“本章小结”,归纳本章的要点,提纲挈领,画龙点睛,以加深印象,增强条理性。

经教育部批准,该书已被作为“普通高等教育‘十一五’国家级规划教材”,向全国各高校推荐。

为了适应不同读者的需求,作者已编写了3种不同程度的C语言教材,组成了一个C语言的系列教材供选用:

(1) 《C程序设计(第3版)》,内容详尽,讲解透彻,程度较深,适合基础较好、学时较多、要求较高的学校使用。

(2) 《C程序设计教程》,是《C程序设计(第3版)》的简缩本,在《C程序设计(第3版)》基础上删去一些不常用的部分和与高等数学有关的内容,使读者学习起来更加容易。适合于学时较少的教学。

(3) 本书,内容更加简练,写法上更加通俗易懂,适合于应用型大学非计算机专业使用,基础较好的高职高专也可以使用。

以上3种教材已由清华大学出版社正式出版。每种教材都配有学习辅导书。

应当怎样学习C语言程序设计呢?作者给出以下建议: 

(1) 在学习开始时不要在语法细节上死记死抠。请记住,重要的是学会编程序,而不是背语法。一开始就要学会看懂程序,编写简单的程序,然后逐步深入。有一些语法细节是需要通过较长期的实践才能熟练地掌握的。初学时,切忌过早地滥用C语言的某些容易引起错误的细节(如不适当地使用++和--的副作用). 

(2) 不能设想今后一辈子只使用在学校里学过的某一种语言。但是无论用哪一种语言进行程序设计,其基本思路和方法都是一样的。从这个意义上说,在大学里学哪一种语言,并不是一个很重要的原则问题。学会了一种计算机语言,可以很快地学会另一种语言。因此,在学习时一定要学活用活,举一反三,掌握规律,在以后需要时能很快地掌握其他的语言。

(3) 在学校学习阶段,主要是学习程序设计的方法,进行程序设计的基本训练,打下进一步学习的基础。对多数学生来说,不可能通过几十个小时的学习,由一个门外汉变成编程高手,编写出大型而实用的程序。学习程序设计课程时,应该把精力放在最基本、最常用的内容上,学好基本功。如果对学生有较高的程序设计要求,应当在学习本课程后,安排一次集中的课程设计环节,按照实际工作的要求,完成有一定规模的程序设计。

(4) 程序设计是一门实践性很强的课程,既要掌握概念,又要动手编程,还要上机调试运行,希望读者一定要重视实践环节,包括编程和上机。既会编写程序,又会调试程序。衡量这门课学习的好坏,不是看你“知不知道”,而是“会不会干”.  考核的方法不能主要用是非题和选择题,而应当把重点放在编写程序和调试程序上。

(5) 使用哪一种编译系统并不是原则问题,重要的是编程能力的培养。程序编好以后,用哪一种编译系统进行编译都可以。读者不应该只会用某一种编译环境,应当了解、接触和使用不同的编译环境。不同的编译系统,其功能和使用方法有些不同,编译时给出的信息也不完全相同,要注意参阅使用说明书,特别要在使用中积累经验,举一反三。

为了帮助读者学习本书,作者还编写了《C语言程序设计(第2版)学习辅导》,提供本书中各章习题的参考答案以及上机实习指导。该书也将随后出版。

本书肯定会有不少缺点和不足,热切期望得到专家和读者的批评指正。 

谭浩强2008年5月1日于清华园