【例6.3】改正下面程序中的错误。
#include <stdio.h> int sum (int ); void main ( ) { int x=19 ; sum ( x ); printf ("\nThe sum is %d\n" , x ); } int sum ( int x ) { return (x+x ); }
【分析】程序传递x的一个副本到sum(x),并且期望在调用函数后,能得到两数之和。但在sun函数中的变量x,是离开sum就马上消失的副本,因此这个x也就不存在于main函数之中。虽然这个x不存在于main中,但它本身的返回值可以被直接使用。把它作为printf的函数,可以输出这个计算结果。例如使用
printf ("\nThe sum is %d\n" , sum ( x ) );
语句可以输出计算结果为38。当然,如果主程序想继续使用x,则x的值还是原来的x值,即x=19。sum函数返回计算结果,应使用一个同类型的变量接收这个返回值。本程序仍用x来接收,sum函数的return可以使用表达式,所以没有必要将计算之后的值作为返回值。修改后的完整程序如下:
#include <stdio.h> int sum (int ); void main ( ) { int x=19 ; x=sum ( x ); printf ("\nThe sum is %d\n" , x ); } int sum ( int x ) { return x+x ; }
【例6.4】改正下面程序中的错误。
#include <stdio.h> int mul (int ); int main ( ) { const int K=3 ; double x=8 ,y ; y=mul ( x ); y+=x ; printf ("\n %d\n" , y ); return 0 ; } double mul ( double x ) { return (x*K ); }
声明的函数原型与定义不符合。正确的声明如下:
double mul (double );
函数设计的也不对,因为K不是mul函数里的变量,它无法使用这个变量,应为它增加一个整型变量。修改后的程序如下:
#include <stdio.h> double mul (double ,int ); int main ( ) { const int K=3 ; double x=8 ,y ; y=mul ( x ,K ); y += x ; printf ("y=%lf\n" , y ); return 0 ; } double mul ( double x ,int k ) { return (x*k ); }
程序输出结果如下:
y=32.000000
如果不愿意修改mul函数,可以将K的定义放到主函数外面,将其定义为外部变量。如下三条语句是等效的:
extern int K=3 ; static int K=3 ; const int K=3 ;
但是,更推荐使用const定义。作为函数定义来讲,希望自成系统。从这一点来看,还是推荐使用两个参数设计mul函数。