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