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

字號(hào):

這種格式由于在括號(hào)中沒(méi)有任何參數(shù)信息, 因此不便于編譯系統(tǒng)進(jìn)行錯(cuò)誤檢查,易于發(fā)生錯(cuò)誤。另一種為現(xiàn)代格式,其一般形式為:
     類型說(shuō)明符 被調(diào)函數(shù)名(類型 形參,類型 形參…);
     或?yàn)椋?BR>     類型說(shuō)明符 被調(diào)函數(shù)名(類型,類型…);
     現(xiàn)代格式的括號(hào)內(nèi)給出了形參的類型和形參名, 或只給出形參類型。這便于編譯系統(tǒng)進(jìn)行檢錯(cuò),以防止可能出現(xiàn)的錯(cuò)誤。例5.1 main函數(shù)中對(duì)max函數(shù)的說(shuō)明若
     用傳統(tǒng)格式可寫為:
     int max();
     用現(xiàn)代格式可寫為:
     int max(int a,int b);
     或?qū)憺?
     int max(int,int);
     C語(yǔ)言中又規(guī)定在以下幾種情況時(shí)可以省去主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)的函數(shù)說(shuō)明。
     1. 如果被調(diào)函數(shù)的返回值是整型或字符型時(shí), 可以不對(duì)被調(diào)函數(shù)作說(shuō)明,而直接調(diào)用。這時(shí)系統(tǒng)將自動(dòng)對(duì)被調(diào)函數(shù)返回值按整型處理。例5.3的主函數(shù)中未對(duì)函數(shù)s作說(shuō)明而直接調(diào)用即屬此種情形。
     2. 當(dāng)被調(diào)函數(shù)的函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前時(shí), 在主調(diào)函數(shù)中也可以不對(duì)被調(diào)函數(shù)再作說(shuō)明而直接調(diào)用。例如例5.1中, 函數(shù)max的定義放在main 函數(shù)之前,因此可在main函數(shù)中省去對(duì) max函數(shù)的函數(shù)說(shuō)明int max(int a,int b)。 來(lái)源:www.examda.com
     3. 如在所有函數(shù)定義之前, 在函數(shù)外預(yù)先說(shuō)明了各個(gè)函數(shù)的類型,則在以后的各主調(diào)函數(shù)中,可不再對(duì)被調(diào)函數(shù)作說(shuō)明。例如:
     char str(int a);
     float f(float b);
     main()
     {
     ……
     }
     char str(int a)
     {
     ……
     }
     float f(float b)
     {
     ……
     }
     其中第一,二行對(duì)str函數(shù)和f函數(shù)預(yù)先作了說(shuō)明。 因此在以后各函數(shù)中無(wú)須對(duì)str和f函數(shù)再作說(shuō)明就可直接調(diào)用。
     4. 對(duì)庫(kù)函數(shù)的調(diào)用不需要再作說(shuō)明, 但必須把該函數(shù)的頭文件用include命令包含在源文件前部。數(shù)組作為函數(shù)參數(shù)數(shù)組可以作為函數(shù)的參數(shù)使用,進(jìn)行數(shù)據(jù)傳送。 數(shù)組用作函數(shù)參數(shù)有兩種形式,一種是把數(shù)組元素(下標(biāo)變量)作為實(shí)參使用; 另一種是把數(shù)組名作為函數(shù)的形參和實(shí)參使用。一、數(shù)組元素作函數(shù)實(shí)參數(shù)組元素就是下標(biāo)變量,它與普通變量并無(wú)區(qū)別。 因此它作為函數(shù)實(shí)參使用與普通變量是完全相同的,在發(fā)生函數(shù)調(diào)用時(shí), 把作為實(shí)參的數(shù)組元素的值傳送給形參,實(shí)現(xiàn)單向的值傳送。例5.4說(shuō)明了這種情況。[例5.4]判別一個(gè)整數(shù)數(shù)組中各元素的值,若大于0 則輸出該值,若小于等于0則輸出0值。編程如下:
     void nzp(int v)
     {
     if(v>0)
     printf("%d ",v);
     else
     printf("%d ",0);
     }
     main()
     {
     int a[5],i;
     printf("input 5 numbers\n");
     for(i=0;i<5;i++)
     {
     scanf("%d",&a[i]);
     nzp(a[i]);
     }
     }void nzp(int v)
     { ……
     }
     main()
     {
     int a[5],i;
     printf("input 5 numbers\n");
     for(i=0;i<5;i++)
     { scanf("%d",&a[i]);
     nzp(a[i]);
     }
     }
     本程序中首先定義一個(gè)無(wú)返回值函數(shù)nzp,并說(shuō)明其形參v 為整型變量。在函數(shù)體中根據(jù)v值輸出相應(yīng)的結(jié)果。在main函數(shù)中用一個(gè)for 語(yǔ)句輸入數(shù)組各元素, 每輸入一個(gè)就以該元素作實(shí)參調(diào)用一次nzp函數(shù),即把a(bǔ)[i]的值傳送給形參v,供nzp函數(shù)使用。