映月读书网 > C语言解惑 > 6.4 函数的返回路径 >

6.4 函数的返回路径

【例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
;
}