C语言第一章c语言概述C语言基础教程1.1.c语言的由来与发展1.1.1.c语言的由来c语言诞生干19?2年,由美国电话电报公司(AT&T)贝尔实验室的D.M.Ritchie设计,并首先在一台使用UNIX操作系统的DECPDP-11计算机上实现。C语言是在一种称为B语言的基础上,克服了B语言依赖于机器又无数据类型等局限性开发的语言。在1970年,美国贝尔实验室的IC.Thompson以BCPL语言为基础,设计出一种既简单又接近于硬件的B语言,并用它写成了第一个UNIX操作系统,在PDP-7计算机上实现的。B语言是取了BCPL语言的第一个字母。而BCPL语言(BasicCombinedProgrammingLanguage)是3.967年英国剑桥大学的M.Richard,基于一种CPL语言(combinedProgram-wingLanguage)提出的一种改进的语言。而CPL语言又是于1963年英国剑桥大学根据AL-GOL8。推出的一种接近硬件的语言。由此可见,G语言的根源可以追溯到ALGOL60,它的演变过程如下所示:ALGOL6o(1960年)与CPL(1963年)一BCPL(1967年)iB3970年)--C(1972年1.1.2C语言的发展C语言是在人们设想寻找一种既具有一般高级语言的特征,又具有低级语言特点的语言的情况下应运而生的,它具有人们的这种期望,集中了高级语言和低级语言的优点。最初的C语言就是为了描述和实现UNIX操作系统而产生的一种工具语言。1973年,贝尔实验室的KThampson和D.M.Ri}chie两人合作使用C语言修改了UNIX操作系统,即uNZx第5版本。原来的UNIX操作系统是用汇编语言写的,改写后UNIX操作系统中90%以上使用了C语言。从此,C语言的命运与UNIX操作系统便有着密切的联系,随着UNIX操作系统的发展和推广,C语言也在被广泛的使用和发展。C语言出世以后。在应用中不断的改进。在1975年UN1X第6版本公布以后,C语言开始引起人们的注意,它的优点逐步被人们所认识。1977年出现了与具体机器无关的C语言编译文本,推动了UNIX操作系统在各种机器上的迅速地实现。随着UNIX的日益广泛的使用,C语言也得到了迅速的推广。1978年以后,C语言先后被移植到大、中、小和微型机上,它很快成为世界上应用最广泛的计算机语言之一。1978年又推出UNIX第8版本,以该版本中的C编译程序为基础,B.W.Ketnigha。和D.M.Ritchie合作(被称为K&R)出版}}TheCProgrammingLanguage}(C程序设计语言)一书,被称为标准C1983年,ANSI(美国国家标准化协会)对G语言的各种版本进行了扩充,推出了新的标准,被称为ANSI.它比原来的标准C有了改进和扩充。1987年,ANSI又公布了87ANSZC新版本。目前流行的各种c语言编译系统的版本大多数都以此为基础,但各有其不同。当前微机上使用的C语言编译系统多为MicrosoftC,TurboC,BorlandC和QuickC等,它们略有差异,按标准C书写的程序,基本上都可运行。读者要了解不同版本的编译系统的特点和区别可参阅有关的操作说明书。1.2.1C语言的特点c语言是一种开发比较晚的高级语言,它吸取了早期高级语言的优点,克服了某些不足,形成了它独有的特性。c语言的特点概括起来有如下几点:1.C语言是一种结构化的程序设计语言结构化程序设计的优点是便于分工合作,便于调试、维护和扩充。这种程序设计方法是将一个大程序分成若千个模块,每个模块完成一个功能,由一个总控模块来控制和协调各个模块来实现总的功能;因此,这种程序设计方法又称为模块化程序设计方法。在C语言中,函数是构成C谙言程序的最小模块。实际上,C语言的程序是由一个或者多个文件组成的,每个文件叉是由一个或多个函数组成的。因此,一个程序是由一个或多个函数组成的,其中,须有且仅有一个主函数,生函数的名字规定为rnain()o这样,组成一个程序的者干个文件中,仅有一个是主文件,只有主艾件中才含有main()函数。另外,函数是由若干条语句组成的,语句是由若干个单词组成的‘单词是由若干个字符组成的。字符是构成程序的最小单元。e语言程序的构成如下所示:程序~文件~函数~语句~单词、字符。C语言是结构化程序设计语言,它具有构成三种基本结构模式的语句,这种结构化程序设计应具有的三种基本结构模式如下:顺序结构棋式它将由若干条顺序执行的语句构成,这是程序设计的最基本形式。分支结构模式C语言中具有条件语句和开关语句,它将会构成各种需要的分支结构模式。.循环结构模式C语言中提供了三种循环语句(for循环,whil。循环和do-while循环),用它们可以构成各种循环结构模式。在讲述C语言是一种结构化程序设计语言的同时,还必须指出它与其他结构化程序设计语言(如PASCAL语言)相比较,还有一些不完全之处,因此,C语言是一种不完全的结构化程序设计语言。其表现如下:第一,完全的结构化程序设计语言不允许使用goto语句,因为goto语句会破坏结构化。但是。got。语句在某些时候会使得程序简练,因此,在C语言中原则上允许使用goto语句,为了减少它对结构化的影响,采取了限制使用的办法,即规定got。语句的转向范围只能在一个函数体内。不得使用gates语句从一个函数体内转向到另一个函数体中,这种限制性地使用goto语句会给编程带来一些方便,又不会影响棋块之间的结构化。但是,建议在G语言的程序中尽量少使用goto语句。第二,完全的结构化程序设计语言要求一个模块只有一个入口和一个出口,这样便于结构化的管理。但是,C语言程序中允许函数使用多个返回语句(return语句),即允许函数有多个出口,返回到调用函数。这样做也是为了编程中的方便。在C语言程序中,可以使用条件语句来返回不同的函数值。由此可见,C语言虽然是一个不够严格的结构化程序设计语言,但它是一个使用起来十分灵活的高级语言。2.C语言十分简练C语言是一种非常简练的语言。用C语言编写的程序十分简洁。C语言的简洁性表现如下:(1)C语言中类型说明符采用缩写形式,例如,整型可用int,而不用integer;字符型用char而不用character;长整型可用long等等。(2)C语言中关键字较少,只有32个。有些关键字用简单的符号代替,例如,条件语句中的ef体的定界符采用花括号({)),如果是一条语句规定不用定界符。又例如,循环语句中循环体也是如此。(3)运算符丰富。不仅数量多,而且功能强,例如,三目运算符(?:)具有条件语句的功能。三目运算符使用方法如下:dl?d2:d3其中,dl,d2,d3是不同的表达式。其功能是先计算表达式dl的值,如果dl的值是非零,则上述三目运算符组成的条件表达式的值为d2表达式的值;否则(即dl表达式的值为零)条件表达式的值为d3的值。因此,它将相当如下表示的if语句;If(dl)C=d2elseC=d3其中,c用来存放上述条件表达式的值。使用功能强的运算符可以使得程序简洁。(4)预处理功能将简化程序书写内容。C语言中提供r一种预处理功能,它包含宏定义和文件包含等,其中宏定义有一种简化书写的功能,它可将一个复杂的格式用一个简单格式来定义,例如#definePI3.14159265表示定义PI为3.14159265,在程序中只需用PI表示,在编译前系统将用3.14159265来替代PI。这里,简化是一个特点,还有其他好处后面会介绍。还有文件包含也将起到简化书写的目的,它将许多文件都将使用的一些语句放在某个指定的文件(一般用头文件,即。h文件)中,那么在某个文件中需要这些语句时,不必重写,只要将原来写好的指定文件包含进来就可以了,其方法十分简单,例如#includemyfile.h其中,myfile.h是事先写好的需要包含其内容的文件。3.C语言功能很强C语言的功能性强表现在它既具有高级语言的功能又具有低级语言的功能。数值运算和非数值运算的功能C语言都具有,并且在处理非数值数据时更加方便和灵活。此外,C语言还具备一些低级语言的功能,例如,寄存器运算功能,二进制位运算功能和内存地址运算功能等。这些低级语言的功能是一般高级语言所没有的。由于c语言具有上述这些功能,因此,它的应用十分广泛,它不仅像其他高级语言一样编写一些应用程序,而且还可以像汇编语言一样编写一些系统程序。而在实际上,许多系统软件,例如关系数据库管理系统,绘图软件系统等,都是用c语言编写的。另外,使用c语言编写一些接口程序也十分方便。c语言还提供了丰富的数据类型,除了基本的数据类型之外,还提供了构造的数据类型,例如,数组、结构、联合和枚举。使用这些数据类型可以很方便地实现各种复杂的数据结构(例如,链表、栈、树等)的操作。4.C语言的可移植性好·高级语言的可移植性都比汇编语言好,在诸多的高级语言中,c语言的移植性更为突出。这是因为该清育编译系统较小,。另外顶处理功能对移植也带来一些方便,因此,c语言本身只需稍加修改便可用于各种型号的机器上和各类操作系统中,用c语言编写的程序也很方便地用于不同系统中,这也是c语言得川广泛应用的原因之一在了解和掌握c语言上述的特点的同时,还应该知道c语言所存在的不足,这些不足往往是由于突出某个特点而带来的。在学习c语言中,了解这些不足是很重要的,它可以避免出现一些莫明其妙的错误。下面列举四个方面的不足。(1)运算符多,难用难记。c语言中有}o多个运算符,又分}S种优先级和两类结合性,这无疑对数据的运算和处理带来了方便。但是,诸多的运算符和不同的优先级势必会带来难记忆,难使用的不足。例如,有些功能不同的运算符,却使用相同的符号,如“,”,它作为单目运算符表示取内容,它作为双目运算符表示两个操作数相乘,它与斜线符“/片连在一起(/,或,/)表示注释符,另外,它用在说明语句中,用来表示它右边变量为指针等等。还有运算符的15种优先级不要记混了,否则会造成计算值的错误。(2)C语言中类型转换比较灵活,例如,int型与char型可以自动转换。这些自动转换的规定带来一定的计算方便,在C语言中允许一个字符与一个整数进行加减运算,例如'a'+2是合法的,该表达式的值用字符型表示为’c’,用整型数表示为99。为了转换上的方便,在许多情况下将不作类型检查,例如,在只作简单说明时的函数调用中,要求形参和实参类型一致,如’果类型不一致也不判错仍可通过,有时会造成运算结果的错误,为了避免这类错误的发生,可以对函数进行原型说明,这时编译时将会对形参和实参的类型进行检查,增加其安全性。另外,也可使用强制类型运算符来限制其不必要的自动转换。(3)C.语言中数组在动态赋值时不作越界检查。因此,在数组元素的个数少于实际斌值的项数时,编译系统不报越界错,而继续按数组元素所表示的地址进行赎值,这样容易造成数据的混乱。为了避免这种情况的发生,应尽量避免动态的越界赋值。对数组的静态赋值(即赋初值)不会发生越界赋值的现象,静态时出现越界赋值将报错。(4)C语言为了优化等原因允许不同的编译系统在表达式或参数表内重新安排求值顺序。这样对于一般的表达式值和参数表内各项参数值是没有影响的,例如,改变表达式中各操作数的计算顺序不会改变表达式的值。但是,对一些具有副作用的运算符如,增1减1运算符和赋值运算符)来讲,不同的求值顺序将会造成表达式的不同的值。这一点在编写程序时应特别注意,避免出现那些可能有二义性的表达式和参数表。1,2.2C语言的应用从前面对C语言的特点的分析中,不难看出C语言具有编程方便、语句简练、功能很强、移植性好等优点,是编程者喜欢使用的一种结构化程序设计语言。C语言已被广泛地应用于系统软件和应用软件的开发中。在下述的几个方面应用得更广泛。1.数据库管理和应用程序方面C语言的非数值处理功能很强,因此它被广泛地应用于数据库管理系统和应用软件。大多数的关系数据库管理系统,如dBASE,Fox$ASE,ORACLE等,都是由C语言编写的。各种不同部门的应用软件也大都是用G语言开