【例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函數。