★参数传递方式 今值传递方式 方式:函数调用时为形参分配单元并将奥参 的值复制到形参中:调用结束,形参单元被释 放,参单元仍保留并维持原值 特点: ◆形参与实参占用不同的内存单元 ◆单向传递 ◆实参可以是常量、变量或表达式,但必须 有确定的值
参数传递方式 ❖值传递方式 ⚫方式:函数调用时,为形参分配单元,并将实参 的值复制到形参中;调用结束,形参单元被释 放,实参单元仍保留并维持原值 ⚫特点: ◆形参与实参占用不同的内存单元 ◆单向传递 ◆实参可以是常量、变量或表达式,但必须 有确定的值
运行 例交换两个数 X=7 swapped: x=7 y=ll #include <stdio. h> main( 调用前 i int x7,y=ll printf(x%od, ty=%dn",x y) printf("swapped: n") 调用 swap(x,y) b:|11 printf("x%d, ty=%d\"x,y) Swap swap(int a, int b) i int temp temp=a; a=b; b=temp temp 调用结束:
调用前: x: 7 y: 11 调用结束: x: 7 y: 11 例 交换两个数 #include <stdio.h> main() { int x=7,y=11; printf("x=%d,\ty=%d\n",x,y); printf("swapped:\n"); swap(x,y); printf("x=%d,\ty=%d\n",x,y); } swap(int a,int b) { int temp; temp=a; a=b; b=temp; } 调用: a: 7 b: 11 x: 7 y: 11 swap: x: 7 y: 11 a: 11 b: 7 temp 运行: x=7 y=11 swapped: x=7 y=11
#include <stdio. h> 文件包含编译预处理命令 long sum(int a, int b) long factorial (int n) 函数类型说明 maino int nln2 long a long sum(int a, int b); long factorial(int n) scanf("%od, %d", &nl, &n2) long rtn=1 填参-2=mn2);+一函数调中 printf("a=%1d",a) for(i-1; i<=n; i++) 函数定义 long sum(int a, int b) return(rtn) long factori(intn;形参 long cl, c2 cl=factorial(a) c2=factorial(b) 函数调用 return(cl+c2);←函数返回值
#include <stdio.h> long sum(int a, int b); long factorial(int n); main() { int n1,n2; long a; scanf("%d,%d",&n1,&n2); a=sum(n1,n2); printf("a=%1d",a); } long sum(int a,int b) { long c1,c2; c1=factorial(a); c2=factorial(b); return(c1+c2); } long factorial(int n) { long rtn=1; int i; for(i=1;i<=n;i++) rtn*=i; return(rtn); } long sum(int a, int b); long factorial(int n); 文件包含编译预处理命令 函数类型说明 函数定义 函数调用 函数调用 函数返回值 形参 实参
§8.6函数的嵌套与递归调用 ★嵌套调用 C规定:函数定义不可嵌套,但可以嵌套调用函数 函数嵌套 嵌套调用 maint f float add( float, float int a=2. b=3.c main() a函数 b函数 c=add(a, b) printf(c=%d", c) float ado( float x, float y)调用函数a,调用函数b i float z =x+ return(z) 结束
§8.6 函数的嵌套与递归调用 嵌套调用 C规定:函数定义不可嵌套,但可以嵌套调用函数 main( ) 调用函数a 结束 a函数 b函数 调用函数b 函数嵌套 main() { float add( float , float ) ; int a=2,b=3 ,c ; c=add(a , b); printf( “c= %d “, c); float add(float x ,float y) { float z ; z=x+y ; return(z) ; } } 嵌套调用
例求三个数中最大数和最小数的差值 #include <stdio. h> int dif(int x, int y, int z) int dif(int x, int y, int z) i return max(x, y, z)-min(x y, z);) int max( int x, int y, int z) int max(int x, int y, int z) int min(int x, int y, int z) int r void maino y!xy i int a, b, c, d return(r>z?r: z) scanf("%d%d%d", &a, &b, &c); / d=dif(a, b,c) int min(int x, int y, int z) printf("Max-Min=%d\n", d) i intr <y?x return(r<z?r: z) main() di涵数 max图 数 调用函数df调用函数max 调用函数mn、mn函数 输出 结束
例 求三个数中最大数和最小数的差值 #include <stdio.h> int dif(int x,int y,int z); int max(int x,int y,int z); int min(int x,int y,int z); void main() { int a,b,c,d; scanf("%d%d%d",&a,&b,&c); d=dif(a,b,c); printf("Max-Min=%d\n",d); } int dif(int x,int y,int z) { return max(x,y,z)-min(x,y,z); } int max(int x,int y,int z) { int r; r=x>y?x:y; return(r>z?r:z); } int min(int x,int y,int z) { int r; r=x<y?x:y; return(r<z?r:z); main( ) } 调用函数dif 输出 结束 dif函数 max函数 调用函数max 调用函数min min函数