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