c语言函数.ppt
上传人:sy****28 上传时间:2024-09-15 格式:PPT 页数:42 大小:199KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

c语言函数.ppt

c语言函数.ppt

预览

免费试读已结束,剩余 32 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第八章函数8.1概述C语言的程序除主函数外,还可以有若干个其他函数—块状结构。对于较大的程序来说,往往把其中相对独立的算法和功能定义成一个独立的函数,以供需要的地方调用。将一个程序分解成多个函数有如下优点:(1)减少代码的重复现象。(2)便于分工合作。(3)便于阅读。(4)便于独立算法的代码移植。8.2函数的定义和调用通过例子来说明如何定义和调用函数:对于求两个数中的最大值,有三个步骤:(1)从键盘输入两个数给a和b。(2)求a和b中的最大值。(3)输出结果。把求最大值的算法部分定义成一个独立的函数:函数类型函数名函数参数(形参)intmax(intx,inty)main(){intz;{inta,b,c;if(x>y)z=x;scanf(“%d%d”,&a,&b);elsez=y;c=max(a,b);return(z);printf(“%d”,c);}}xyzabc说明:(1)程序由两个函数组成,它们逻辑上相互独立(功能、变量)。(2)程序的执行总是从主函数开始,主函数总是被执行一次,其他函数只有在被调用时才获得控制。(3)函数调用有两个作用:转移控制权和传递参数。(4)return的作用也有两个:交回控制权和返回结果。(5)实参可以是常量、变量或表达式,但类型要一致。定义一个函数除考虑算法外就是:如何设计函数的参数,通过何种途径交回结果。例:求自然数1—100中的素数之和。?prime(?)main(){inti;{inti,s=0;for(i=2;i<m;i++)for(i=1;i<=100;i++)if(m%i==0)?if(prime(i))s+=i;?printf(“\n%d”,s);}}例:求5!+7!+4!的值。?fac(?){inti,s=1;for(i=1;i<=n;i++)s*=i;return(s);}main(){printf(“\n%d”,fac(5)+fac(7)+fac(4));}main(){floats,fac();对被调函数声明s=fac(5)+fac(7)+fac(4);printf(“\n%f”,s);}floatfac(intn){inti;floats=1;for(i=1;i<=n;i++)s*=i;return(s);}不需声明的情况:intchar主调函数在后若被调用的函数是库函数,则应用#include命令将所调用函数的有关信息包含进来,如:例:#include“math.h”main(){floatx,y;scanf(%f”,&x);y=sin(x);printf(“%f”,y);}8.3函数的嵌套调用C语言的函数定义虽然相互平行、相互独立的,但可以嵌套调用,形如:主函数函数A函数B例:求多项式S=∑i!+∑i!+∑i!的值。floatfac(intn){…}?sum(?){inti;floats=0;for(i=?)s+=fac(i);return(s);}}main(){printf(“%f”,sum(1,5)+sum(7,11)+sum(15,20);}8.4函数的递归调用在函数调用的过程中,出现直接或间接地调用该函数本身。如:f1()f2()f3(){{{f1();f3();f2();}}}直接间接递归调用递归调用在实际应用中,有些问题既可用递归实现,也可不用递归(如求n!);也有些问题非有递归不可(如汉诺塔问题);不少问题使用递归显得很方便。用递归方法求n!:递推公式:1当n=0或n=1时n!=n(n-1)!当n>1时floatfac(intn)main(){floatf;{floatf;if(n==0||n==1)f=1;f=fac(4);elsef=?printf(“\n%f”,f);return(f);}}递归调用的执行过程:主函数函数fac函数fac函数fac函数fac问题:4个return的执行顺序?后进先出!8.5数组作为函数的参数当要传递的参数较少时,用简单变量作为函数的参数是方便的,但当要传递的参数是批量时,需要用数组作为函数的参数。例:编写函数,求100个数的平均数。floataver(inta[100]){inti;floats=0;for(i=0;i<100;i++)s+=a[i];return(s/100);}main(){intx[100];floatav;输入x;av=aver(x);}通用函数考虑:floataver(inta[],intn)main(){i