资源描述:
《第十二讲 函数的调用和变量的作用域.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第13讲函数的调用和变量的作用域一、函数的嵌套及递归调用1、函数的嵌套调用2、函数的递归调用二、变量的作用范围1、局部变量2、全局变量嵌套调用:在一个函数调用过程中又调用另一个函数。一、函数的调用1、函数的嵌套及递归调用例嵌套调用:qian1(intx,inty){intc,s,t;s=x+y;t=x-y;c=qian2(s,t);return(c);printf("c=%d",c);}qian2(intx,inty){return(x*y);}main(){inta=1,b=2,c;c=2*qian1(a,b);printf("c=%d",c);}例统计输
2、入字符个数#include"stdio.h"longcountch();/*利用函数原型声明函数*/main(){longn;n=countch();printf("n=%ld",n);}longcountch(){longcn;for(cn=0;getchar()!=‘’;cn++);returncn;}例连接两个字符串#include"stdio.h"intchdu(charx[]);/*函数原型声明*/voidlianjie(charx[],chary[]);main(){chara[100],b[20];inti,k;gets(a);gets(b);
3、lianjie(a,b);puts(a);}intchdu(charc[100])/*测试字符串长度*/{intk;for(k=0;c[k]!=' ';k++);returnk;}voidlianjie(charx[],chary[])/*连接字符串*/{intk,m;k=chdu(x);for(m=0;y[m]!=' ';m++)x[k+m]=y[m];x[k+m]=‘ ’;}例输入两个数,求它们的和、差、积、商。main(){floatx,y;floatadd(float,float),min(float,float),mul(float,float),d
4、iv(float,float);printf("Pleaseinputtwonumbers:");scanf("%f,%f",&x,&y);printf("%f+%f=%f",x,y,add(x,y));printf("%f-%f=%f",x,y,min(x,y));printf("%f*%f=%f",x,y,mul(x,y));printf("%f/%f=%f",x,y,div(x,y));}floatadd(floatxx,floatyy){floatzz;zz=xx+yy;return(zz);}floatmin(floatxx,floatyy
5、){floatzz;zz=xx-yy;return(zz);}2、函数的递归调用递归调用:在调用一个函数的过程中又出现直接或间接地调用该函数本身。这样的调用称为递归调用。递归调用必须可以满足一定条件时结束递归调用,否则无限地递归调用将导致程序无法结束。例计算Fibonacci(斐波纳契)数列longfib(intn){if(n>2)return(fib(n-1)+fib(n-2));elsereturn(1);}main(){printf("%ld",fib(6));}例使用递归算法编写计算n!的函数。longfac(longn){returnn==0?1:n*
6、fac(n-1);}voidmain(){intm;scanf("%d",&m);printf("%2d!=%ld",m,fac(m));}例使用递归算法求m和n的最大公约数gcd分析:求m和n的最大公约数等价于求n与(mmodn)的最大公约数。(mod模运算即整除求余)则有gcd(m,n)等价于gcd(n,(mmodn))例如:求24和16的最大公约数即求与gcd(16,(24mod16))的最大公约数为gcd(16,8)又等价于gcd(16,(16mod8))为gcd(8,0)此时n为零,m即为最大公约数#includefloatgcd(fl
7、oatm,floatn);voidmain(){floatm,n,g;printf(“Inputm,n:”);scanf(“%f,%f”,&m,&n);g=gcd(m,n);printf(“gcd(%2.0f,%2.0f)=%5.0f”,m,n,g);}程序如下:floatgcd(floata,floatb){if(b==0)return(a);elsereturn(gcd(b,fmod(a,b)));}变量的作用范围也称变量的作用域,即变量可以存储或访问的范围。变量的作用域是指变量的"可见性"。二、变量的作用范围局部变量:在一个函数内部定义的变