C语言程序设计案例式教程
上QQ阅读APP看书,第一时间看更新

1.1 C语言的历史和特点

1.1.1 C语言的起源与发展

1.C语言的诞生

在 C 语言诞生以前,系统软件主要是用汇编语言编写的。由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都极差,一般的高级语言又难以实现对计算机硬件的直接操作(这正是汇编语言的优势),于是人们迫切需求一种兼有汇编语言和高级语言特性的新语言,在这种情况下,C语言就应运而生了。

C语言的发展颇为有趣,它的原型是ALGOL 60语言(也称A语言)。

1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。

1967年,剑桥大学的马丁·理查兹(Matin Richards)对CPL语言进行了简化,于是产生了BCPL语言。

1970年,美国贝尔实验室的肯·汤普森(Ken Thompson)将BCPL进行了修改,并将其命名为“B语言”,其含义是将CPL语言煮干,提炼出它的精华,之后他用B语言重写了UNIX操作系统。

1973年,美国贝尔实验室的丹尼斯·里奇(Dennis M.Ritchie)在B语言的基础上设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,即C语言。

1978年,布赖恩·凯尼汉(Brian W.Kernighan)和丹尼斯·里奇(Dennis M.Ritchie)出版了第一版《The C Programming Language》,从而使C语言成为目前世界上流传最广泛的高级程序设计语言。

2.C语言标准

随着微型计算机的普及,许多C语言版本出现了。由于一些新的特性不断被各种编译器实现并添加,这些C语言之间出现了一些不一致的地方。为了建立一个“无歧义、与具体平台无关”的C语言定义,美国国家标准学会(ANSI)为C语言制定了一套标准,即ANSIC标准。

1989年美国国家标准学会(ANSI)通过的C语言标准ANSI X3.159-1989,被称为C89。之后《The C Programming Language》第二版开始出版发行,书中根据C89进行了更新。1990年,国际标准化组织 ISO批准 ANSI C成为国际标准,于是 ISO C诞生了,该标准被称为 C90。这两个标准只有细微的差别,因此,通常认为 C89 和 C90 指的是同一个版本。

之后,ISO于1994年、1996年分别出版了C90的技术勘误文档,更正了一些印刷错误,并在1995年通过了一份C90的技术补充,对C90进行了微小的扩充,经扩充后的ISO C被称为C95。

1999年,ANSI和ISO又通过了C99标准。C99标准相对C89做了很多修改,例如变量声明可以不放在函数开头,支持变长数组等。但由于很多编译器仍然没有对C99提供完整的支持,因此本书将按照C89标准来进行讲解,在适当时会补充C99标准的规定和用法。

多学一招:为计算机语言

计算机语言(Computer Language)是人与计算机之间通讯的语言,它主要由一些指令组成,这些指令包括数字、符号和语法等内容,编程人员可以通过这些指令来指挥计算机进行各种工作。

计算机语言有很多种类,根据功能和实现方式的不同大致可分为三大类,即机器语言、汇编语言和高级语言。

1.机器语言

不需要翻译就能直接被计算机识别的语言被称为机器语言(又被称为二进制代码语言),该语言是由二进制数 0 或 1 组成的一串指令,对于编程人员来说,机器语言不便于记忆和识别。

2.汇编语言

尽管对计算机来说机器语言很好懂也很好用,但是对于编程人员来说,记住0和1组成的指令简直就是煎熬。为了解决这个问题,汇编语言诞生了。汇编语言用英文字母或符号串来替代机器语言,把不易理解和记忆的机器语言按照对应关系转换成汇编指令。这样一来,汇编语言就比机器语言更加便于阅读和理解。编译器可以把写好的汇编语言翻译成机器语言,实现人和计算机的沟通。

3.高级语言

由于汇编语言依赖于硬件,程序的可移植性极差,而且编程人员在使用新的计算机时还需学习新的汇编指令,这大大增加了编程人员的工作量,为此计算机高级语言诞生了。高级语言不是一门语言,而是一类语言的统称,它比汇编语言更贴近于人类使用的语言,易于理解、记忆和使用。由于高级语言和计算机的架构、指令集无关,因此它具有良好的可移植性。

高级语言应用非常广泛,世界上绝大多数编程人员都在使用高级语言进行程序开发。常见的高级语言包括 C、C++、Java、VB、C#、Python、Ruby 等。本书讲解的 C 语言就是目前最流行、应用最广泛的高级语言之一,也是计算机高级编程语言的元老。

1.1.2 C语言的特点

C语言是一种通用的、面向过程的程序语言,它的诸多特点使它得到了广泛的应用,下面我们简单了解一下C语言都有哪些特点。

(1)C 语言简洁、紧凑,使用方便、灵活,具有丰富的运算符和数据结构。C 语言一共有32个关键字、9种控制语句、34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理,其运算类型更为丰富,表达式类型更加多样化。

C语言的数据类型有整型、实型、共用体类型等,能用来实现各种复杂的数据结构运算。

(2)C语言允许直接访问物理地址,进行位操作,可以直接对硬件进行操作,兼具高级语言和低级语言的特点,能实现汇编语言的大部分功能,同时它既是成功的系统描述语言,又是通用的程序设计语言,因此人们通常称它为“中级语言”。

(3)C语言具有结构化的控制语句(如if...else语句、while语句、do...while语句、switch语句、for语句),用函数作为程序模块以实现程序的模块化,是结构化的理想语言,符合现代编程风格的要求。

(4)C语言语法限制不太严格,程序设计自由度大。例如对变量的类型使用比较灵活,整型数据与字符型数据以及逻辑型数据可以通用。一般的高级语言语法检查比较严,能检查出几乎所有的语法错误;而 C 语言允许程序编写者有较大的自由度,因此放宽了语法的检查。程序员要自己保证所写程序的正确性,不能过分依赖C编译程序去检查错误。

(5)C 语言编写的程序可移植性好(与汇编语言相比)。在某一系统下编写的程序,基本上不作修改就能在其它类型的计算机和操作系统上运行。

(6)C语言生成目标代码质量高,程序执行效率高,一般只比汇编程序生成的目标代码效率低10%~20%。

尽管C语言具有很多的优点,但和其他任何一种程序设计语言一样,它也有其自身的缺点,如代码实现周期长、过于自由、经验不足易出错、对平台库依赖较多等。但总的来说,C语言的优点远远超过了它的缺点。