第14讲
调用函数和被调用函数间的数据传递函数的递归调用、程序举例
形参与实参的概念
形式参数:定义函数时函数名后面括号中的变量名
实际参数:调用函数时函数名后面括号中的表达式
§ 调用函数和被调用函数之间的数据传递
int 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语言的参数传递方式
值传递方式:函数调用时,系统临时为被调函数的形参分配存贮单元,并将实参的值复制到形参中;当被调函数结束时,形参单元被释放,实参单元仍保留并维持原值。
特点:单向的值传递(数值或地址值)。
有关参数传递的几点说明
x
a
product
××
××
(单向的数值传递)
#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);
}
例1 函数参数之间的单向传递
10
20
x:
y:
调用前:
调用结束:
10
20
x:
y:
调用:
10
20
a:
b:
10
20
x:
y:
swap:
10
20
x:
y:
20
10
a:
b:
t:
程序运行结果为:
(1)x=10 y=20
(2)a=10 b=20
(3)a=20 b=10
(4)x=10 y=20
main( )
{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);
}
例2 实参向形参按位置传递数据
程序运行结果为:
(1)x=10 y=20 z=30
(2)x=20 y=30 z=10
实参:
30
10
y:
z:
30
10
z:
x:
形参:
20
x:
20
y:
函数说明语句
形参名是一种虚设
函数调用语句确定实参顺序
函数定义
确定形参顺序
实参向形参按位置传递数据
#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);
}
文件包含编译预处理
第14讲 调用函数和被调用函数间的数据传递 函数的递归调用 程序举例lgf 来自淘豆网m.daumloan.com转载请标明出处.