【例6.3】改正下面程序中的错误。
#include <stdio.h>
int sum
(int
);
void main
(
)
{
int x=19
;
sum
( x
);
printf
("\nThe sum is %d\n"
, x
);
}
int sum
( int x
)
{ return
(x+x
); }
【分析】程序传递x的一个副本到sum(x),并且期望在调用函数后,能得到两数之和。但在sun函数中的变量x,是离开sum就马上消失的副本,因此这个x也就不存在于main函数之中。虽然这个x不存在于main中,但它本身的返回值可以被直接使用。把它作为printf的函数,可以输出这个计算结果。例如使用
printf
("\nThe sum is %d\n"
, sum
( x
)
);
语句可以输出计算结果为38。当然,如果主程序想继续使用x,则x的值还是原来的x值,即x=19。sum函数返回计算结果,应使用一个同类型的变量接收这个返回值。本程序仍用x来接收,sum函数的return可以使用表达式,所以没有必要将计算之后的值作为返回值。修改后的完整程序如下:
#include <stdio.h>
int sum
(int
);
void main
(
)
{
int x=19
;
x=sum
( x
);
printf
("\nThe sum is %d\n"
, x
);
}
int sum
( int x
)
{ return x+x
; }
【例6.4】改正下面程序中的错误。
#include <stdio.h>
int mul
(int
);
int main
(
)
{
const int K=3
;
double x=8
,y
;
y=mul
( x
);
y+=x
;
printf
("\n %d\n"
, y
);
return 0
;
}
double mul
( double x
)
{ return
(x*K
); }
声明的函数原型与定义不符合。正确的声明如下:
double mul
(double
);
函数设计的也不对,因为K不是mul函数里的变量,它无法使用这个变量,应为它增加一个整型变量。修改后的程序如下:
#include <stdio.h>
double mul
(double
,int
);
int main
(
)
{
const int K=3
;
double x=8
,y
;
y=mul
( x
,K
);
y += x
;
printf
("y=%lf\n"
, y
);
return 0
;
}
double mul
( double x
,int k
)
{ return
(x*k
); }
程序输出结果如下:
y=32.000000
如果不愿意修改mul函数,可以将K的定义放到主函数外面,将其定义为外部变量。如下三条语句是等效的:
extern int K=3
;
static int K=3
;
const int K=3
;
但是,更推荐使用const定义。作为函数定义来讲,希望自成系统。从这一点来看,还是推荐使用两个参数设计mul函数。