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