函数printfline在每次被调用时都将显示同一行。对value函数也是如此。其实,我们也可以让调用函数从终端读取数据,然后将它传递给被调用函数。这种方法看起来更明智些,因为如果有必要,在将数据传递给被调用函数之前,调用函数可以检查该数据的有效性。
我们可以如下修改两个被调用函数,使之包含参数:
void printline(char ch);
void value(float p,float r,int n)
参数ch、p、r和n称为形参。现在,调用函数就可以使用带参数的函数调用来将值传递给参数了。例如,函数调用:
Value(500,012,5)
就可以把值500,0.12,5传递给函数
void value(float p,float r,int n)
并把500赋给p,0.12赋给r,5赋给n。值500、0.12和5就是实参。他们会成为被调用函数中形参的值。
实参和形参在数量、类型和顺序上必须匹配。实参的值就逐个赋给形参。
必须确保函数调用时参数要匹配。如果实参多余形参,那么多余的实参将会被丢弃。相反,如果实参少于形参,未匹配的形参将被初始化为垃圾值。数据类型的任何不匹配的情况都将导致传递垃圾值。记住,这是不会产生错误消息的。
形参必须是有效的变量名,而实参可以是变量名、表达式或常量。若使用变量作为实参,变量在函数调用之前必须已赋值。
记住,函数调用时,只是将实参的值的副本传递给了被调用函数。被调用函数中所发生的一切都不会影响实参中的变量。
void printline(char c);
void value(float,float,int);
main()
{
floatprincipal,inrate;
intperiod;
printf("Enterprincipal amount,interest");
printf("rate,andperiod\n");
scanf("%f%f %d",&principal,&inrate,&period);
printline('z');
value(principal,inrate,period);
principal('C');
}
void principal(char ch)
{
inti;
for(i=1;i<=52;i++)
printf("%c",ch);
printf("\n");
}
void value(float p,float r,int n)
{
intyear;
floatsum;
sum=p;
year=1;
while(year<=n)
{
sum=sum*(1+r);
year=year+1;
}
printf("%f\t%f\t%d\t%f\n",p,r,n,sum);
}