【例6.6】下面函数是否能正确运行?
#include <stdio.h>
double max
(double
,double
);
int main
(
)
{
double x
, y
;
scanf
( "%lf %lf"
, &x
, &y
);
max
(x
,y
);
return 0
;
}
double max
( double a
, double b
)
{
if
(a>b
) printf
("max=%lf\n"
,a
);
else printf
("max=%lf\n"
,b
);
return 0
;
}
就本程序而论,它能输出正确的结果。因为只使用了函数的输出信息,所以发现不了其不合理之处。函数max始终输出0值,极为不合理。万一调用这个程序的输出结果,就会产生错误,后果可能不堪设想。
正确的设计方式就是输出函数计算的结果,即始终输出最大者。例如:
double max
( double a
, double b
)
{
if
(a>b
) {
printf
("max=%lf\n"
,a
);
return a
;
}
else {
printf
("max=%lf\n"
,b
);
return b
;
}
}
因为是传值方式,并不会改变主程序的变量值,所以可以使用如下简单编制的max函数实现程序的功能。
double max
( double a
, double b
)
{
if
(a<b
) a=b
;
printf
("max=%lf\n"
,a
);
return a
;
}