讀古今文學網 > 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
;
}