★参数传递方式 ◆值传递方式 ●方式:函数调用时,为形参分配单元并将实参 为值复制到形参中;调用结束,形参单元被释 放,实参单元仍保留并维持原值 ●特点 ◆形参与实参占用不同的内存单元 ◆单向传递 ◆实参可以是常量、变量或表达式,但必须 有确定的值
参数传递方式 ❖值传递方式 ⚫方式:函数调用时,为形参分配单元,并将实参 的值复制到形参中;调用结束,形参单元被释 放,实参单元仍保留并维持原值 ⚫特点: ◆形参与实参占用不同的内存单元 ◆单向传递 ◆实参可以是常量、变量或表达式,但必须 有确定的值
运行 例交换两个数 X=7 swapped:x-7 y=ll #include <stdio. h> 调用前: main i int xly=ll printf("x%d, Ity=%odn"x,y) X printf("swapped: I 调用: swap(x,y) printf("x%d, ty=%", y) swap X:7 swap(int a, int b) int tem temp=a; a=b; b=temp tem p 调用结束
调用前: 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 i int nl, n2 long a long sum(int a, int b) long factorial(int n) scant("%od, %d", &nl, &n2) i long rtn=1 实参 a=sm(nln2);←函数调用 printf("a=%1d", a for(1=1;i<=n;i++) rtn 函数定义 long sum(int a, int b return(rtn long factorial(int n);形参 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规定:函数定义不可嵌套,但可以嵌套调用函数 函数嵌套 main( 嵌套调用 i float add( float, float int a=2, b=3. c main( a函数 b函数 c=add(a, b) printf("c=%d",c) float add(float x, float y)调用函数a,调用函数b i float z ⑨ 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 V d old ma Xy:Xy i int a, b, c d return(r>z?r: z) scanf(Od%d%d", &a, &b, &c):; d=dif(a, b, c) int min(int x, int y, int z) printf("Max-Min%d n" d;( int r; r=x<y?x:y return(r<?r: z) maint di函数 maXE 率数 调用函数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函数