第13讲函数的调用 和变量的作用域 、函数的嵌套及递归调用 1、函数的嵌套调用 2、函数的递归调用 、变量的作用范围 1、局部变量 2、全局变量
第13讲 函数的调用 和变量的作用域 一、函数的嵌套及递归调用 1、 函数的嵌套调用 2、 函数的递归调用 二、变量的作用范围 1、 局部变量 2、 全局变量
例嵌套调用 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、 函数的递归调用 递归调用:在调用一个函数的过程中又出现 直接或间接地调用该函数本身。这样的调用 称为递归调用。 递归调用必须可以满足一定条件时结束递归 调用,否则无限地递归调用将导致程序无法 结束