第13讲函数的调用 和变量的作用域 、函数的调用 1、函数的嵌套调用 2、函数的递归调用 、变量的作用范围 1、局部变量 2、全局变量
第13讲 函数的调用 和变量的作用域 一、函数的调用 1、 函数的嵌套调用 2、 函数的递归调用 二、变量的作用范围 1、 局部变量 2、 全局变量
、函数的调用 1、函数的嵌套调用 嵌套调用:在一个函数调用过程中又调用另一个 函数
嵌套调用:在一个函数调用过程中又调用另一个 函数。 一、函数的调用 1、 函数的嵌套调用
例嵌套调用 qianI( int x, int y) qian2(int x, int y f c,S,t; freturn(X+y); s=X+y; tx-y; c=qian2(S, t); main return(c); fint a=1, b=2,c; printf("c=%d\n",c); C=2*qian(a, b), printf(c=%d\n",c);
例 嵌套调用: qian1( int x, int y ) { int c, s, t ; s=x+y; t=x-y; c=qian2(s, t); return (c); printf("c=%d\n", c); } qian2( int x , int y ) { return ( x + y ) ; } main( ) { int a=1, b=2, c ; c=2*qian1(a, b); printf("c = %d\n", c); }
例统计字符个数 #include stdio.h! long coutch();/利用函数原型声明函数 main( flong n; n=coutch() printf( n=%ldn",n); long counch f long cn i for(cn=0; getchar(!='n; cn++); return cn i
例 统计字符个数 #include "stdio.h" long countch( ); /* 利用函数原型声明函数 */ main( ) { long n ; n = countch( ) ; printf( " n= %ld\n", n ) ; } long countch( ) { long cn ; for ( cn=0 ; getchar( ) != ‘\n’; cn++) ; return cn ; }
例连接两个字符串 #include stdio. h int chu( charx[ d); /函数原型声明* void lianjie(charx[l, char y D maino i char a[100, b 20]; int i, k gets(a); gets(b) lianjie(a, b ) puts(a); int chd( char c[100)) /测试字符串长度* fint k, for(k-=0; ck!=0; k++); return k. void lianjie( char x, chary)/连接字符串* fint k, m; k-chdu(x) for( m=0; ym: =10; m++)xk+m]=ym xk+m]=0;}
例 连接两个字符串 #include "stdio.h" int chdu( char x[ ] ); /* 函数原型声明*/ void lianjie(char x[ ], char y[ ]); main() { char a[100], b[20]; int i,k; gets(a); gets(b); lianjie(a,b); puts(a); } int chdu( char c[100] ) /* 测试字符串长度*/ { int k ; for(k=0;c[k]!='\0';k++); return k; } void lianjie( char x[], char y[]) /* 连接字符串*/ { int k, m ; k=chdu(x); for ( m=0 ;y[m]!='\0'; m++ ) x[k+m]=y[m] ; x[k+m]=‘\0’ ; }
例输入两个数,求它们的和、差、积、商。 maino float x, y; float add(float, float), min(float, float), mul(float, float), div (float, float); printf(" Please input two numbers scanf(%of,%of, &x, &y); printf(%of+%f=%fn"x, y,add(x, y)); printf( %of- %f%fn",x, y, min(x, y)); printf(%of%f=%fn,x,y, mul(x, y)) printf(%of/%f=%fn", x, y, div(x, y));
例 输入两个数,求它们的和、差、积、商。 main() { float x,y; float add(float,float),min(float,float),mul(float,float),div(float,float); printf("Please input two numbers:"); scanf("%f,%f",&x,&y); printf("%f+%f=%f\n",x,y,add(x,y)); printf("%f-%f=%f\n",x,y,min(x,y)); printf("%f*%f=%f\n",x,y,mul(x,y)); printf("%f/%f=%f\n",x,y,div(x,y)); }
float add(float xx, float yy) float zz; ZEXX+yY; return(zz) float min(float Xx, float yy) i float zz; ZFXX-yy return(zz;
float add(float xx,float yy) {float zz; zz=xx+yy; return(zz); } float min(float xx, float yy) { float zz; zz=xx-yy; return(zz); }
2、函数的递归调用 递归调用:在调用一个函数的过程中又出现 直接或间接地调用该函数本身。这样的调用 称为递归调用。 递归调用必须可以满足一定条件时结束递归 调用,否则无限地递归调用将导致程序无法 结束
2、 函数的递归调用 递归调用:在调用一个函数的过程中又出现 直接或间接地调用该函数本身。这样的调用 称为递归调用。 递归调用必须可以满足一定条件时结束递归 调用,否则无限地递归调用将导致程序无法 结束
例计算 Fibonacci(斐波拉契)数列 long fib( int n) dif (n>2) return(fib(n-1)+fib(n-2)); else return(1); main O i printf ("%ld \n", fib(6));
例 计算Fibonacci(斐波拉契)数列 long fib( int n ) { if (n>2) return (fib(n-1)+fib(n-2)); else return ( 1 ); } main() { printf(" %ld \n",fib( 6 ) ); }
例使用递归算法编写计算n!的函数。 long fac(int n) if(n==1)return 1; else return n *fac(n-1); void maino int m. scanf ("%d", &m); printf(%02d =%dn", m, fac(m))
例 使用递归算法编写计算n!的函数。 long fac(int n) { if (n==1) return 1; else return n*fac(n-1); } void main() { int m; scanf ("%d",&m); printf("%2d!=%d\n",m,fac(m)); }