资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,C,程序设计,(,第三版,),谭浩强 著,清华大学出版社,目 录,第,1,章,C,语言概述,第,2,章程序的灵魂,算法,第,3,章数据类型、运算符与表达式,第,4,章最简单的,C,程序设计,顺序程序设计,第,5,章选择结构程序设计,第,6,章循环控制,第,7,章数组,第,8,章函数,第,9,章预处理命令,第,10,章指针,第,11,章结构体与共用体,第,12,章位运算,第,13,章文件,第,14,章常见错误和程序调试,第,1,章,C,语言概述,1.1 C,语言出现的历史背景,1.2 C,语言的特点,1.3,简单的,C,程序介绍,1.4,运行,C,程序的步骤与方法,1.1 C,语言出现的历史背景,在,C,语言诞生以前,系统软件主要是用汇编语言编写的。由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差;一般的高级语言又难以实现对计算机硬件的直接操作,于是人们希望有一种兼有汇编语言和一般高级语言特性的新语言。,C,语言在这种情况下应运而生。,C,语言是贝尔实验室于,70,年代初研制出来的,后来又被多次改进,并出现了多种版本。,80,年代初,美国国家标准化协会(,ANSI,),根据,C,语言问世以来各种版本对,C,语言的发展和扩充,制定了,ANSI C,标准。目前流行的,C,语言编译系统大多是以,ANSI C,为基础进行开发的。,C,语言是国际上广泛流行的计算机高级语言。它适合作为系统描述语言,既可以用来编写系统软件,也可以来编写应用软件。,C,语言的前身是,B,语言,1960 ALGOL60,离硬件远,不宜编写系统程序,1963 CPL,离硬件近,但规模较大,难以实现,1967 BCPL,对,CPL,做了简化,1970,贝尔实验室以,BCPL,语言为基础,进一步简化,设计 出了很简单的而且很接近硬件的,B,语言,并用,B,语言编写了一个,UNIX,操作系统,在,PDPT,上实现,此时的,B,语言过于简单,功能有限,19721973,年间,贝尔实验室的,D.M.Ritchie,在,B,语言的基础上设计出了,C,语言(,BCPL),C,语言既保持了,BCPL,和,B,语言的优点(精炼,接近硬件)又克服了它们的缺电(过于简单,数据无类型等)。,最近的,C,语言只是为描述和实现,UNIX,操作系统提供一种工作语言而设计的,,UNIX,原用汇编写的,后,90%,用,C,编写。,后来,,C,语言多次作了改进,但主要还是在贝尔实验室内部使用。直到,1975,年,UNIX,第,6,版发布后,,C,语言的突出优点才引起人们的普遍注意。,1997,年出现了不依赖于具体机器的,C,语言便以文本,可移植,C,语言编译程序,,使,C,语言移植到其他机器时所需做的工作大大简化了,这也推动了,UNIX,操作系统迅速的在各种机器上实现。,随着,UNIX,的日益广泛使用,,C,语言也迅速得到推广。,C,语言和,UNIX,可以说是一对孪生兄弟,在发展过程中相辅相成。,1978,年以后,,C,语言先后移植到大、中、小型计算机上,已独立于,UNIX,和,PDP,了。,C,语言便很快风靡全世界,成为世界上应用最广泛的几种计算机语言之一。,1983,年,美国国家标准化协会(,ANSI,)根据,C,语言问世以来各种版本对,C,语言的发展和补充,制定了新的标准,成为,ANSI C,。,ANSI C,比后来的标准,C,有了很大的发展。,1987,年,,ANSI,又公布了新标准,-87 ANSI C,1990,年,国际标准组织,ISO,接受,87 ANSIC,为,ISO,的标准。,1994,年,,ISO,修订了,C,语言标准。,目前流行的,C,语言编译系统大多是以,ANSI C,为基础进行开发的,但不同版本的,C,编译系统所实现的语言功能及语法规则又略有差别,本书基本上已,ANSI C,为基础。,1.2 C,语言的特点,一种语言之所以存在和发展,并具有较强的生命力,总之有起不同于,(,或优于,),其他语言的特点,.,C,语言的主要特点如下,:,语言简洁、紧凑,使用方便、灵活。,C,语言一共只有,32,个关键字,,9,种控制语句,程序书写形式自由,主要用小写字母表示,压缩了一切不必要的成分。比其他许多高级语言简洁,源程序短,因此输入工程时工作量少,.,运算符丰富。,C,的运算符包含的范围很广泛,共有,34,种运算符。,C,把括号、赋值、强制类型转换等都作为运算符处理,从而使,C,的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其他高级语言中难以实现的运算,.,数据结构丰富,具有现代化语言的各种数据结构。,C,的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构,(,如链表、树、栈等,),的运算。尤其是指针,只,C,存在于,C,语言和,Pascal,语言中。,具有结构化的控制语句,(,如,if,else,语句、,while,语句、,do,while,语句、,switch,语句、,for,语句,),。用函数作为程序的模块单位,便于实现程序的模块化。,C,是良好的结构化语言,符合现代编程风格的要求。,生成目标代码质量高,程序执行效率高。,C,语言一般只比汇编程序生成的目标代码效率低,10%-20%,。,语法限制不太严格,程序设计自由度大。一般的高级语言语言语法检查比较严格,能检查出几乎所有的语法错误,而,C,语言允许程序员有较大的自由度,因此放宽了语法检查。程序员应当仔细检查程序,保证其正确,而不要过分依赖,C,语言编译程序去查错。,“限制”与“灵活”是一对矛盾。一个不熟悉的人员,编一个正确的,C,语言程序可能比编一个其他高级语言程序难一些。也就是对,C,语言的人,要求对程序设计更熟练一些。例如对数组下标越界不做检查,由程序编写者自己保证程序的正确。对变量的类型使用比较灵活,例如整型数据与字符型数据可以通用。,C,语言允许直接访问物理地址,能进行位,(,bit,),操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此,C,语言既有高级语言的功能,又具有低级语言的许多功能,可用来编写系统软件。,C,语言的这种双重性,有人把它成为“高级语言中的低级语言”或“中级语言”。,用,C,语言写的程序可移植性好,(,与汇编语言比,),。基本上不作修改就能用于各种型号的计算机和各种操作系统。,从应用方面来看:,语言较难学。,初学者:,BASIC FORTRAN,科学计算:,FORTRAN,数据处理:,COBOL,(银行系统),系统软件:语言,有些大型软件:,C,语言,教学角度:,PASCAL,(单一结构化语言),但大多数高校已用,C,语言取代了,PASCAL,语言。,目前,C,语言成了学习和使用人数最多的一种计算机语言。熟练掌握,C,语言成为计算机开发人员的一项基本功。,近年来,面向对象的,C+,语言在我国逐渐得到推广。但是不应认为:,C,过时了,应学,C+,不学,C,C+,是为解决编写大型软件的问题而产生的,学起来比,C,语言困难得多。将来并不是所有的人都去编写大型软件。因此,在发达国家的大学中,,C,语言仍是一门重要的课程,是大学生的一种基本的选择。掌握了,C,,日后再学,C+,是不会太困难的。,1.3,简单的,C,程序介绍,下面介绍几个简单的,C,语言程序,然后从中分析,C,语言程序的特点。,【,例,1.1】,输出一行信息。,本程序的作用是输出以下一行信息,:,This is a C program.,#include,void main(),printf(This is a C program.n);,【,例,1.2】,求两数之和。,本程序的作用是求两个整数,a,和,b,之和,sum,。程序运行时输出以下信息:,sum is 579,#include,void main(),/*,求两数之和*,/,int a,b,sum;,/*,这是声明部分,定义变量,a,b,sum,为整型*,/,a=123;b=456;,/*,以下,3,行为,C,语句*,/,sum=a+b;,printf(sum is%dn,sum);,【,例,1.3】,求,2,个数中较大者。,#include,void main()/*,主函数*,/,int max(int x,int y);/*,对被调用函数,max,的声明*,/,int a,b,c;/*,声明部分,定义变量*,/,scanf(%d,%d,/*,输入变量,a,和,b,的值*,/,c=max(a,b);/*,调用,max,函数,将得到的值赋给,c*/,printf(max=%dn,c);/*,输出,c,的值*,/,int max(int x,int y)/*,定义,max,函数,函数值为整型*,/,int z;/*max,函数中的声明部分*,/,if(xy)z=x;,else z=y;,return(z);/*,将,z,的值返回,通过,max,带回调用函数的位置*,/,例,1.3,中程序包括两个函数:主函数,main,和被调用的函数,max,。,max,函数的作用是将,x,和,y,中较大者的值赋给变量,z,。,return,语句将,z,的值返回给主调函数,main,。返回值是通过函数名,max,带回到,main,函数的调用处。,程序第,4,行是对被调用函数,max,的声明。,main,函数中的,scanf,是“输入函数”的名字。程序中,scanf,函数的作用是输入,a,和,b,的值。,&a,和,&b,中的“,&”,的含义是“取地址”,此,scanf,函数的作用是将两个数值分别输入到变量,a,和,b,的地址所标志的单元中,也就是输入给变量,a,和,b,。,程序第,7,行为调用,max,函数,在调用时将实际参数,a,和,b,的值分别传送给,max,函数中的形式参数,x,和,y,。经过执行,max,函数得到一个返回值,(,即,max,函数中变量,z,的值,),,把这个值赋给变量,c,。然后输出,c,的值。,printf,函数中双引号内的“,max=%dn”,,在输出时,将“,max=”,原样输出,“,%d”,将由,c,的值取代之,“,n”,执行换行。,通过以上几个例子,可以看到:,C,程序是由函数构成的。一个,C,源程序至少且仅包含一个,main,函数,也可以包含一个,main,函数和若干个其他函数。因此,函数是,C,程序的基本单位。,被调用的函数可以使系统提供的库函数,也可以是用户根据需要自己定义的函数。编写,C,程序就是编写一个个函数,,ANSIC,提供一百多个库函数,,Tuboc,提供三百多个库函数。,一个函数由两部分组成,:,1,)函数的首部,即函数的第一行。包括函数名、函数类型、函数属性、函数参数,(,形参,),名、参数类型。,例如,例,1.3,中的,max,函数的首部为,int max (int x,int y),函数类型 函数名 函数参数类型 函数参数名 函数参数类型 函数参数名,2,)函数体,即函数首部下面的大括弧,内的部分。如果一个函数内有多个大括弧,则最外层的一对,为函数体的范围。函数体一般包括:声明部分;执行部分。,一个,C,程序总是从,main,函数开始执行的,而不论,main,函数在整个程序中的位置如何,(main,函数可以放在程序最前头,也可以放在程序最后,或在一些函数之前,在另一些函数之后,),。,C,程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。没有行号。,每个语句和数据定义的最后必须有一个分号。分号是,C,语句的必要组成部分。,C,语言本身没有输入输出语句。输入和输出的操作是由库函数,scanf,和,printf,等函数来完成的。,可以用,/*/,对,C,程序中的任何部分作注释。一个好的、有使用价值的源程序都应当加上必要的注释,以增加程序的可读性。,1.4,运行,C,程序的步骤与方法,在编好一个,C,源程序后,如何上机运行呢,?,在纸上写好一个程序后,要经过以下几个步骤:上机输入与编辑源程序对源程序进行编译与库函数连接运行目标程序这样几个步骤。以上过程如图,1.1,所示。其中实线表示操作流程,虚线表示文件的输入输出。,图,1.1,一、运行,C,程序的步骤:,上机输入程序,对源程序变异,与库函数链接,运行目标程序。,源程序文件为,.C,,编译后得到目标文件,.obj,与库函数连接后,得到可执行的目标程序为,.exe,最后运行,.exe,。,二、上机运行程序的方法:,机房已经安装,Turbo C,环境以下按此版本讲授,V C+,等有导论讲。,、进入,Turbo C,环境,()点,Windows,桌面左下角的“开始”按钮,()鼠标移到“程序”按钮,在右边菜单中找,c:,命令提示,符,单击或者移到运行单击,在窗口中输入,cmd,,,按确定。,()此时在,DOS,状态下。,输入,DOS,命令,CD TC,按回车,TC,按回车,进入,TC,环境按回车,、编辑源文件,()新建一个源程序,()修改已有源程序,()编译,回车 回车,file,new,open,.,G:,修改,Compile,(,4,)连接 回车 回车,compile link,(,5,)执行,回车,也可以省掉(,3,)(,4,),直接执行,(,6,)推出,TC,环境,file +Quit,回到,DOS,输入,exit+,回车 回到,windows,本章习题:,1.5 1.6,熟悉上机过程,compile,Link,Run,File+,回车,QUIT,
展开阅读全文