《C语言讲座版》PPT课件.ppt
C 程序设计程序设计(第二版第二版)新世纪计算机基础教育丛书丛书新世纪计算机基础教育丛书丛书 主编主编 谭浩强谭浩强总总 目目 录录第第1章章C语言概述语言概述第第2章程序的灵魂章程序的灵魂算法算法第第3章数据类型、运算符与表达式章数据类型、运算符与表达式第第4章最简单的章最简单的C程序设计程序设计顺序程序设计顺序程序设计第第5章选择结构程序设计章选择结构程序设计第第6章循环控制章循环控制第第7章数组章数组第第8章函数章函数第第9章预处理命令章预处理命令第第10章指针章指针第第11章结构体与共用体章结构体与共用体第第12章位运算章位运算第第13章文件章文件第第14章章C+对对C的扩充的扩充第第15章章C+的面向对象基础的面向对象基础第第16章常见错误和程序调试章常见错误和程序调试第第1章章 C语言概述语言概述1.1 C语言出现的历史背景语言出现的历史背景1.2 C语言的特点语言的特点1.3 简单的简单的C C程序介绍程序介绍1.4 C程序的上机步骤程序的上机步骤1.5 习题习题1.1 C语言出现的历史背景语言出现的历史背景C语言是国际上广泛流行的计算机高级语言语言是国际上广泛流行的计算机高级语言,既可用来写系统既可用来写系统软件,也可用来写应用软件。软件,也可用来写应用软件。C语言是在语言是在B语言的基础上发展起来的,它的根源可以追溯到语言的基础上发展起来的,它的根源可以追溯到ALGOL 60。1960年出现的年出现的ALGOL 60是一种面向问题的是一种面向问题的高级语言,它离硬件比较远,不宜用来编写系统程序。高级语言,它离硬件比较远,不宜用来编写系统程序。1963年英国的剑桥大学推出了年英国的剑桥大学推出了CPL(combined programming language)语言。语言。CPL语言在语言在ALGOL 60的基的基础上接近硬件一些,但规模比较大,难以实现。础上接近硬件一些,但规模比较大,难以实现。1967年英年英国剑桥大学的国剑桥大学的Matin Richards对对CPL语言做了简化,推出语言做了简化,推出了了BCPL(basic combined programming language)语言。语言。1970年美国贝尔实验室的年美国贝尔实验室的Ken Thompson 以以BCPL语言为基础,语言为基础,又做了进又做了进一步简化,一步简化,设计出了很简单的而且很接近硬件的设计出了很简单的而且很接近硬件的B语言语言(取取BCPL的第一个字母的第一个字母),并用并用B语言写了语言写了第一个第一个UNIX操作系统,在操作系统,在PDP7上实现。上实现。1971年在年在PDP11/20上实现了上实现了B语言,并写了语言,并写了UNIX操作系统。但操作系统。但B语言过于简单,功能有限。语言过于简单,功能有限。1972年至年至1973年间,贝尔实验室的年间,贝尔实验室的D.M.Ritchie 在在B语言的基语言的基础上设计出了础上设计出了C语言语言(取取BCPL的第二个字母的第二个字母)。C语言既保语言既保持了持了BCPL和和B语言的优点语言的优点(精练,接近硬件精练,接近硬件),又克服了它,又克服了它们的缺点们的缺点(过于简单,数据无类型等过于简单,数据无类型等)。最初的。最初的C语言只是语言只是为描述和实现为描述和实现UNIX操作系统提供一种工作语言而设计的。操作系统提供一种工作语言而设计的。1973年,年,K.Thompson和和D.M.Ritchie两人合作把两人合作把UNIX的的90%以上用以上用C改写,即改写,即UNIX第第5版。原来的版。原来的UNIX 操作系操作系统是统是1969年由美国的贝尔实验室的年由美国的贝尔实验室的K.Thompson和和D.M.Ritchie开发成功的,是用汇编语言写的。开发成功的,是用汇编语言写的。1972年至年至1973年间,贝尔实验室的年间,贝尔实验室的D.M.Ritchie 在在B语言的基础语言的基础上设计出了上设计出了C语言语言(取取BCPL的第二个字母的第二个字母)。C语言既保持了语言既保持了BCPL和和B语言的优点语言的优点(精练,接近硬件精练,接近硬件),又克服了它们的缺,又克服了它们的缺点点(过于简单,数据无类型等过于简单,数据无类型等)。最初的。最初的C语言只是为描述和实语言只是为描述和实现现UNIX操作系统提供一种工作语言而设计的。操作系统提供一种工作语言而设计的。1973年,年,K.Thompson和和D.M.Ritchie两人合作把两人合作把UNIX的的90%以上用以上用C改写,即改写,即UNIX第第5版。原来的版。原来的UNIX 操作系统是操作系统是1969年由美年由美国的贝尔实验室的国的贝尔实验室的K.Thompson和和D.M.Ritchie开发成功的,开发成功的,是用汇编语言写的。是用汇编语言写的。后来,后来,C语言多次做了改进,但主要还是在贝尔实验室内部语言多次做了改进,但主要还是在贝尔实验室内部使用。直到使用。直到1975年年UNIX第第6版公布后,版公布后,C语言的突出优点语言的突出优点才引起人们的普遍注意。才引起人们的普遍注意。1977年出现了不依赖于具体机器年出现了不依赖于具体机器的的C语言编译文本语言编译文本可移植可移植C语言编译程序语言编译程序,使,使C移植到移植到其他机器时所需做的工作大大简化了,这也推动了其他机器时所需做的工作大大简化了,这也推动了UNIX操作系统迅速地在各种机器上实现。例如操作系统迅速地在各种机器上实现。例如VAX、AT&T等等计算机系统都相继开发了计算机系统都相继开发了UNIX。随着。随着UNIX的日益广泛使的日益广泛使用,用,C语言也迅速得到推广。语言也迅速得到推广。C语言和语言和UNIX可以说是一对可以说是一对孪生兄弟,在发展过程中相辅相成。孪生兄弟,在发展过程中相辅相成。1978年以后,年以后,C语言语言已先后移植到大、中、小、微型机上,已独立于已先后移植到大、中、小、微型机上,已独立于UNIX和和PDP了。现在了。现在C语言已风靡全世界,成为世界上语言已风靡全世界,成为世界上应用最广泛的几种计算机语言之一。以应用最广泛的几种计算机语言之一。以1978年发表的年发表的UNIX第第7版中的版中的C编译程序为基础,编译程序为基础,Brian W.Kernighan和和Dennis M.Ritchie(合称合称K&R)合著了影响深远的名著合著了影响深远的名著The C Programming Language,这本书中介绍的,这本书中介绍的C语言成为后来广泛使用的语言成为后来广泛使用的C语言版本的基础,它被称为标语言版本的基础,它被称为标准准C。1983年,美国国家标准化协会年,美国国家标准化协会(ANSI)根据根据C语言问语言问世以来各种版本对世以来各种版本对C的发展和扩充,制定了新的标准,称的发展和扩充,制定了新的标准,称为为ANSI C。ANSI C比原来的标准比原来的标准C有了很大的发展。有了很大的发展。K&R在在1988年修改了他们的经典著作年修改了他们的经典著作The C Programming Language,按照,按照 ANSI C 标准重新写了标准重新写了该书。该书。1987年,年,ANSI又公布了新标准又公布了新标准87 ANSIC。1990年,国际标准化组织年,国际标准化组织ISO(International Standard Organization)接受接受87 ANSI C为为ISO C 的标准的标准(ISO 98991990)。目前流行的。目前流行的C编译系统都是以它为基础的。本书的编译系统都是以它为基础的。本书的叙述基本上以叙述基本上以ANSI C 为基础。目前广泛流行的各种版本为基础。目前广泛流行的各种版本C语言编译系统虽然基本部分是相同的,但也有一些不同。语言编译系统虽然基本部分是相同的,但也有一些不同。在微型机上使用的有在微型机上使用的有Microsoft C、Turbo C、Quick C、BORLAND C等,它们的不同版本又略有差异。因此,读等,它们的不同版本又略有差异。因此,读者应了解所用的计算机系统所配置的者应了解所用的计算机系统所配置的C编译系统的特点和编译系统的特点和规定规定(可以参阅有关手册可以参阅有关手册)。1.2 C语言的特点语言的特点一种语言之所以能存在和发展,并具有生命力,总是有其不一种语言之所以能存在和发展,并具有生命力,总是有其不同于同于(或优于或优于)其他语言的特点。其他语言的特点。C语言的主要特点如下。语言的主要特点如下。(1)语言简洁、紧凑,使用方便、灵活。语言简洁、紧凑,使用方便、灵活。C语言一共只有语言一共只有32个个关键字,关键字,9种控制语句,程序书写形式自由,主要用小写字种控制语句,程序书写形式自由,主要用小写字母表示,压缩了一切不必要的成分。下面将母表示,压缩了一切不必要的成分。下面将C与与PASCAL语语言做一比较。言做一比较。(2)运算符丰富。运算符丰富。C的运算符包含的范围很广泛,共有的运算符包含的范围很广泛,共有34种运种运算符。算符。C把括号、赋值、强制类型转换等都作为运算符处把括号、赋值、强制类型转换等都作为运算符处理,从而使理,从而使C的运算类型极其丰富,表达式类型多样化。的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其他高级语言中难以实现灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。的运算。(3)数据结构丰富,具有现代化语言的各种数据结数据结构丰富,具有现代化语言的各种数据结构。构。C的数据类型有整型、实型、字符型、数组的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构能用来实现各种复杂的数据结构(如链表、树、栈如链表、树、栈等等)的运算。尤其是指针类型数据,使用起来比的运算。尤其是指针类型数据,使用起来比PASCAL更为灵活、多样。更为灵活、多样。(4)具有结构化的控制语句具有结构化的控制语句(如如ifelse语句、语句、while语语句、句、dowhile语句、语句、switch语句、语句、for语句语句)。用。用函数作为程序的模块单位,便于实现程序的模块函数作为程序的模块单位,便于实现程序的模块化。化。C是良好的结构化语言,是良好的结构化语言,符合现代编程风格符合现代编程风格的要求。的要求。(5)语法限制不太严格,程序设计自由度大。例如对数语法限制不太严格,程序设计自由度大。例如对数组下标越界不做检查,由程序编写者自己保证程序的组下标越界不做检查,由程序编写者自己保证程序的正确。对变量的类型使用比较灵活,例如整型数据与正确。对变量的类型使用比较灵活,例如整型数据与字符型数据可以通用。一般的高级语言语法检查比较字符型数据可以通用。一般的高级语言语法检查比较严,能检查出几乎所有的语法错误。而严,能检查出几乎所有的语法错误。而C语言允许程语言允许程序编写者有较大的自由度,因此,放宽了语法检查。序编写者有较大的自由度,因此,放宽了语法检查。程序员应当仔细检查程序,保证其正确,而不要过分程序员应当仔细检查程序,保证其正确,而不要过分依赖依赖C编译程序去查错。编译程序去查错。“限制限制”与与“灵活灵活”是一对是一对矛盾。限制严格,就失去灵活性矛盾。限制严格,就失去灵活性;而强调灵活,就必然而强调灵活,就必然放松限制。一个不熟练的编程人员,编一个正确的放松限制。一个不熟练的编程人员,编一个正确的C程序可能会比编一个其他高级语言程序难一些。也就程序可能会比编一个其他高级语言程序难一些。也就是说,对用是说,对用C语言的人,要求对程序设计更熟练一些。语言的人,要求对程序设计更熟练一些。(6)C语言能进行位语言能进行位(bit)操作,能实现汇编语言的大操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此部分功能,可以直接对硬件进行操作。因此C既既具有高级语言的功能,又具有低级语言的许多功具有高级语言的功能,又具有低级语言的许多功能,可用来写系统软件。能,可用来写系统软件。C语言的这种双重性,语言的这种双重性,使它既是成功的系统描述语言,又是通用的程序使它既是成功的系统描述语言,又是通用的程序设计语言。设计语言。有人把有人把C称为称为“高级语言中的低级语言高级语言中的低级语言”或或“中级中级语言语言”,意为兼有高级和低级语言的特点。按此,意为兼有高级和低级语言的特点。按此观点可将各语言分类如下:观点可将各语言分类如下:高级高级:BASIC,FORTRAN,COBOL,PASCAL,Ada,Modula-2;中级中级:C,FORTH,宏汇编;宏汇编;低级低级:汇编语言汇编语言一般仍习惯将一般仍习惯将C语言称为高级语言,因为语言称为高级语言,因为C程序也要通过编译、程序也要通过编译、连接才能得到可执行的目标程序,这是和其他高级语言相连接才能得到可执行的目标程序,这是和其他高级语言相同的。同的。C的以上特点,读者现在也许还不能深刻理解,待学完的以上特点,读者现在也许还不能深刻理解,待学完C以后以后再回顾一下,就会有比较深的体会。我们从应用的角度出再回顾一下,就会有比较深的体会。我们从应用的角度出发对发对C语言和其他传统的高级语言作一简单比较。语言和其他传统的高级语言作一简单比较。从掌握语言的难易程度来看,从掌握语言的难易程度来看,C语言比其他语言难一些。语言比其他语言难一些。BASIC是初学者入门的较好的语言,是初学者入门的较好的语言,FORTRAN也比较也比较好掌握。对科学计算多用好掌握。对科学计算多用FORTRAN或或PL/;对商业和管对商业和管理等数据处理领域,用理等数据处理领域,用COBOL为宜。为宜。C语言虽然也可用语言虽然也可用于科学计算和管理领域,但并不理想,于科学计算和管理领域,但并不理想,C的特长不在这里。的特长不在这里。对操作系统和系统实用程序以及需要对硬件进行操作的对操作系统和系统实用程序以及需要对硬件进行操作的场合,用场合,用C语言明显地优越于其他高级语言,有的大型应语言明显地优越于其他高级语言,有的大型应用软件也用用软件也用C语言编写。从教学角度,由于语言编写。从教学角度,由于PASCAL是世是世界上第一个结构化语言,而曾被认为是计算机专业的比界上第一个结构化语言,而曾被认为是计算机专业的比较理想的教学语言。目前在数据结构等课程中一般用较理想的教学语言。目前在数据结构等课程中一般用PASCAL语言举例。但语言举例。但PASCAL语言难以推广到各实际应语言难以推广到各实际应用领域,用领域,到目前为止基本上只是教学语言。到目前为止基本上只是教学语言。C语言也是理想的结构语言也是理想的结构化语言,化语言,且描述能力强,且描述能力强,同样适于教学。同样适于教学。操作系统课程操作系统课程多结合多结合UNIX讲解,而讲解,而UNIX与与C不可分,因此,不可分,因此,C语言已语言已经成为被广泛使用的教学语言。经成为被广泛使用的教学语言。C除了能用于教学外,还除了能用于教学外,还有广泛的应用领域,因此更有生命力。有广泛的应用领域,因此更有生命力。PASCAL和其他高和其他高级语言的设计目标是通过严格的语法定义和检查来保证级语言的设计目标是通过严格的语法定义和检查来保证程序的正确性,而程序的正确性,而C则是强调灵活性,使程序设计人员能则是强调灵活性,使程序设计人员能有较大的自由度,以适应宽广的应用面。总之,有较大的自由度,以适应宽广的应用面。总之,C语言对语言对程序员要求较高。程序员使用程序员要求较高。程序员使用C语言编写程序会感到限制语言编写程序会感到限制少,灵活性大,功能强,可以编写出任何类型的程序。少,灵活性大,功能强,可以编写出任何类型的程序。现在,现在,C语言已不仅用来编写系统软件,也用来编写应用语言已不仅用来编写系统软件,也用来编写应用软件。学习和使用软件。学习和使用C的人已越来越多。的人已越来越多。1.3 简单的简单的C程序介绍程序介绍下面先介绍几个简单的下面先介绍几个简单的C程序,然后从中分析程序,然后从中分析C程序的特性。程序的特性。例例 1.1 main()printf(This is a C program.n);本程序的作用是输出以下一行信息本程序的作用是输出以下一行信息:This is a c program.其中其中 main 表示表示“主函数主函数”。每一个。每一个C程序都必须有一个程序都必须有一个 main 函函数。函数体由大括弧数。函数体由大括弧括起来。本例中主函数内只有一个输出括起来。本例中主函数内只有一个输出语句,语句,printf是是C语言中的输出函数语言中的输出函数(详见第详见第4章章)。双引号(双。双引号(双括号)内的字符串原样输出。括号)内的字符串原样输出。“n”是换行符,即在输出是换行符,即在输出“This is a c program.”后回车换行。语句最后有一分号。后回车换行。语句最后有一分号。例例 1.2main()/*求两数之和求两数之和*/int a,b,sum;/*这是定义变量这是定义变量*/a=123;b=456;/*以下以下3行为行为C语句语句*/sum=a+b;printf(sum is%d/n,sum);本程序的作用是求两个整数本程序的作用是求两个整数a和和b之和之和sum。/*/表示注表示注释部分,为便于理解,我们用汉字表示注释,当然也可释部分,为便于理解,我们用汉字表示注释,当然也可以用英语或汉字拼音作注释。注释只是给人看的,对编以用英语或汉字拼音作注释。注释只是给人看的,对编译和运行不起作用。注释可以加在程序中任何位置。第译和运行不起作用。注释可以加在程序中任何位置。第2行是声明部分,行是声明部分,定义变量定义变量a和和b,指定,指定 a和和b为整型为整型(int)变变量。第量。第3行是两个赋值语句,使行是两个赋值语句,使a和和b的值分别为的值分别为123和和456。第。第4行使行使sum的值为的值为a+b,第,第5行中行中“%d”是输入输出是输入输出的的“格式字符串格式字符串”,用来指定输入输出时的数据类型和,用来指定输入输出时的数据类型和格式格式(详见第详见第4章章),“%d”表示表示“以十进制整数形式输出以十进制整数形式输出”。在执行输出时,此位置上代以一个十进制整数值。在执行输出时,此位置上代以一个十进制整数值。printf函数中括弧内最右端函数中括弧内最右端sum是要输出的变量,现在它是要输出的变量,现在它的值为的值为579(即即123+456之值之值)。因此输出一行信息为。因此输出一行信息为sum is 579例例1.3main()/*主函数主函数*/int a,b,c;/*声明部分,定义变量声明部分,定义变量*/scanf(%d,%d,&a,&b);/*输入变量输入变量a和和b的值的值*/c=max(a,b);/*调用调用max函数,将得到的值赋给函数,将得到的值赋给c*/printf(max=%d,c);/*输出输出c的值的值*/int max(int x,int y)/*定义定义max函数,函数值为整函数,函数值为整型,型,形式参数形式参数x,y为整型为整型*/int z;/*max函数中的声明部分,定义本函数中用函数中的声明部分,定义本函数中用到的变量到的变量z为整型为整型*/if(xy)z=x;else z=y;return(z);/*将将z的值返回,通过的值返回,通过max带回调用处带回调用处*/本程序包括两个函数本程序包括两个函数:主函数主函数main和被调用的函数和被调用的函数max。max函数的作用是将函数的作用是将x和和y中较大者的值赋给变量中较大者的值赋给变量z。return语句语句将将z的值返回给主调函数的值返回给主调函数main。返回值是通过函数名。返回值是通过函数名max带回到带回到main函数的调用处。函数的调用处。main函数中的函数中的scanf是是“输入输入函数函数”的名字的名字(scanf和和printf都是都是C系统提供的标准输入输系统提供的标准输入输出函数出函数)。程序中。程序中scanf函数的作用是输入函数的作用是输入a和和b的值。的值。&a和和&b中的中的“&”的含义是的含义是“取地址取地址”,此,此scanf函数的作用是函数的作用是将两个数值分别输入到变量将两个数值分别输入到变量a和和b的地址所标志的单元中,的地址所标志的单元中,也就是输入给变量也就是输入给变量a和和b。这种形式是与其他语言不同的。这种形式是与其他语言不同的。它相当于它相当于BASIC语言中的语言中的INPUT a,b或或PASCAL语言中的语言中的Read(a,b)。&a和和&b前面的前面的“%d,%d”的含义与前相同,的含义与前相同,只是现在用于只是现在用于“输入输入”。它指定输入的两个数据。它指定输入的两个数据按十进制整数形式输入。关于按十进制整数形式输入。关于scanf函数详见第函数详见第4章。章。main函数中第函数中第4行为调用行为调用max函数,在调用时将实际函数,在调用时将实际参数参数a和和b的值分别传送给的值分别传送给max函数中的形式参数函数中的形式参数x和和y。经过执行。经过执行max函数得到一个返回值函数得到一个返回值(即即max函函数中变量数中变量z的值的值),把这个值赋给变量,把这个值赋给变量c。然后输出。然后输出c的值。的值。printf函数中双引号内的函数中双引号内的“max=%d”,在输,在输出时,其中出时,其中“%d”将由将由c的值取代之,的值取代之,“max=”原原样输出。程序运行情况如下样输出。程序运行情况如下:8,5 (输入输入8和和5给给a和和b)max=8 (输出输出c的值的值)本例用到了函数调用、实际参数和形式参数等概念,我们只本例用到了函数调用、实际参数和形式参数等概念,我们只做了很简单的解释。读者如对此不大理解,可以先不予以做了很简单的解释。读者如对此不大理解,可以先不予以深究,在学到以后有关章节时,问题自然迎刃而解。在此深究,在学到以后有关章节时,问题自然迎刃而解。在此介绍此例子,无非是使读者对介绍此例子,无非是使读者对C程序的组成和形式有一个程序的组成和形式有一个初步的了解。初步的了解。通过以上几个例子,可以看到通过以上几个例子,可以看到:(1)C程序是由函数构成的。一个程序是由函数构成的。一个C源程序至少包含一个源程序至少包含一个main函数,也可以包含一个函数,也可以包含一个main函数和若干个其他函数。因此,函数和若干个其他函数。因此,函数是函数是C程序的基本单位。被调用的函数可以是系统提供程序的基本单位。被调用的函数可以是系统提供的库函数的库函数(例如例如printf和和scanf函数函数),也可以是用户根据需要,也可以是用户根据需要自自 己编制设计的函数己编制设计的函数(例如,例例如,例1.3中的中的max函数函数)。C的函数相当的函数相当于其他语言中的子程序,用函数来实现特定的功能。程序中于其他语言中的子程序,用函数来实现特定的功能。程序中的全部工作都是由各个函数分别完成的。编写的全部工作都是由各个函数分别完成的。编写C程序就是编写程序就是编写一个个函数。一个个函数。C的函数库十分丰富,的函数库十分丰富,ANSI C建议的标准库函建议的标准库函数中包括数中包括100多个函数,多个函数,Turbo C和和MS C 4.0提供提供300多个库函多个库函数。数。C的这种特点使得容易实现程序的模块化。的这种特点使得容易实现程序的模块化。(2)一个函数由两部分组成一个函数由两部分组成:函数的首部,即函数的第一行。包括函数名、函数类型、函函数的首部,即函数的第一行。包括函数名、函数类型、函数属性、函数参数数属性、函数参数(形参形参)名、参数类型。名、参数类型。例如,例例如,例1.3中的中的max函数的首部为函数的首部为int max (int x,int y)函数类型函数类型 函数名函数名 函数参数类型函数参数类型 函数参数名函数参数名 函数参数类型函数参数类型 函数参数名函数参数名一个函数名后面必须跟一对圆括弧,一个函数名后面必须跟一对圆括弧,函数参数可函数参数可以没有,如以没有,如main()。函数体,即函数首部下面的大括弧函数体,即函数首部下面的大括弧内的部内的部分。如果一个函数内有多个大括弧,则最外层的分。如果一个函数内有多个大括弧,则最外层的一对一对 为函数体的范围。为函数体的范围。函数体一般包括函数体一般包括:声明部分:在这部分中定义所用到的变量,如例声明部分:在这部分中定义所用到的变量,如例1.3中中main函数中的函数中的“int a,b,c;”。在第在第8章中章中还将会看到,在声明部分中要对所调用的函数进还将会看到,在声明部分中要对所调用的函数进行声明。行声明。执行部分:由若干个语句组成。执行部分:由若干个语句组成。当然,在某些情况下也可以没有声明部分当然,在某些情况下也可以没有声明部分(例如,例如,例例1.1)。甚至可以既无声明部分,也无执行部分。甚至可以既无声明部分,也无执行部分。如如:dump()它是一个空函数,什么也不干,但这是合法的。它是一个空函数,什么也不干,但这是合法的。(3)一个一个C程序总是从程序总是从main函数开始执行的,而不函数开始执行的,而不论论main函数在整个程序中的位置如何函数在整个程序中的位置如何(main函数可函数可以放在程序最前头,也可以放在程序最后,或在一以放在程序最前头,也可以放在程序最后,或在一些函数之前,在另一些函数之后些函数之前,在另一些函数之后)。(4)C程序书写格式自由,一行内可以写几个语句,程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。一个语句可以分写在多行上。C程序没有行号,程序没有行号,也不像也不像FORTRAN或或COBOL那样严格规定书写那样严格规定书写格式格式(语句必须从某一列开始书写语句必须从某一列开始书写)。(5)每个语句和数据定义的最后必须有一个分号。每个语句和数据定义的最后必须有一个分号。分号是分号是C语句的必要组成部分。例如语句的必要组成部分。例如:c=a+b;分号不可少。即使是程序中最后一个语句也应包含分号不可少。即使是程序中最后一个语句也应包含分号分号(这是和这是和PASCAL语言不同的语言不同的)。(6)C语言本身没有输入输出语句。输入和输出的操语言本身没有输入输出语句。输入和输出的操作是由库函数作是由库函数scanf和和printf等函数来完成的。等函数来完成的。C对输入输出实行对输入输出实行“函数化函数化”。由于输入输出操作。由于输入输出操作牵涉到具体的计算机设备,把输入输出操作放在牵涉到具体的计算机设备,把输入输出操作放在函数中处理,就可以使函数中处理,就可以使C语言本身的规模较小,语言本身的规模较小,编译程序简单,很容易在各种机器上实现,程序编译程序简单,很容易在各种机器上实现,程序具有可移植性。当然,不同的具有可移植性。当然,不同的C语言系统需要对语言系统需要对函数库中的函数作不同的处理。不同的函数库中的函数作不同的处理。不同的C系统除系统除了提供函数库中的标准函数外,还按照硬件的情了提供函数库中的标准函数外,还按照硬件的情况提供一些专门的函数。因此不同的系统所提供况提供一些专门的函数。因此不同的系统所提供的函数个数和功能是有所不同的。的函数个数和功能是有所不同的。(7)可以用可以用/*/对对C程序中的任何部分作注释。程序中的任何部分作注释。一个好的、有使用价值的源程序都应当加上必要一个好的、有使用价值的源程序都应当加上必要的注释,以增加程序的可读性。的注释,以增加程序的可读性。1.4 C程序的上机步骤程序的上机步骤我们已经看到了一些用我们已经看到了一些用C语言编写的程序。为了使计算机能按语言编写的程序。为了使计算机能按照人们的意志进行工作,必须根据问题的要求,编写出相应照人们的意志进行工作,必须根据问题的要求,编写出相应的程序。所谓程序,就是一组计算机能识别和执行的指令。的程序。所谓程序,就是一组计算机能识别和执行的指令。每一条指令使计算机执行特定的操作。程序可以用高级语言每一条指令使计算机执行特定的操作。程序可以用高级语言(例如(例如QBASIC,FORTRAN,PASCAL,C等)编写。用高等)编写。用高级语言编写的程序称为级语言编写的程序称为“源程序源程序”(source program)。从)。从根本上说,计算机只能识别和执行由根本上说,计算机只能识别和执行由0和和1组成的二进制的指组成的二进制的指令,而不能识别和执行用高级语言写的指令。为了使计算机令,而不能识别和执行用高级语言写的指令。为了使计算机能执行高级语言源程序,必须先用一种称为能执行高级语言源程序,必须先用一种称为“编译程序编译程序”的的软件,把源程序翻译成二进制形式的软件,把源程序翻译成二进制形式的“目标程序目标程序”,然后将然后将该目标程序与系统的函数库和其他目标程序连接起来,形成该目标程序与系统的函数库和其他目标程序连接起来,形成可执行的目标程序。可执行的目标程序。图图1.1在编好一个在编好一个C源程序后,如何上机运行呢源程序后,如何上机运行呢?在纸上写好一个在纸上写好一个程序后,要经过以下几个步骤:上机输入与编辑源程序程序后,要经过以下几个步骤:上机输入与编辑源程序对源程序进行编译与库函数连接运行目标程序这样几个对源程序进行编译与库函数连接运行目标程序这样几个步骤。步骤。以上过程如图以上过程如图1.1所示。其中实线表示操作流程,虚线表示所示。其中实线表示操作流程,虚线表示文件的输入输出。例如,编辑后得到一个源程序文件文件的输入输出。例如,编辑后得到一个源程序文件f.c,然后在进行编译时再将源程序文件然后在进行编译时再将源程序文件f.c输入,经过编译输入,经过编译得到目标程序文件得到目标程序文件f.obj,再将目标程序文件,再将目标程序文件f.obj输入内存,输入内存,与系统提供的库函数等连接,得到可执行的目标程序文与系统提供的库函数等连接,得到可执行的目标程序文件件f.exe,最后把,最后把f.exe调入内存并使之运行。调入内存并使之运行。在了解了在了解了C语言的初步知识后,读者最好上机运行一个语言的初步知识后,读者最好上机运行一个C程程序,以建立对序,以建立对C程序的初步认识。程序的初步认识。下面分别就三种不同的环境下运行下面分别就三种不同的环境下运行C程序作一简单程序作一简单介绍。介绍。1.用用Turbo C 运行运行C程序的步骤程序的步骤Turbo C是在微机上广泛使用的编译程序。它具有是在微机上广泛使用的编译程序。它具有方便、直观、易用的界面和丰富的库函数。它向方便、直观、易用的界面和丰富的库函数。它向用户提供一个集成环境,把程序的编辑、编译、用户提供一个集成环境,把程序的编辑、编译、连接和运行等操作全部集中在一个界面上进行,连接和运行等操作全部集中在一个界面上进行,使用十分方便。使用十分方便。为了能使用为了能使用Turbo C,必须先将,必须先将Turbo C编译程序装编译程序装入磁盘的某一目录下,例如放在入磁盘的某一目录下,例如放在C盘根目录下一盘根目录下一级级TC子目录下。子目录下。图图1.2(1)调用调用 Turbo C程序。如果用户的当前目录是程序。如果用户的当前目录是Turbo C编译程序所在的子目录(例如编译程序所在的子目录(例如TC子目子目录),只需从键盘键入录),只需从键盘键入“tc”命令即可命令即可:C:TCtc 屏幕上出现屏幕上出现Turbo C集成环境,见图集成环境,见图1.2所示。从图所示。从图1.2可以看到在集成环境的上部,有一行可以看到在集成环境的上部,有一行“主菜单主菜单”,其中包括下面其中包括下面8个菜单项个菜单项:File Edit Run Compile Project Option Debug break/watch用户可以通过以上菜单项来选择使用用户可以通过以上菜单项来选择使用Turbo C集成集成环境所提供的环境所提供的Turbo C的各项主要功能。以上的各项主要功能。以上8个个菜单项分别代表:文件操作、编辑、运行、编译、菜单项分别代表:文件操作、编辑、运行、编译、项目文件、选项、调试、中断项目文件、选项、调试、中断/观察等功能。观察等功能。用键盘上的用键盘上的“”和和“”键可以选择菜单条中所键可以选择菜单条中所需要的菜单项,被选中的项以需要的菜单项,被选中的项以“反相反相”图图1.3形式形式显示显示(例如主菜单中的各项原来以白(例如主菜单中的各项原来以白底黑字显示,被选中时改为以底黑字显示,被选中时改为以黑底白字显示)。黑底白字显示)。此时若按回此时若按回车键,就会出现一个下拉菜单。车键,就会出现一个下拉菜单。例如在选中例如在选中“File”菜单并按菜单并按回车键后,屏幕上回车键后,屏幕上“File”下下面出现下拉菜单,见图面出现下拉菜单,见图1.3所示。所示。它是一个子菜单,提供多项选它是一个子菜单,提供多项选择。可以用择。可以用“”键选择所需键选择所需要的项。例如选择要的项。例如选择“New”处,处,并按回车键,表示要建立一个并按回车键,表示要建立一个新的新的C源程序。源程序。图图1.3如果选择如果选择“Load”,并按回车键,并按回车键,表示要调入一个已有表示要调入一个已有的源文件,此时屏幕上出现一个对话框的源文件,此时屏幕上出现一个对话框(见图见图1.4)。要求。要求你输入该文件的名字。用户可输入该文件名,例如你输入该文件的名字。用户可输入该文件名,例如:tc1.c,如果已存在此文件,则系统会将此文件调入内存并显,如果已存在此文件,则系统会将此文件调入内存并显示在屏幕上。此时自动转为编辑示在屏幕上。此时自动转为编辑(Edit)状态。状态。如果原来不存在此文件名,则系统会建立一个以指定的名如果原来不存在此文件名,则系统会建立一个以指定的名字命名的新文件。字命名的新文件。图图1.4(2)编辑源文件。在编辑编辑源文件。在编辑(Edit)状态下可以根据需要输入或状态下可以根据需要输入或修改源程序。修改源程序。(3)编译源程序。选择编译源程序。选择“Compile”菜单并在其下拉菜单中菜单并在其下拉菜单中选择选择“Compile to OBJ”,则进行编译,得到一个后缀为,则进行编译,得到一个后缀为.obj的目标程序(为方便起见,在一般书刊中,以上菜单的目标程序(为方便起见,在一般书刊中,以上菜单的选择以的选择以“Compile/Compile to OBJ”表示表示)。然后再选菜。然后再选菜单单“Compile/Link EXE file”,进行连接操作,可得到一进行连接操作,可得到一个后缀为个后缀为.exe的可执行文件。也可以将编译和连接合为一的可执行文件。也可以将编译和连接合为一个步骤进行。选菜单个步骤进行。选菜单“Compile/Make EXE file”或按或按“F9”键,即可一次完成编译和连接。在屏幕上会显示键,即可一次完成编译和连接。在屏幕上会显示编译或连接时有无错误和有几个错误,见图编译或连接时有无错误和有几个错误,见图1.5所示。此所示。此时按任何一个键,时按任何一个键,图图1.5所显示的所显示的“编译信息框编译信息框”会会图图1.5 消失,屏幕上会恢复显示源程序,光标停留在出错之处。失,屏幕上会恢复显示源程序,光标停留在出错之处。在屏幕的下半部分显示出有错误的行和错误的原因。根据在屏幕的下半部分显示出有错误的行和错误的原因。根据此信息修改源程序。修改完毕认为无错后,再按此信息修改源程序。修改完毕认为无错后,再按“F9”,再次进行编译和连接,如此反复进行到不显示出错为止。再次进行编译和连接,如此反复进行到不显示出错为止。(4)执行程序。按执行程序。按“F10”键,键,在窗口上部的主菜单中某一在窗口上部的主菜单中某一项处出现项处出现“反相反相”显示(黑色亮块)。显示(黑色亮块)。File Edit Run Compile Project Option