C语言是一种计算机程序设计语言,它既有高级语言的特点,又具有低级汇编语言的特点。它可以作为系统设计语言来编写工作系统应用程序,也可以作为应用程序设计语言来编写不依赖计算机硬件的应用程序。因此,它的应用范围非常广泛。
C语言的诞生及发展历程如图所示。
第1阶段:A语言
C语言的发展颇为有趣,它的原型是ALGOL 60语言,也称A语言。ALGOL 60是一种面向问题的高级话言,它离硬件比较远,不适合编写系统程序。AIGOL60 (也就是算法语言60)是程序设计语言由技艺转向科学的重要标志,其特点是具有局部性、动态性、递归性和严谨性。
第2阶段: CPL语言
1963年,剑桥大学将AIGOL 60语言发展成为CPL (Combined Programming Language) , CPL在AIGOL 60的基础上与硬件接近了一些,但规模仍然比较宏大,难于实现。
第3阶段: BCPL语言
1967年,剑桥大学马丁·理察斯(Martin Richards)对CPL进行了简化,推出了BCPL (Basic CombinedProgramming Language) , BCPL是计算机软件人员在开发系统软件时作为记述语言使用的一种结构化程序设计语言,它能够直接处理与机器本身数据类型相近的数据,具有与内存地址对应的指针处理方式。
第4阶段: B语言
在20世纪70年代初期,时任美国贝尔实验室的肯·汤普逊对BCPL进行了修改,设计出比较简单而且很接近硬件的语言,取名为B语言。B语言还包括了汤普逊的一些个人偏好,比如在一些特定的程序中减少非空格字符的数量。和BCPL以及FORTH类似, B语言只有一种数据类型,计算机字。大部分的操作将其作为整数对待,例如,进行+、-、*、/操作,但进行其余的操作时,则将其作为一个复引用的内存地址。在许多方面,B语言更像是一种早期版本的C语言,它还包括了一些库函数,其作用类似于C语言中的标准输入/输出函数库。
第5阶段: C语言
由于B语言过于简单,数据没有类型,功能也有限,所以美国贝尔实验室的丹尼斯·里奇在B语言的基础上最终设计出了一种新的语言,取名为C语言,并试着以C语言编写UNIX, 1972年,丹尼斯·里奇完成了C语言的设计,并成功地利用C语言编写出了操作系统,从而降低了作业系统的修改难度。
1978年, C语言先后移植到大、中、小、微型计算机上,风靡世界,成为最广泛的几种计算机语言之一。
1983年,美国国家标准学会(ANSI)对C语言进行了标准化,当年颁布了第一个C语言标准草案(83 ANSI C) , 1987年又颁布了另一个C语言标准草案(87 ANSIC) 。 1994年, ISO修订了C语言的标准。最新的C语言标准是在1999年颁布的,并在2000年3月被ANSI采用的C99,正式名称是ISO/IEC9899:1999。
0.2 C语言的特点
每一种话言都有自己的优缺点, C语言也不例外,所以才有了语言的更替,有了不同语言的使用范围。下面列举C语言的一些优点。
1.功能强大、适用范围广、可移植性好
许多著名的系统软件都是由C语言编写的,而且C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
C语言适合于多种操作系统,如DOS, UNIX等。对于操作系统、系统使用程序以及需要对硬件进行操作的场合,使用C语言明显优于其他解释型高级语言,一些大型应用软件也是用C语言编写的。
2.运算符丰富
C语言的运算符包含的范围广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理,从而使C语言的运算类型极其丰富,表达式类型多样化。灵活地使用各种运算符可以实现在其他高级语言中难以实现的运算。运算符的介绍见第4章中的相关内容。
3.数据结构丰富
C语言的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等,能用来实现各种复杂的数据结构的运算。C语言还引入了指针的概念,从而使程序的效率更高。
4.C语言是结构化语言
结构化语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,因此用户可以方便地调用这些函数,并具有多种循环和条件语句来控制程序的流向,从而使程序完全结构化。
5.C语言可以进行底层开发
C语言允许直接访问物理地址,可以直接对硬件进行操作,因此可以使用C语言来进行计算机软件的底层开发。
6.其他特性
C语言对语法的限制不太严格,其语法比较灵活,允许程序编写者有较大的自由度。另外,C语言生成目标代码的质量高,程序执行效率高。
0.3 c语言无处不在
C语言应用范围极为广泛,不仅仅是在软件开发上,各类科研项目也都要用到C语言。下面列举了C语言一些常见的领域。
(1) 应用软件。Linux操作系统中的应用软件都是使用C语言编写的,因此这样的应用软件安全性非常高。
(2)对性能要求严格的领域。一般对性能有严格要求的地方都是用C语言编写的,比如网络程序的底层和网络服务器端的底层、地图查询等。
(3)系统软件和图形处理。C语言具有很强的绘图能力和可移植性,并且具备很强的数据处理能力,可以用来编写系统软件、制作动画、绘制二维图形和三维图形等。
(4)数字计算。相对于其他编程语言, C语言是数字计算能力很强的高级语言。
(5)嵌入式设备开发。手机、PDA等时尚消费类电子产品相信大家都不陌生,其内部的应用软件、游戏等很多都是采用C语言进行嵌入式开发的。
(6)游戏软件开发。对于游戏大家更不陌生,很多人就是因为玩游戏而熟悉了计算机。利用C语言可以开发很多游戏,比如推箱子、贪吃蛇等。
0.4 C语言的学习经验
CC语言是在国内外广泛使用的一种计算机语言。其语言功能丰富、表达能力强、使用灵活方便,既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件。很多新型的语言,如C++, Java, C#,J#, perl等都是衍生自C语言。掌握了C语言,可以说就掌握了很多门语言。
C语言是计算机的基础,大多数软件都需要用C语言来编写,例如,我们在编写一个较大的程序时,应该把它分成几个小程序来看,这样会容易得多。同时, C语言应该是操作和理论相结合的课程,两者是不可分割的。
要了解C语言,就要从语法学起,首先要了解它的结构,比如变量,要了解变量的定义方式(格式) ,其意义是什么(定义变量有什么用) ;其次就是要怎么去运用它(用什么形式去应用它) 。这些都是语法基础,也是C语言的基础,如果把它们都了解了,那么编起程序来就很得心应手了。比如, IF ELSE和SWITCHCASE这两种条件语句都是用来判断执行功能的,那要什么时候用IF,什么时候用SWITCH呢?如果能够很好地了解它们的结构和作用,那么就知道,若它的条件分文有多个,而且条件的值是整数或一个字符值,就会选SWITCH,因为如果条件分文太多时用IF语句,一定会出现IF的嵌套, IF的嵌套越多,程序的开销就会随着增大,这样整个程序的运行效率就会大大降低。而sWITCH则不同,它只要比较一次,就可以找出条件的结果。不过SWITCH也有它的约束条件,就是它的条件值一定要为一个整型数或一个字符值,所以碰到它不能解决的问题时通常也会使用IF语句,毕竟I语句使用起来比较方便,而且使用范围也比较广。所以说了解语法规则是很重要的,如果没有一个良好的语法基础,很难编出一个好的程序。
学好语法基础后我们就可以开始编程了。很多初学者在看完题目后不知从何入手,其实在编写程序的时候,我们应该养成画流程图的好习惯。因为C语言的程序是以顺序为主,一步步地从上往下执行的,而流程图的思路也是从上到下一步步画出来的。而且画流程图的过程也是你在构建编写程序的思路的过程,流程图画好了,编程的思路也基本定了,然后根据思路来编写程序即可。
除了要掌握上述基本的知识外,良好的编程习惯也是学好C语言的重要因素,例如,编写程序时要有缩进,写注释,程序写到一定的阶段时要做模块测试等。程序的维护是令程序员很头疼的问题,如果一个复杂的程序在编完后才发现有错误,那么找出错误的工作量将会非常大。但是若在编写程序时做好格式的缩进和写注释,那么程序看起来就很清晰了,如果在每个阶段做模块测试,确定之前的程序没有错误,这样错误机会也会减少很多。
设计程序的过程如同解决一个实际问题,你需要从多个角度来分析,首先要了解这个问题的基本要求,即输入、输出,以及完成从输入到输出的要求是什么,其次,从问题的要害入手,从前往后解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中可确定所需的变量、数组、函数,然后确定处理过程——算法,最后得出结论。
学习一门编程语言之前,都要了解这门语言的精髓是什么。对于C语言而言,指针的定义与运用是它的一大特色,也是其能够得到广泛应用的重要原因之一。例如,指针可以作为数组的地址使数组的处理变得简洁也可以通过指针给函数传递变量的地址,从而实现调用函数后返回多个值;指针还支持动态内存分配,使处理数值、字符数组的方法更为简单。本书对指针内容进行了更新,详细讲解了这方面的内容。
0.5 C言的学习路线
学习编程语言就是一个坚持看、敲、写的过程。
(1)要学好C语言,首先要买一本好的入门书籍。本书把C语言所涉及的内容进行了详细的讲解,对于新手来说是个不错的选择。
(2)看书,大概了解内容的时候,一定要把程序敲出来自己运行一遍。编程工具推荐VC 6.0,其使用教程可以上网搜索。
(3)读程序。登录论坛或者百度文库找一些用C语言编写的程序的例子,试着去读懂。
(4)自己改写程序。通过前面的学习,应该已经掌握一些基本的编程技巧。一定要有自己的想法,然后让自己的想法通过程序来实现。编程语言的学习过程就是坚持的过程,只要掌握了一种编程语言,再去学习其他的语言就很轻松了。