前言
C语言的通用性和无限制性使得它比一般的程序设计语言更加通俗,更加有效。无论是系统软件(操作系统、编译系统等)、应用软件(图形处理),还是数据处理(如企业管理)以及数值计算等都可以很方便地使用C语言。各大专院校及成人教育机构都开设了C语言课程,C语言的学习班则更为普遍。
C语言的特点是多方面的。简单说来,有如下几个优点。
(1) 由于它具有描述准确和目标程序质量高的优点,所以有很强的生命力。
(2) 吸取了汇编语言的精华,使C语言对高级语言来讲是“低级”语言。
(3) 继承和发扬了高级语言的长处,使C语言相对汇编来讲又是“高级”语言。
(4) C语言的规模适中,语言简洁,其编译程序简单而紧凑。它在运行时所需要的支持少,占用的存储空间也小。
(5) C语言的可移植性好。可移植性是指程序从一个环境不加改动或稍加改动就可搬到另一个完全不同的环境上运行,汇编程序因依赖机器硬件,所以根本不可移植。另外,一些高级语言(如FORTRAN等)编译的程序也是不可移植的。
由于上述几个突出优点,使越来越多的人加入到学习、使用和研究C语言的行列之中。
随着C++的普及,读者可能会问: 既然C++是C语言的超集,为什么不直接学习C++?我们认为,C语言比C++更适合作为编程的入门语言。C++确实比C语言有更多的优点,但是如果程序不是非常庞大复杂,就显示不出C++的优点。另外,即使是目前流行的Visual C++、MFC及OWL库,它们的底层仍是C语言编写的Windows API函数。C语言结构化程序设计方法仍然适用。正如中国台湾地区的著名教育家侯俊杰先生在介绍如何学习MFC时所说: “程序设计领域里,每个人都想飞。但是,还没学会走之前,连跑都别想!”因此他首先把大家领回C语言的Windows API编程。全国计算机等级考试、全国计算机应用技术证书(NIT)和大学生编程竞赛,都有C语言方面的内容。甚至在学生求职时,用人单位还会问你是否学过C语言。著名的微软公司,也会出一道C语言的题目测试应聘者,可见C语言仍然是必须掌握的一门语言。C语言在人才培养的过程中,起到很重要的作用。UNIX操作系统也是用C语言实现的,掌握C语言已经是非计算机专业学生的追求目标,作为计算机专业的学生,更需要打下坚实的基础。
对于初学者来说,另一个重要的因素就是开发程序过程中编译器所产生的错误和警告信息集合的可理解性。尽管现在多数编译系统都可以同时编译C和C++代码,但C++的错误注释通常含糊不清,没有相当深厚的知识根本无法理解。虽然C语言中的错误信息也不够完美,但却简单得多。
事实上,计算机科学工程领域的学生需要同时掌握C和C++。首先学习C语言可以为随后学习C++奠定基础理论,从而更容易理解抽象的数据类型。不过,本书虽然使用C语言讲解,但与现有的教材也有很大不同。首先是ANSI C有了新的发展,舍去一些陈旧的规定,引入新的规定,尤其是引入C++的一些内容。例如,引入函数原型、void关键字及const限定符的使用方法,引入void指针及使用const修饰指针,并修改了对自动数组和结构初始化的规定,等等。本书虽然是在笔者原来的几本C语言教材的基础上改写的,但已经删除了陈旧的内容,引入新的内容并向C++过渡,从而为学习C++奠定基础。
第二版前言
本书的第一版自从2002年出版以来,受到许多读者的关心,提出了很多宝贵意见。根据读者的意见和高职高专的教学大纲,依据加强基础、培养实用人才的原则,对原来的教材进行如下修改。
(1) 在第1章增加C程序的基本程序结构模式,以便学生能尽早通过模仿,加强理解并掌握C语言的基本编程方式。
(2) 重写第3章(函数与变量类型),详细介绍函数的编制方法并通过实例解释C语言编程的核心是函数调用问题。
(3) 在第3章给出C程序的单文件和多文件编程的结构模式,通过这些模式加强对C程序函数调用的深入理解,为编制实用程序打下基础。
(4) 改写第7章(C程序结构化设计实例),使它与第3章遥相呼应,进一步介绍编写实用C程序的方法,并通过一个实际的例子,演示如何根据多文件结构模式,划分各种文件以及函数组成的一般方法,以期提高学生的实际编程能力。
(5) 第2章增加了计算机解题实例,第4章增加查找实例,以便使学生了解如何使用计算机求解逻辑问题以及基本的常用算法。
(6) 删除原来因例题超前所做的解释并全部更换超前例题,既方便了教学,也降低了学习的台阶。
(7) 删除第4章的函数指针和第5章的位操作及联合,精简枚举的内容。
(8) 精简附录并订正原来的错误和排版问题。
由此可见,这次修订在强调理论教学以够用为主的同时,也要求密切联系实际应用的需要,目的是使学生在学习本课程之后,能够胜任一般的实际编程任务。
刘振安
2008年11月于中国科学技术大学