二級C語言考試輔導(dǎo)教程第五章:函數(shù)[2]

字號:

2.有參函數(shù)的一般形式
     類型說明符 函數(shù)名(形式參數(shù)表)
     型式參數(shù)類型說明
     {
     類型說明
     語句
     }
     有參函數(shù)比無參函數(shù)多了兩個內(nèi)容,其一是形式參數(shù)表, 其二是形式參數(shù)類型說明。在形參表中給出的參數(shù)稱為形式參數(shù), 它們可以是各種類型的變量, 各參數(shù)之間用逗號間隔。在進(jìn)行函數(shù)調(diào)用時,主調(diào)函數(shù)將賦予這些形式參數(shù)實際的值。 形參既然是變量,當(dāng)然必須給以類型說明。例如,定義一個函數(shù), 用于求兩個數(shù)中的大數(shù),可寫為:
     int max(a,b)
     int a,b;
     {
     if (a>b) return a;
     else return b;
     }
     第一行說明max函數(shù)是一個整型函數(shù),其返回的函數(shù)值是一個整數(shù)。形參為a,b。第二行說明a,b均為整型量。 a,b 的具體值是由主調(diào)函數(shù)在調(diào)用時傳送過來的。在{}中的函數(shù)體內(nèi), 除形參外沒有使用其它變量,因此只有語句而沒有變量類型說明。 上邊這種定義方法稱為“傳統(tǒng)格式”。 這種格式不易于編譯系統(tǒng)檢查,從而會引起一些非常細(xì)微而且難于跟蹤的錯誤。ANSI C 的新標(biāo)準(zhǔn)中把對形參的類型說明合并到形參表中,稱為“現(xiàn)代格式”。
     例如max函數(shù)用現(xiàn)代格式可定義為:
     int max(int a,int b)
     {
     if(a>b) return a;
     else return b;
     }
     現(xiàn)代格式在函數(shù)定義和函數(shù)說明(后面將要介紹)時, 給出了形式參數(shù)及其類型,在編譯時易于對它們進(jìn)行查錯, 從而保證了函數(shù)說明和定義的一致性。例1.3即采用了這種現(xiàn)代格式。 在max函數(shù)體中的return語句是把a(bǔ)(或b)的值作為函數(shù)的值返回給主調(diào)函數(shù)。有返回值函數(shù)中至少應(yīng)有一個return語句。 在C程序中,一個函數(shù)的定義可以放在任意位置, 既可放在主函數(shù)main之前,也可放在main之后。例如例1.3中定義了一個max 函數(shù),其位置在main之后, 也可以把它放在main之前。
     修改后的程序如下所示。
     int max(int a,int b)
     {
     if(a>b)return a;
     else return b;
     }
     void main()
     {
     int max(int a,int b);
     int x,y,z;
     printf("input two numbers:\n");
     scanf("%d%d",&x,&y);
     z=max(x,y);
     printf("maxmum=%d",z);
     }
     現(xiàn)在我們可以從函數(shù)定義、 函數(shù)說明及函數(shù)調(diào)用的角度來分析整個程序,從中進(jìn)一步了解函數(shù)的各種特點。程序的第1行至第5行為max函數(shù)定義。進(jìn)入主函數(shù)后,因為準(zhǔn)備調(diào)用max函數(shù),故先對max函數(shù)進(jìn)行說明(程序第8行)。函數(shù)定義和函數(shù)說明并不是一回事,在后面還要專門討論。 可以看出函數(shù)說明與函數(shù)定義中的函數(shù)頭部分相同,但是末尾要加分號。程序第12 行為調(diào)用max函數(shù),并把x,y中的值傳送給max的形參a,b。max函數(shù)執(zhí)行的
     結(jié)果 (a或b)將返回給變量z。最后由主函數(shù)輸出z的值。
     函數(shù)調(diào)用的一般形式前面已經(jīng)說過,在程序中是通過對函數(shù)的調(diào)用來執(zhí)行函數(shù)體的,其過程與其它語言的子程序調(diào)用相似。C語言中, 函數(shù)調(diào)用的一般形式為:
     函數(shù)名(實際參數(shù)表) 對無參函數(shù)調(diào)用時則無實際參數(shù)表。 實際參數(shù)表中的參數(shù)可以是常數(shù),變量或其它構(gòu)造類型數(shù)據(jù)及表達(dá)式。 各實參之間用逗號分隔?!疦ext of Page在C語言中,可以用以下幾種方式調(diào)用函數(shù):
     1.函數(shù)表達(dá)式
     函數(shù)作表達(dá)式中的一項出現(xiàn)在表達(dá)式中,以函數(shù)返回值參與表達(dá)式的運(yùn)算。這種方式要求函數(shù)是有返回值的。例如: z=max(x,y)是一個賦值表達(dá)式,把max的返回值賦予變量z?!疦ext of Page
     2.函數(shù)語句
     函數(shù)調(diào)用的一般形式加上分號即構(gòu)成函數(shù)語句。例如: printf ("%D",a);scanf ("%d",&b);都是以函數(shù)語句的方式調(diào)用函數(shù)。
     3.函數(shù)實參
     函數(shù)作為另一個函數(shù)調(diào)用的實際參數(shù)出現(xiàn)。 這種情況是把該函數(shù)的返回值作為實參進(jìn)行傳送,因此要求該函數(shù)必須是有返回值的。例如: printf("%d",max(x,y)); 即是把max調(diào)用的返回值又作為printf函數(shù)的實參來使用的。在函數(shù)調(diào)用中還應(yīng)該注意的一個問題是求值順序的問題。 所謂求值順序是指對實參表中各量是自左至右使用呢,還是自右至左使用。 對此, 各系統(tǒng)的規(guī)定不一定相同。