(中职)计算机程序设计(C语言)第七章第4节教学课件工信版.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《(中职)计算机程序设计(C语言)第七章第4节教学课件工信版.ppt》由会员分享,可在线阅读,更多相关《(中职)计算机程序设计(C语言)第七章第4节教学课件工信版.ppt(34页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、YCF(中职)计算机程序设计(C语言)第七章第4节教学课件工信版第七章第七章 函数函数7.4函数的调用函数的调用7.4函数的调用函数的调用7.4.1函数调用的一般形式函数调用的一般形式7.4.2函数调用的方法函数调用的方法7.4.3被调函数的声明和函数原型被调函数的声明和函数原型7.4.4函数的嵌套调用函数的嵌套调用7.4.5函数的递归调用函数的递归调用7.4.6数组作为函数参数数组作为函数参数7.4.1函数调用的一般形式函数调用的一般形式前面已经说过,在程序中是通过对函数的调用来执行函数体的,其过程与其它语言的子程序调用相似。C语言中,函数调用的一般形式为:函数名(实际参数表)对无参函数调用
2、时则无实际参数表。实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。各实参之间用逗号分隔。7.4.2函数调用的方法函数调用的方法在C语言中,可以用以下几种方式调用函数:(1)函数表达式:函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例如:z=max(x,y)是一个赋值表达式,把max的返回值赋予变量z。(2)函数语句:函数调用的一般形式加上分号即构成函数语句。例如:printf(%d,a);scanf(%d,&b);都是以函数语句的方式调用函数。(3)函数实参:函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实
3、参进行传送,因此要求该函数必须是有返回值的。例如 printf(%d,max(x,y);即是把max调用的返回值又作为printf函数的实参来使用的。在函数调用中还应该注意的一个问题是求值顺序的问题。所谓求值顺序是指对实参表中各量是自左至右使用呢,还是自右至左使用。对此,各系统的规定不一定相同。【例7.7】main()int i=8;printf(%dn%dn%dn%dn,+i,-i,i+,i-);结果:如按照从右至左的顺序求值。运行结果应为:8 7 7 8如对printf语句中的+i,-i,i+,i-从左至右求值,结果应为 9 8 8 9 应特别注意的是,无论是从左至右求值,应特别注意的是,
4、无论是从左至右求值,还是自右至左求值,其输还是自右至左求值,其输出顺序都是不变的,出顺序都是不变的,即输出顺序总是和实参表中实参的顺序相同。即输出顺序总是和实参表中实参的顺序相同。7.4.3被调函数的声明和函数原型被调函数的声明和函数原型 在主调函数中调用某函数之前应对该被调函数进行说明(声明),这与使用变量之前要先进行变量说明是一样的。在主调函数中对被调函数作说明的目的是使编译系统知道被调函数返回值的类型,以便在主调函数中按此种类型对返回值作相应的处理。其一般形式为:类型说明符 被调用函数名(类型 形参,类型 形参);或为:类型说明符 被调用函数名(类型 ,类型);括号内给出了形参的类型和形
5、参名,或只给出形参类型。这便于编译系统进行检错,以防止可能出现的错误。【例7.5】的main函数中对max函数的说明为:int max(int a,int b);或写为:int max(int,int);C语言中又规定在以下几种情况时可以省去主调函数中对被调函数的函数说明。(1)如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。例7.6的主函数中未对函数s作说明而直接调用即属此种情形。(2)当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。例如例7.5中,函数max的定义放在main 函
6、数之前,因此可在main函数中省去对max函数的函数说明int max(int a,int b);(3)对库函数的调用不需要再作说明,但必须把该函数的头文件用include命令包含在源文件前部。(4)如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。例如:char str(int a);float f(float b);main()char str(int a)float f(float b)其中第一,二行对str函数和f函数预先作了说明。因此在以后各函数中无须对str和f函数再作说明就可直接调用。【例7.8】计算s=22!+32!解析:本
7、题可编写两个函数,一个是用来计算平方值的函数f1,另一个是用来计算阶乘值的函数f2。主函数先调f1计算出平方值,再在f1中以平方值为实参,调用 f2计算其阶乘值,然后返回f1,再返回主函数,在循环程序中计算累加和。long f1(int p)int k;long r;long f2(int);k=p*p;r=f2(k);return r;long f2(int q)long c=1;int i;for(i=1;i=q;i+)c=c*i;return c;main()int i;long s=0;for(i=2;i1)按公式可编程如下:main()int n;long y;printf(ninp
8、ut a inteager number:n);scanf(%d,&n);y=func(n);printf(%d!=%ld,n,y);long func(int n)long f;if(n0)printf(n0,input error);else if(n=0|n=1)f=1;else f=func(n-1)*n;return(f);/*或者可以写成:return f;*/解析:程序中给出的函数func是一个递归函数。主函数调用func 后即进入函数func执行,如果n0,n=0或n=1时都将结束函数的执行,否则就递归调用func函数自身。由于每次递归调用的实参为n-1,即把n-1的值赋予形参
9、n,最后当n-1的值为1时再作递归调用,形参n的值也为1,将使递归终止。然后可逐层退回。下面我们再举例说明该过程。设执行本程序时输入为5,即求5!。在主函数中的调用语句即为y=func(5),进入func函数后,由于n=5,不等于0或1,故应执行f=func(n-1)*n,即f=func(5-1)*5。该语句对func作递归调用即func(4)。进行四次递归调用后,func函数形参取得的值变为1,故不再继续递归调用而开始逐层返回主调函数。func(1)的函数返回值为1,func(2)的返回值为1*2=2,func(3)的返回值为2*3=6,func(4)的返回值为6*4=24,最后返回值fun
10、c(5)为24*5=120。【例7.9-2】利用递归算法求解斐波拉切数列的第20项,已知该数列的第1项是0,第2项是1,从第3项开始是前两项之和。即:f0=0,f1=1,fn=fn-1+fn-2。程序编写如下:#include int f(int n)if(n=1|n=2)return 1;else return(f(n-2)+f(n-1);int main()int i,num;printf(请输入num的值:);scanf(%d,&num);for(i=1;i=num;i+)printf(%-6d,f(i);if(i%5=0)printf(n);printf(n);return 0;本例采
11、用递归算法显得尤为简单,而且本例采用递归算法显得尤为简单,而且比较好理解。即已知第比较好理解。即已知第1项为项为0,第,第2项为项为1,从第,从第3项起是前两项之和,项起是前两项之和,f2=f0+f1=0+1=1,所以条件可以设置成当,所以条件可以设置成当n=1或者或者n=2时,返回时,返回1。其它项则依。其它项则依次递归调用即可。次递归调用即可。【例7.9-3】采用非递归方法求解斐波拉切数列#includevoid main()int i,num;int f=0,1;printf(请输入num的值:);scanf(%d,&num);for(i=2;i=num;i+)fi=fi-2+fi-1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 程序设计 语言 第七 教学 课件 工信版
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内