第17讲调用函数和被调用函数间的数据传递函数的递归调用、程序举例形参与实参的概念形式参数:定义函数时函数名后面括号中的变量名实际参数:调用函数时函数名后面括号中的表达式§ max2(int x, int y) {int z; z=(x>y)?x,y ; return(z); }main(){int a,b,c; a=30,b=58; c=max2(a,b); c=max2(a+5,100); printf(“%f\n”,c);}例如:形参:x,y形参必须指定类型;实参:a,b实参:a+5,100(1) 实参表达式也可以是变量或常量,但必须有确定的值;(2) 要求形参与实参类型一致,个数相同(多:略/少:随机值);(4) 形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放;(5) C语言的参数传递方式值传递方式:函数调用时,系统临时为被调函数的形参分配存贮单元,并将实参的值复制到形参中;当被调函数结束时,形参单元被释放,实参单元仍保留并维持原值。特点:单向的值传递(数值或地址值)。有关参数传递的几点说明xaproduct××××(单向的数值传递)#include <>float cube(float x){ return(x*x*x);}void main(){ float a, product; printf("Please input value of a:"); scanf("%f",&a); product=cube(a); printf(”Cube of %.4f is %.4f\n",a,product);}例计算x的立方Cube [kju:b] , 立方main(){void swap(int , int); int x=10,y=20; printf(“(1)x=%d y=%d\n”,x,y); swap(x,y); printf(“(4)x=%d y=%d\n”,x,y);}void swap(int a, int b){int t; printf(“(2)a=%d b=%d\n”,a,b); t=a; a=b; b=t; printf(“(3)a=%d b=%d\n”,a,b);}:y:调用前:调用结束:1020x:y:调用:1020a:b:1020x:y:swap:1020x:y:2010a:b:t:程序运行结果为:(1)x=10 y=20(2)a=10 b=20(3)a=20 b=10(4)x=10 y=20main( ){void ex(int z,int y,int x); int x=10,y=20,z=30; printf(“(1)x=%d y=%d z=%d\n”,x,y,z); ex(y,z,x);}void ex(int x,int y,int z) { printf(“(2)x=%d y=%d z=%d\n”,x,y,z);} 实参向形参按位置传递数据程序运行结果为:(1)x=10 y=20 z=30(2)x=20 y=30 z=10实参:3010y:z:3010z:x:形参:20x:20y:函数说明语句形参名是一种虚设函数调用语句确定实参顺序函数定义确定形参顺序实参向形参按位置传递数据#include <>long sum(int a, int b); long factorial(int n);void 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);形参实参函数定义
第17讲 调用函数和被调用函数间的数据传递 函数的递归调用 程序举例 1 来自淘豆网m.daumloan.com转载请标明出处.