![]() ![]() |
中国高等院校计算机基础教育课程体系规划教材:C程序设计(第4版)
从20世纪70年代末、80年代初开始,我国的高等院校开始面向各个专业的全体大学生开展计算机教育。面向非计算机专业学生的计算机基础教育,牵涉的专业面广、人数众多,影响深远,它将直接影响我国各行各业、各个领域中计算机应用的发展水平。这是一项意义重大而且大有可为的工作,应该引起各方面的充分重视。
20世纪90年代以来,C语言迅速在全世界普及推广。无论在中国还是在世界各国,“C语言程序设计”始终是高等学校的一门基本的计算机课程。C语言程序设计在计算机教育和计算机应用中发挥着重要的作用。
作者于1991年编著了《C程序设计》一书,由清华大学出版社出版。该书针对初学者的特点和认知规律,精选内容,分散难点,降低台阶,例题丰富,深入浅出。出版后受到广大读者的热烈欢迎。许多读者说“C语言原来是比较难学的,但自从《C程序设计》出版后,C语言变得不难学了”。根据C语言的发展和教学的实践,作者先后对该书进行了两次大的修订,先后重印160多次,累计发行超过1100万册,平均每年印刷60万册,成为我国广大初学者学习C语言程序设计的主流用书。国内许多介绍C语言的书籍多以本书为蓝本。本书曾荣获原电子工业部优秀教材一等奖、全国高等院校计算机基础教育研究会优秀教材一等奖、全国高校出版社优秀畅销书特等奖。这是对我的莫大鼓励和鞭策。 在此书再版之际,作者想对学习程序设计问题提出以下几点看法。 1. 为什么要学习程序设计 大学生不能满足于只会用办公软件,应当有更高的要求,对于理工科的学生尤其如此。 计算机的本质是“程序的机器”,程序和指令的思想是计算机系统中最基本的概念。程序设计是软件开发人员的基本功。只有懂得程序设计,才能进一步懂得计算机,真正了解计算机是怎样工作的。通过学习程序设计,学会进一步了解计算机的工作原理,更好地理解和应用计算机;掌握用计算机处理问题的方法;培养分析问题和解决问题的能力;具有编制程序的初步能力。即使将来不是计算机专业人员,由于学过程序设计,理解软件生产的特点和生产过程,就能与程序开发人员更好地沟通与合作,开展本领域中的计算机应用,开发与本领域有关的应用程序。 因此,无论计算机专业学生还是非计算机专业学生,都应当学习程序设计知识,并且把它作为进一步学习与应用计算机的基础。 2. 为什么选择C语言 进行程序设计,必须用一种计算机语言作为工具,否则只是纸上谈兵。可供选择的语言很多,各有特点和应用领域。C语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好,既具有高级语言的优点,又具有低级语言的许多特点,既适于编写系统软件,又能方便地用来编写应用软件。 有人以为C++语言出现后,C语言过时了,淘汰了,这是一种误解。C++是为处理较大规模的程序开发而研制的大型语言,它比C语言复杂得多,难学得多。事实上,将来并不是每个人都需要用C++编制大型程序。C语言是更为基本的。美国一位资深软件专家写了一篇文章,题目是“对计算机系学生的建议”,是经验之谈,可供参考。他说“大学生毕业前要学好C语言,C语言是当前程序员共同的语言。它使程序员互相沟通,比你在大学学到的‘现代语言’(比如ML语言、Java语言、Python语言或者正在教授的流行语言)都更接近机器”。他指出: “不管你懂得多少延续、闭包、异常处理,只要你不能解释为什么while(s++=t++)的作用是复制字符串,那你就是在盲目无知的情况下编程,就像一个医生不懂最基本的解剖学就在开处方”。 C语言更适合于解决某些小型程序的编程。C语言作为传统的面向过程的程序设计语言,在编写底层的设备驱动程序和内嵌应用程序时,往往是更好的选择。 现在大多数高校把C语言作为第一门计算机语言进行程序设计教学,这是合适的,有了C的基础,在需要时进一步学习C++,也是很容易过渡的。 3. 怎样组织程序设计的教学?怎样处理算法和语言的关系 要进行程序设计,要解决两个问题: (1) 要学习和掌握解决问题的思路和方法,即算法; (2) 学习怎样实现算法,即用计算机语言编写程序,达到用计算机解题的目的。 因此,课程的内容应当主要包括两个方面: 算法和语言。算法是灵魂,不掌握算法就是无米之炊。语言是工具,不掌握语言,编程就成了空中楼阁。二者都是必要的,缺一不可。作者的做法是: 以程序设计为中心,把二者紧密结合起来,既不能孤立地抽象地研究算法,更不能孤立地枯燥地学习语法。 算法是重要的,但本课程不是专门研究算法与逻辑的理论课程,不可能系统全面地介绍算法;也不是脱离语言环境研究算法,而是在学习编程的过程中,介绍有关的典型算法,引导学生思考怎样构造一个算法。编写程序的过程就是设计算法的过程。 语言工具也是重要的,掌握基本的语法规则是编程的基础,如果不掌握必要的语法规则,连最简单的程序也编不出来,或者编出来的程序错误百出,无法运行。但是掌握C语言绝不能靠死学死记,就像熟读英语的语法不一定会写英文文章,靠字典是学不好外语的。如果你去看C语言标准文本,可能感觉如看“天书”一样,恐怕只有计算机专家才能看懂。绝不能把程序设计课程变成枯燥地介绍语法的课程,学习语法要服务于编程。 在30年前我们编写《BASIC语言》时就已经遇到了这个问题,我们坚决摒弃了孤立地介绍语法的做法,而是以程序设计为中心,把算法与语言紧密结合起来。不是根据语言规则的分类和顺序作为教学和教材的章节和顺序,而是从应用的角度切入,以编程为目的,以编程为主线,从初学者的认知规律出发,由浅入深,由易到难,构造了教材和教学的体系。一开始就让学生看懂简单的程序,编写简单的程序,然后逐步深入。语法规则不是通过孤立的学习而是在学习编程的过程中学到的。随着编程难度的逐步提高,算法和语法的学习同步趋于深入。学生在富有创意、引人入胜的编程中,学会了算法,掌握了语法,把枯燥无味的语法规则变成生动活泼的编程应用。事实证明这种做法是成功的。多年来,我们坚持和发展了这种行之有效的方法,取得了很好的效果。 近年来许多学校的经验表明,按照这种思路进行教学,教师容易教,学生容易学,效果很好。 4. 怎样学习C程序设计 (1) 要着眼于培养能力。C语言程序设计并不是一门纯理论的课程,而是一门应用的课程。应当注意培养分析问题的能力、构造算法的能力、编程的能力和调试程序的能力。 (2) 要把重点放在解题的思路上,通过大量的例题学习怎样设计一个算法,构造一个程序。初学时更不要在语法细节上死背死抠。一开始就要学会看懂程序,编写简单的程序,然后逐步深入。语法细节是需要通过较长期的实践才能熟练掌握的。初学时,切忌过早地滥用C语言的某些容易引起错误的细节(如不适当地使用++和--)。 (3) 掌握基本要求,注意打好基础。在学校学习阶段,主要是学习程序设计的方法,进行程序设计的基本训练,为将来进一步学习和应用打下基础。不可能通过几十小时的学习,由一个门外汉变成编程高手,编写出大型而实用的程序,要求应当实事求是。如果学时有限,有些较深入的内容可以选学或自学,把精力放在最基本、最常用的内容上,学好基本功。 (4) 要十分重视实践环节。光靠听课和看书是学不会程序设计的,学习本课程既要掌握概念,又必须动手编程,还要亲自上机调试运行。读者一定要重视实践环节,包括编程和上机。既会编写程序,又会调试程序。学得好与坏,不是看你“知不知道”,而是“会不会干”。考核方法应当是编写程序和调试程序,而不应该只采用是非题和选择题。 (5) 要举一反三。学习程序设计,主要是掌握程序设计的思路和方法。学会使用一种计算机语言编程,在需要时改用另一种语言应当不会太困难。不能设想今后一辈子只使用在学校里学过的某一种语言。但是无论用哪一种语言进行程序设计,其基本规律是一样的。在学习时一定要学活用活,举一反三,掌握规律,在以后需要时能很快地掌握其他新的语言进行编程。 (6) 要提倡和培养创新精神。教师和学生都不应当局限于教材中的内容,应该启发学生的学习兴趣和创新意识。能够在教材程序的基础上,思考更多的问题,编写难度更大的程序。在本书每章的习题中,包括了一些难度较大的题目,建议学生尽量选做,学会自己发展知识,提高能力。 (7) 如果对学生有较高的程序设计要求,应当在学习本课程后,安排一次集中的课程设计环节,要求学生独立完成一个有一定规模的程序。 5. 从实际出发,区别对待 学习本课程的有计算机专业学生,也有非计算机专业的大学生;有本科生,也有专科(高职)学生;有重点大学的学生,也有一般大学的学生。情况各异,要求不同,必须从实际出发,制订出切实可行的教学要求和教学方案,切忌脱离实际的一刀切。 例如,对计算机专业学生,要求应当比非计算机专业高,尤其是对算法的要求应当高一些,不仅会用现成的算法,还应当会设计一般的算法。最好能在学完本课程后独立完成一个有一定规模的程序。 对高职学生的要求应不同于本科生,更不应搬用重点大学的做法,不宜在算法上要求太高,因为高职不是培养设计算法的人才,而应切实掌握语言工具,具有较强的动手和实践能力,例如编码能力、调试能力。 对基础较好、学生程度较高的学校,可以少讲多练,强调自学,有的内容课堂上可以不讲或少讲,指定学生自学。引导学生通过自学和实践发展知识,尽可能完成一些难度较高的习题。 6. 为什么要修订《C程序设计》 任何工作都要与时俱进,不断完善,追求完美。计算机科学技术不断发展,C语言也在发展,在高校计算机教学过程中不断累积了新的经验,广大读者在学习过程中也对本书提出了一些新的期望和建议。因此,作者对《C程序设计》一书再次进行修订,第四版保持了前三版的写作风格,保持了概念清晰、通俗易懂的特点,并在以下几个方面作了修改: (1) 按照C 99标准进行介绍,以适应C语言的发展,使程序更加规范。 目前大多数介绍C语言的教材是按照C 89标准介绍的,本书按照C 99的规定进行介绍,程序符合C 99的要求。例如: ① 数据类型介绍中,增加了C 99扩充的双长整型(long long int)、复数浮点型(float_complex,double_complex,long long _complex)、布尔型(bool)等,使读者有所了解。 ② C 99要求,main函数的类型一律指定为int型,并在函数的末尾加一个返回语句“return 0;”。 ③ C 99增加了注释行的新形式——以双钭线//开始的内容作为注释行,这本来是C++的注释行形式,现在C 99把它扩充进来了,使编程更加方便。同时保留了原来的/……/形式,以使原来按C 89标准编写的程序可以不加修改仍可使用。本书采用C 99的注释新形式,读者使用更方便,而且符合发展需要。因此,本书的程序基本上采用下面的形式: #include int main()//指定main函数为int类型 { return 0;//如函数正常执行,返回整数0 } ④ C 99增加的其他一些具体内容,在书中有关章节中专门注明,以提醒读者。 由于C 99是在C 89的基础上增加或扩充一些功能而成的,因此C 89和C 99基本上是兼容的。用C 89编写的程序在C 99环境下仍然可以运行。C 99所增加的有些新的功能和规则,是在编制比较复杂的程序时为方便使用和提高效率而用的,本书对目前暂时用不到的内容不作介绍,以免读者分心,增加学习难度。在将来进行深入编程时再逐步了解和学习。 目前社会上使用的一些C编译系统,有的并未实现C 99的要求,有的实现了C 99的部分功能。 考虑到读者上机实践的条件,本书中的例题程序都可以在目前广泛使用的C++编译系统中使用。 (2) 考虑到国内当前的情况和读者使用的方便,本书中的程序是用Visual C++ 6.0编译的,运行结果也是在Visual C++ 6.0环境下得到的。在分析时也以Visual C++ 6.0环境为例进行介绍。如果采用其他编译系统,也大同小异,不会产生任何问题。 (3) 加强算法。第2章专门介绍算法的概念、算法的特点、表示算法的工具以及怎样设计算法,并通过一些简单的例子说明怎样构造一个算法。使读者有一个初步的、基本的了解。在以后各章中,由浅入深地结合例题介绍各种典型的算法,并且马上用C语言实现此算法,写出程序。这样就使算法与程序紧密结合,而且通过运行程序,得到结果,便于验证算法的正确性。学习时不会觉得抽象,而会觉得算法具体有趣,看得见,摸得着。 在各例题中,在给出问题后,都先进行分析问题,介绍解题思路,也就是构造算法,然后才是根据算法编写程序,而不是先列出程序再解释程序,从中了解算法。这样做,更符合读者认知规律,更容易理解算法,也引导读者在做题时先考虑算法再编程,而不是坐下来就写程序。培养好的习惯。 (4) 更加通俗易懂,容易学习。作者充分考虑到广大初学者的情况,精心设计体系,适当降低门槛,便于读者入门。尽量少用深奥难懂的专业术语,用通俗易懂的方法和语言阐述清楚复杂的概念,使复杂的问题简单化。没有学过计算机原理和高等数学的读者完全可以掌握本书的内容。 本书采用作者提出的“提出问题—解决问题—归纳分析”的新的教学三部曲,先具体后抽象,先实际后理论,先个别后一般。而不是先抽象后具体,先理论后实际,先一般后个别。在介绍每个例题时,都采取以下的步骤: 给出问题—解题思路—编写程序—运行结果—程序分析—有关说明,使读者很容易理解。即使没有教师讲解,读者也能看懂本书的内容,就有可能做到,教师少讲,提倡自学,上机实践。 (5) 重新组织内容。根据近年来各校教学中的实际情况,作者对本书内容作了以下调整: ① 根据非计算机专业学生的培养要求和将来工作的情况,在教材中不再包括“位运算”一章。考虑到有部分读者需要学习这部分内容,将“位运算”的内容列入《C程序设计(第四版)学习辅导》一书中,供选学。 ② 取消《C程序设计(第三版)》中的第3章“数据类型、运算符与表达式”。这章内容涉及数据在计算机内存中的存储形式,读者感到一开始就接触这些内容比较难学。在第四版中,对这些内容进行精简,不再单独列章,将其中最基本的、必须了解的内容结合在第3章“最简单的C程序设计”中介绍,这样可以降低学习难度。 ③ 第三版包括“预处理命令”一章,考虑到这章的内容不是最基本的,在第四版中对它不作详细的介绍,而把它放在《C程序设计(第四版)学习辅导》一书中,供选学。 ④ 考虑到绝大多数读者在学习本课程之前未学习过其他计算机语言,缺乏对计算机语言和程序的基本了解,把第三版的第1章“C语言概述”改为“程序设计和C语言”,在这一章中增加了计算机语言和程序的基本知识。 ⑤ 许多学校把本课程放在一年级学习,此时还未学习或未学完高等数学,在学本课程时对有关高等教学的程序感到有困难,在第四版中不再包括有关高等数学的内容,具有高中以上文化程度的读者都能看懂本书。 ⑥ 在第三版的“结构体与共用体”一章中有设计链表(链表的建立、插入、删除和输出等)的内容,对于非计算机专业学生来说,难度较大。作者认为,这部分内容对非计算机专业可以不作为基本要求,在第四版中对这部分内容作了精简,只对链表作简单的介绍,读者对之有一定了解即可。考虑到这部分对计算机专业学生是需要的,我们把有关链表的详细内容作为习题供选做,并在《C程序设计(第四版)学习辅导》一书的习题解答中给出完整的程序,供需要者参考。 ⑦ 专门编写了“C程序案例” 一章,综合应用各章的知识。提供了不同难度、不同类型的程序。阅读这些程序,可以使学生了解怎样去编写应用程序,提高自己的编程能力。这部分内容安排在《C程序设计(第四版)学习辅导》一书中,供需要者参考。 相信经过修改后,本书会更加容易学习,效果更好。 7. 为了满足不同的需要,出版不同层次的C程序设计教材 全国各校的情况不同,学生的基础和学习要求也不尽同,不可能都采用同一本教材。教材应当满足多层次多样化的要求。许多学校的老师认为《C程序设计》是一本经过长期教学实践检验的优秀教材,其内容与风格已为广大师生所熟悉,希望在《C程序设计》的基础上组织不同层次的教材,供不同对象选用。作者与清华大学出版社反复研究,决定出版C程序设计的系列教材,包括以下3种: (1) 《C程序设计(第四版)》,即本书。本书系统全面,内容深入,讲授详尽,包含了许多其他教材中没有的内容,尤其是针对编程实践中容易出现的问题作了提醒和分析,是学习C语言程序设计的理想教材。适合程度较高、基础较好的学校和读者使用。 (2) 《C程序设计教程》。以《C程序设计》一书的内容为基础,适当减少内容,突出重点,紧扣最基本的要求,适合学时相对较少的本科院校使用。该书已被教育部正式列为“普通高等教育国家级规划教材”。 (3) 《C语言程序设计(第2版)》。内容更加精练,要求适当降低,写法上更加通俗易懂,适合应用型大学和程度较好的高职院校使用。该书亦已列为“普通高等教育国家级规划教材”和普通高等教育精品教材。 为了帮助读者学习本书,作者同时编写了《C程序设计(第四版)学习辅导》,内容包括: 本书各章习题的参考答案;位运算;C程序案例;Visual C++集成环境的使用方法;程序的调试与测试;上机实习指导等。该书由清华大学出版社于2010年与本书同时出版。 在本书出版之际,作者衷心感谢全国高等院校计算机基础教育研究会和全国各高校教师多年来始终不渝的关心与鼎力支持,感谢广大读者给予我的理解与厚爱,感谢清华大学出版社30年来的密切合作与支持。没有这一切,我不可能取得今天的成就。我永远感谢曾经帮助和支持过我的、相识的和不相识的同志和朋友。 薜淑斌和谭亦峰高级工程师参加了本书的研讨并编写部分程序。由于作者水平有限,本书肯定会有不少缺点和不足,热切期望得到专家和读者的批评指正。 谭浩强谨识2010年3月于清华园 对使用本教材的建议 (1) 本书是作为高等学校学生学习C程序设计的教材,对象是没有学过计算机程序设计的大学生。本书既注重概念清晰,使读者建立起对程序设计和C语言的清晰理解,又注意引导学生学以致用,使学生在较短的时间内初步学会用C语言编写程序,具有初步的编程知识和能力,而不是仅停留在理论知识层面上。虽然如此,本书与就业上岗前的职业培训教材是有区别的,也不是供软件开发人员使用的手册和技术规范,本书带有基础的性质,主要帮助学生学习程序设计方法,学习怎样去编写程序,为以后的进一步提高与应用打好基础。如果读者准备从事软件开发工作,可以在学习本书的基础上进一步学习有关专业知识和职业要求。 (2) 本书系统全面,内容丰富,供基础较好的学校和学生学习。建议采取课堂讲授与自学相结合的方法。在课堂上教师主要介绍编程思路和怎样用C语言去实现算法,不要孤立地一一介绍语法的细节,但是要在介绍程序时重点指出关键之处,以及容易出错的地方。要求学生通过自己上机实践来理解程序设计方法,学会正确使用C语言工具,具有初步编程能力。语法不是靠讲和背学会的,而是在实践中掌握的。 (3) 在本书第11章“常见错误分析”中列举了初学者在编程序时常出现的错误,这是作者在多年教学实践中收集和总结出来的,是很有价值的,希望教师和同学能充分利用这个资源。教师可以结合教学提醒学生避免出现类似的错误。学生在学习过程中可以随时翻阅,了解在什么情况下容易出错。在经过一段时间的编程和上机实践后,再系统地阅读一下,回顾和总结自己易出错的问题,这样可以减少错误,提高编程效率。 (4) 要善于利用习题。本书各章中的习题包括不同类型、不同程度的142道题目。其中有些题目的难度高于书中的例题,这样做的目的是使学生不满足于已学过的内容,而要举一反三,善于发展已有知识,提倡创新精神,培养解决问题的能力。有的专家和读者说,如果能独立地完成全部习题,他的C语言学习就过关了。希望教师能指定学生完成各章中有一定难度的习题。希望学生能尽量多做习题,以提高自己的水平。 在《C程序设计(第四版)学习辅导》一书中,提供了绝大多数习题的参考解答,列出了程序。对于比较难的习题,除了给出程序外,还作了比较详细的说明。这些习题解答实际上是作者对本教材例题的补充,希望读者能充分利用它。学生即使没有时间自己做全部习题,如果能把全部习题的参考解答都看一遍,而且都能看懂,也会很有收获,能扩大眼界,丰富知识。教师也可以挑选一些习题解答在课堂上讲授,作为补充例题。 (5) 预处理指令往往是C程序中必要的部分,尤其是用#include指令来包含头文件和用#define指令定义符号常量。在本教材中结合编写程序,介绍了怎样使用这两种预处理指令。在《C程序设计(第四版)学习辅导》一书中,专门有一章系统地、详细地介绍各种预处理指令的使用,以供使用参考。教师可在介绍#include指令和#define指令时,说明还有其他预处理指令,请同学们自己学习参考。 (6) “位运算”是C语言区别于其他高级语言的一个重要特点。C语言能对“位” 进行操作,使得C具有比较接近机器的特点。考虑到非计算机专业学生的情况,在这次修订时在教材中不再包括位运算的内容。但是,在编写系统软件和数据采集、检测与控制中往往需要用到位运算。信息类专业的学生需要学习这方面的知识,因此,把位运算的内容放到《C程序设计(第四版)学习辅导》一书中,计算机和其他信息类专业可以把它列入教学内容,其他读者可以选学。 (7) 为了便于教学,本教材中的例题程序的规模一般都不大。在学完各章内容之后,需要综合应用已学过的知识,编写一些应用程序,以提高编程能力。在《C程序设计(第四版)学习辅导》一书中专门有一章“C程序案例”,这些案例很有实用价值,对于读者在学习本书后提高编程能力会有很大的帮助。要善于利用这些资源,教师可以指定学生阅读这些程序。 (8) 由于学时少,只靠几十小时的教学就能使学生真正掌握C程序设计是困难的,如果有条件,最好在学完本教材后安排一次课程设计,要求学生独立完成一个有一定规模的程序设计,这是一个重要的教学实践环节,能大大提高学生的独立编程能力。 (9) 有的学校由于分配给本课程的学时有限,可能不能讲完教材中的全部内容。建议不要把本书后面几章舍弃,应当让学生基本学完第1~10章,使学生对C语言有全面的了解。例如,文件的概念是很重要的,宁可作简单的介绍,也不要放弃。前5章的进度可以快些,有些程序可指定学生自学。
第1章 程序设计和C语言
1.1 什么是计算机程序 1.2 什么是计算机语言 1.3 C语言的发展及其特点 1.4 最简单的C语言程序 1.4.1 最简单的C语言程序举例 1.4.2 C语言程序的结构 1.5 运行C程序的步骤与方法 1.6 程序设计的任务 习题 第2章 算法——程序的灵魂 2.1 什么是算法 2.2 简单的算法举例 2.3 算法的特性 2.4 怎样表示一个算法 2.4.1 用自然语言表示算法 2.4.2 用流程图表示算法 2.4.3 三种基本结构和改进的流程图 2.4.4 用N-S流程图表示算法 2.4.5 用伪代码表示算法 2.4.6 用计算机语言表示算法 2.5 结构化程序设计方法 习题 第3章 最简单的C程序设计——顺序程序设计 3.1 顺序程序设计举例 3.2 数据的表现形式及其运算 3.2.1 常量和变量 3.2.2 数据类型 3.2.3 整型数据 3.2.4 字符型数据 3.2.5 浮点型数据 3.2.6 怎样确定常量的类型 3.2.7 运算符和表达式 3.3 C语句 3.3.1 C语句的作用和分类 3.3.2 最基本的语句——赋值语句 3.4 数据的输入输出 3.4.1 输入输出举例 3.4.2 有关数据输入输出的概念 3.4.3 用printf函数输出数据 3.4.4 用scanf函数输入数据 3.4.5 字符数据的输入输出 习题 第4章 选择结构程序设计 4.1 选择结构和条件判断 4.2 用if语句实现选择结构 4.2.1 用if语句处理选择结构举例 4.2.2 if语句的一般形式 4.3 关系运算符和关系表达式 4.3.1 关系运算符及其优先次序 4.3.2 关系表达式 4.4 逻辑运算符和逻辑表达式 4.4.1 逻辑运算符及其优先次序 4.4.2 逻辑表达式 4.4.3 逻辑型变量 4.5 条件运算符和条件表达式 4.6 选择结构的嵌套 4.7 用switch语句实现多分支选择结构 4.8 选择结构程序综合举例 习题 第5章 循环结构程序设计 5.1 为什么需要循环控制 5.2 用while语句实现循环 5.3 用do…while语句实现循环 5.4 用for语句实现循环 5.5 循环的嵌套 5.6 几种循环的比较 5.7 改变循环执行的状态 5.7.1 用break语句提前终止循环 5.7.2 用continue语句提前结束本次循环 5.7.3 break语句和continue语句的区别 5.8 循环程序举例 习题 第6章 利用数组处理批量数据 6.1 怎样定义和引用一维数组 6.1.1 怎样定义一维数组 6.1.2 怎样引用一维数组元素 6.1.3 一维数组的初始化 6.1.4 一维数组程序举例 6.2 怎样定义和引用二维数组 6.2.1 怎样定义二维数组 6.2.2 怎样引用二维数组的元素 6.2.3 二维数组的初始化 6.2.4 二维数组程序举例 6.3 字符数组 6.3.1 怎样定义字符数组 6.3.2 字符数组的初始化 6.3.3 怎样引用字符数组中的元素 6.3.4 字符串和字符串结束标志 6.3.5 字符数组的输入输出 6.3.6 使用字符串处理函数 6.3.7 字符数组应用举例 习题 第7章 用函数实现模块化程序设计 7.1 为什么要用函数 7.2 怎样定义函数 7.2.1 为什么要定义函数 7.2.2 定义函数的方法 7.3 调用函数 7.3.1 函数调用的形式 7.3.2 函数调用时的数据传递 7.3.3 函数调用的过程 7.3.4 函数的返回值 7.4 对被调用函数的声明和函数原型 7.5 函数的嵌套调用 7.6 函数的递归调用 7.7 数组作为函数参数 7.7.1 数组元素作函数实参 7.7.2 数组名作函数参数 7.7.3 多维数组名作函数参数 7.8 局部变量和全局变量 7.8.1 局部变量 7.8.2 全局变量 7.9 变量的存储方式和生存期 7.9.1 动态存储方式与静态存储方式 7.9.2 局部变量的存储类别 7.9.3 全局变量的存储类别 7.9.4 存储类别小结 7.10 关于变量的声明和定义 7.11 内部函数和外部函数 7.11.1 内部函数 7.11.2 外部函数 习题 第8章 善于利用指针 8.1 指针是什么 8.2 指针变量 8.2.1 使用指针变量的例子 8.2.2 怎样定义指针变量 8.2.3 怎样引用指针变量 8.2.4 指针变量作为函数参数 8.3 通过指针引用数组 8.3.1 数组元素的指针 8.3.2 在引用数组元素时指针的运算 8.3.3 通过指针引用数组元素 8.3.4 用数组名作函数参数 8.3.5 通过指针引用多维数组 8.4 通过指针引用字符串 8.4.1 字符串的引用方式 8.4.2 字符指针作函数参数 8.4.3 使用字符指针变量和字符数组的比较 8.5 指向函数的指针 8.5.1 什么是函数指针 8.5.2 用函数指针变量调用函数 8.5.3 怎样定义和使用指向函数的指针变量 8.5.4 用指向函数的指针作函数参数 8.6 返回指针值的函数 8.7 指针数组和多重指针 8.7.1 什么是指针数组 8.7.2 指向指针数据的指针 8.7.3 指针数组作main函数的形参 8.8 动态内存分配与指向它的指针变量 8.8.1 什么是内存的动态分配 8.8.2 怎样建立内存的动态分配 8.8.3 void指针类型 8.9 有关指针的小结 习题 第9章 用户自己建立数据类型 9.1 定义和使用结构体变量 9.1.1 自己建立结构体类型 9.1.2 定义结构体类型变量 9.1.3 结构体变量的初始化和引用 9.2 使用结构体数组 9.2.1 定义结构体数组 9.2.2 结构体数组的应用举例 9.3 结构体指针 9.3.1 指向结构体变量的指针 9.3.2 指向结构体数组的指针 9.3.3 用结构体变量和结构体变量的指针作函数参数 9.4 用指针处理链表 9.4.1 什么是链表 9.4.2 建立简单的静态链表 9.4.3 建立动态链表 9.4.4 输出链表 9.5 共用体类型 9.5.1 什么是共用体类型 9.5.2 引用共用体变量的方式 9.5.3 共用体类型数据的特点 9.6 使用枚举类型 9.7 用typedef声明新类型名 习题 第10章 对文件的输入输出 10.1 C文件的有关基本知识 10.1.1 什么是文件 10.1.2 文件名 10.1.3 文件的分类 10.1.4 文件缓冲区 10.1.5 文件类型指针 10.2 打开与关闭文件 10.2.1 用fopen函数打开数据文件 10.2.2 用fclose函数关闭数据文件 10.3 顺序读写数据文件 10.3.1 怎样向文件读写字符 10.3.2 怎样向文件读写一个字符串 10.3.3 用格式化的方式读写文件 10.3.4 用二进制方式向文件读写一组数据 10.4 随机读写数据文件 10.4.1 文件位置标记及其定位 10.4.2 随机读写 10.5 文件读写的出错检测 习题 第11章 常见错误分析 附录 附录A 在Visual C++ 6.0环境下运行C程序的方法 附录B 常用字符与ASCII代码对照表 附录C C语言中的关键字 附录D 运算符和结合性 附录E C语言常用语法提要 附录F C库函数 参考文献
如果只是编写和运行一个很简单的程序,上面介绍的步骤就够了。但是实际上要处理的问题比上面见到的例子复杂得多,需要考虑和处理的问题也复杂得多。程序设计是指从确定任务到得到结果、写出文档的全过程。
从确定问题到最后完成任务,一般经历以下几个工作阶段: (1)问题分析。对于接手的任务要进行认真的分析,研究所给定的条件,分析最后应达到的目标,找出解决问题的规律,选择解题的方法。在此过程中可以忽略一些次要的因素,使问题抽象化,例如用数学式子表示问题的内在特性。这就是建立模型。 (2)设计算法。即设计出解题的方法和具体步骤。例如要解一个方程式,就要选择用什么方法求解,并且把求解的每一个步骤清晰无误地写出来。一般用流程图来表示解题的步骤。 (3)编写程序。根据得到的算法,用一种高级语言编写出源程序。 (4)对源程序进行编辑、编译和连接,得到可执行程序。 (5)运行程序,分析结果。运行可执行程序,得到运行结果。能得到运行结果并不意味着程序正确,要对结果进行分析,看它是否合理。例如把“b=a;”错写为“a=b;”,程序不存在语法错误,能通过编译,但运行结果显然与预期不符。因此要对程序进行调试(debug)。调试的过程就是通过上机发现和排除程序中故障的过程。经过调试,得到了正确的结果,但是工作不应到此结束。不要只看到某一次结果是正确的,就认为程序没有问题。例如,求c-b/a,当a=4,b=2时,求出c的值为0.5,是正确的,但是当a-0,b-2时,就无法求出c的值。说明程序对某些数据能得到正确结果,对另外一些数据却得不到正确结果,程序还有漏洞,因此,还要对程序进行测试(test)。所谓测试,就是设计多组测试数据,检查程序对不同数据的运行情况,从中尽量发现程序中存在的漏洞,并修改程序,使之能适用于各种情况,作为商品提供使用的程序,是必须经过严格测试的。 在本书的配套书《C程序设计(第四版)学习辅导》中对程序的调试和测试做了进一步的说明,读者可以参考。 (6)编写程序文档。许多程序是提供给别人使用的,如同正式的产品应当提供产品说明书一样,正式提供给用户使用的程序,必须向用户提供程序说明书(也称为用户文档)。内容应包括:程序名称、程序功能、运行环境、程序的装入和启动、需要输入的数据,以及使用注意事项等。
你还可能感兴趣
我要评论
|