函數(shù)的值
函數(shù)的值是指函數(shù)被調(diào)用之后, 執(zhí)行函數(shù)體中的程序段所取得的并返回給主調(diào)函數(shù)的值。如調(diào)用正弦函數(shù)取得正
弦值,調(diào)用例 5.1的 max函數(shù)取得的最大數(shù)等。對(duì)函數(shù)的值(或稱(chēng)函數(shù)返回值)有以下一些說(shuō)明:
1. 函數(shù)的值只能通過(guò)return語(yǔ)句返回主調(diào)函數(shù)。return 語(yǔ)句的一般形式為:
return 表達(dá)式;
或者為:
return (表達(dá)式);
該語(yǔ)句的功能是計(jì)算表達(dá)式的值,并返回給主調(diào)函數(shù)。 在函數(shù)中允許有多個(gè) return語(yǔ)句,但每次調(diào)用只能有一個(gè)
return 語(yǔ)句被執(zhí)行, 因此只能返回一個(gè)函數(shù)值。
2. 函數(shù)值的類(lèi)型和函數(shù)定義中函數(shù)的類(lèi)型應(yīng)保持一致。 如果兩者不一致,則以函數(shù)類(lèi)型為準(zhǔn),自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換。
3. 如函數(shù)值為整型,在函數(shù)定義時(shí)可以省去類(lèi)型說(shuō)明。
4. 不返回函數(shù)值的函數(shù),可以明確定義為“空類(lèi)型”, 類(lèi)型說(shuō)明符為“void”。如例 5.3中函數(shù) s并不向主函數(shù)返
函數(shù)值,因此可定義為:
void s(int n)
{ ……
}
一旦函數(shù)被定義為空類(lèi)型后, 就不能在主調(diào)函數(shù)中使用被調(diào)函數(shù)的函數(shù)值了。例如,在定義 s為空類(lèi)型后,在主
函數(shù)中寫(xiě)下述語(yǔ)句 sum=s(n); 就是錯(cuò)誤的。為了使程序有良好的可讀性并減少出錯(cuò), 凡不要求返回值的函數(shù)都應(yīng)定
義為空類(lèi)型。函數(shù)說(shuō)明在主調(diào)函數(shù)中調(diào)用某函數(shù)之前應(yīng)對(duì)該被調(diào)函數(shù)進(jìn)行說(shuō)明,這與使用變量之前要先進(jìn)行變量說(shuō)明
是一樣的。 在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)作說(shuō)明的目的是使編譯系統(tǒng)知道被調(diào)函數(shù)返回值的類(lèi)型, 以便在主調(diào)函數(shù)中按
此種類(lèi)型對(duì)返回值作相應(yīng)的處理。 對(duì)被調(diào)函數(shù)的說(shuō)明也有兩種格式,一種為傳統(tǒng)格式,其一般格式為: 類(lèi)型說(shuō)明符 被
調(diào)函數(shù)名();這種格式只給出函數(shù)返回值的類(lèi)型,被調(diào)函數(shù)名及一個(gè)空括號(hào)。
這種格式由于在括號(hào)中沒(méi)有任何參數(shù)信息, 因此不便于編譯系統(tǒng)進(jìn)行錯(cuò)誤檢查,易于發(fā)生錯(cuò)誤。另一種為現(xiàn)代格
式,其一般形式為:
類(lèi)型說(shuō)明符 被調(diào)函數(shù)名(類(lèi)型 形參,類(lèi)型 形參…);
或?yàn)椋?
類(lèi)型說(shuō)明符 被調(diào)函數(shù)名(類(lèi)型,類(lèi)型…);
現(xiàn)代格式的括號(hào)內(nèi)給出了形參的類(lèi)型和形參名, 或只給出形參類(lèi)型。這便于編譯系統(tǒng)進(jìn)行檢錯(cuò),以防止可能出現(xiàn)
的錯(cuò)誤。例 5.1 main函數(shù)中對(duì) max函數(shù)的說(shuō)明若
用傳統(tǒng)格式可寫(xiě)為:
int max();
用現(xiàn)代格式可寫(xiě)為:
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)。
3. 如在所有函數(shù)定義之前, 在函數(shù)外預(yù)先說(shuō)明了各個(gè)函數(shù)的類(lèi)型,則在以后的各主調(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ù)使用。
2015年全國(guó)職稱(chēng)計(jì)算機(jī)考試教材(2007模 .. 定價(jià):¥225 優(yōu)惠價(jià):¥213 更多書(shū)籍 | |
全國(guó)職稱(chēng)計(jì)算機(jī)考試速成過(guò)關(guān)系列套裝:W .. 定價(jià):¥133 優(yōu)惠價(jià):¥133.0 更多書(shū)籍 |