资源描述:
《清华谭浩强c语言课件教学ppt第8章_函数》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章函数8.1概述C语言是通过函数来实现模块化程序设计的。一个较大的程序应分为若干程序模块,每个模块实现一个特定的功能,这个模块称为子程序。C的子程序是通过函数实现的,函数是C语言程序的基本单位。函数的构成C源程序是由函数组成的。函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能。实用程序往往包括一个主函数main()和若干其他函数。其中主函数main()是必须的,它是所有函数的执行起点。由主函数调用其它函数,其它函数也可以互相调用,同一函数可以被一个或多个函数调用任意多次。调用示意图如下:C程序的全部工作都是由各式各样的函数完成的,所以也把C语言称为函
2、数式语言。f11(){…}f11(){…}f31(){…}f1(){…f11();…}f2(){…f11();f22();…}main(){…f1();…f2();…}程序开发中使用函数的优点1)使用函数可以控制任务的规模2)使用函数可以控制变量的作用范围3)使用函数,程序的开发可以由多人分工协作4)使用函数,可以重新利用已有的、调式好的、成熟的程序模块5)函数模块相对独立,功能单一,可混合编写也可独立编写调试。函数的一些说明1)一个C程序由多个程序模块组成,每个模块作为一个源程序文件,多个源程序文件组成一个C程序,这样便于分别编写分别编译,提高调试效率,一个源程序
3、文件可为多个C程序共用。2)一个源程序文件由一个或多个函数及其相关内容(如数据定义等)组成,一个源程序文件是一个基本的编译单位。3)C程序的执行从主函数main()开始(称为主调函数),可以调用其它函数(称为被调用函数),调用流程返回main(),最后函数在main()中结束。4)所有函数都是平行的,在定义时候是分别进行的,相互独立,无从属关系,不可嵌套定义。函数间可相互调用,但不能调用主函数,主函数只能由系统调用。函数的分类1.从用户使用的角度1)标准函数(库函数),由系统提供,用户不必自定义可直接使用,注意:不同C编译系统提供的库函数可能有些不同2)用户自定义函
4、数,用来解决用户专门需要。2.从函数的形式1)无参函数。在调用函数时,main不向被调用函数传递数据,只用来执行一组操作。2)有参函数,主调函数在调用被调用函数时,通过参数向其传递数据,一般情况下,执行被调用函数时,得到一个函数值,供主调函数使用。8.2函数定义的一般形式函数应当先定义,后调用(1)无参函数的一般形式函数类型函数名(){说明语句部分;可执行语句部分;}无参函数一般不需要返回函数值,函数类型void类型(空类型)2)有参函数的一般形式函数类型函数名(形参表列){说明语句部分;可执行语句部分;}例:intmax(x,y)intx,y;/形式参数说明/
5、{intz;/函数体中的说明部分/z=x>y?x:y;return(z);}这两行可以写成一行:intmax(intx,inty)3.“空函数”类型说明符函数名(){}“空函数”什么操作也不做。其作用是在此处留一函数的位置,以便将来扩充功能之用。函数名也在将来换取实际的函数名。函数定义的一些说明1.函数头(首部):说明了函数类型、函数名称及参数。(1)函数类型:函数返回值的数据类型,可以是基本数据类型也可以是构造类型。如果省略默认为int,如果不返回值,定义为void类型。(2)函数名:给函数取的名字,以后用这个名字调用。函数名由用户命名,命名规则同标识符。(3
6、)函数名后面是参数表,无参函数没有参数传递,但“()”号不能省略,这是格式的规定。参数表说明参数的类型和形式参数的名称,各个形式参数用“,”分隔。2.函数体:函数首部下用一对{}括起来的部分。如果函数体内有多个{},最外层是函数体的范围。函数体一般包括声明部分、执行部分两部分。1)声明部分:在这部分定义本函数所使用的变量和进行有关声明(如函数声明)。2)执行部分:程序段,由若干条语句组成(可以在其中调用其它函数)。例:输入三个整数,求三个整数中的最大值不使用函数(除main外)main(){intn1,n2,n3,nmax;scanf(“%d%d%d”,&n1,&n
7、2,&n3);if(n1>n2)nmax=n1;elsenmax=n2;if(n3>max)max=n3;printf(“max=%d”,nmax);}使用函数intmax(int,int,int);/*函数声明*/main(){intn1,n2,n3,nmax;scanf(“%d%d%d”,&n1,&n2,&n3);nmax=max(n1,n2,n3);printf(“max=%d“,nmax);}intmax(intx,inty,intz){intm;if(x>y)m=x;elsem=y;if(z>m)m=z;returnm;}像调用库函数一样调用函