下個(gè)月計(jì)算機(jī)等級(jí)考試就要開(kāi)始報(bào)名了,每個(gè)省份具體的報(bào)名時(shí)間還未出來(lái),大家需提前準(zhǔn)備好報(bào)名材料,想要知道具體的報(bào)名時(shí)間,請(qǐng)及時(shí)關(guān)注我們的計(jì)算機(jī)培訓(xùn)欄目,我們將會(huì)在第一時(shí)間為大家報(bào)道,小編整理了2014年計(jì)算機(jī)二級(jí)C語(yǔ)言函數(shù)定義知識(shí)點(diǎn)解析,希望能幫助大家復(fù)習(xí)。
C程序的基本單元--函數(shù)。函數(shù)中包含了程序的可執(zhí)行代碼。每個(gè)C程序的入口和出口都位于函數(shù)main()之中。main()函數(shù)可以調(diào)用其他函數(shù),這些函數(shù)執(zhí)行完畢后程序的控制又返回到main()函數(shù)中,main()函數(shù)不能被別的函數(shù)所調(diào)用。通常我們把這些被調(diào)用的函數(shù)稱(chēng)為下層(lower- level)函數(shù)。函數(shù)調(diào)用發(fā)生時(shí),立即執(zhí)行被調(diào)用的函數(shù),而調(diào)用者則進(jìn)入等待狀態(tài),直到被調(diào)用函數(shù)執(zhí)行完畢。函數(shù)可以有參數(shù)和返回值。
程序員一般把函數(shù)當(dāng)作“黑箱”處理,并不關(guān)心它內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。當(dāng)然程序員也可以自己開(kāi)發(fā)函數(shù)庫(kù)。
說(shuō)明一點(diǎn),函數(shù)這一節(jié)很重要,可以說(shuō)一個(gè)程序的優(yōu)劣集中體現(xiàn)在函數(shù)上。如果函數(shù)使用的恰當(dāng),可以讓程序看起來(lái)有條理,容易看懂。如果函數(shù)使用的亂七八糟,或者是沒(méi)有使用函數(shù),程序就會(huì)顯得很亂,不僅讓別人無(wú)法查看,就連自己也容易暈頭轉(zhuǎn)向?梢赃@樣說(shuō),如果超過(guò)100行的程序中沒(méi)有使用函數(shù),那么這個(gè)程序一定很羅嗦(有些絕對(duì),但也是事實(shí))。
一、函數(shù)的定義
一個(gè)函數(shù)包括函數(shù)頭和語(yǔ)句體兩部分。
函數(shù)頭由下列三不分組成:
函數(shù)返回值類(lèi)型
函數(shù)名
參數(shù)表
一個(gè)完整的函數(shù)應(yīng)該是這樣的:
函數(shù)返回值類(lèi)型 函數(shù)名(參數(shù)表)
{
語(yǔ)句體;
}
函數(shù)返回值類(lèi)型可以是前面說(shuō)到的某個(gè)數(shù)據(jù)類(lèi)型、或者是某個(gè)數(shù)據(jù)類(lèi)型的指針、指向結(jié)構(gòu)的指針、指向數(shù)組的指針。指針概念到以后再介紹。
函數(shù)名在程序中必須是唯一的,它也遵循標(biāo)識(shí)符命名規(guī)則。
參數(shù)表可以沒(méi)有也可以有多個(gè),在函數(shù)調(diào)用的時(shí)候,實(shí)際參數(shù)將被拷貝到這些變量中。語(yǔ)句體包括局部變量的聲明和可執(zhí)行代碼。
我們?cè)谇懊嫫鋵?shí)已經(jīng)接觸過(guò)函數(shù)了,如abs(),sqrt(),我們并不知道它的內(nèi)部是什么,我們只要會(huì)使用它即可。
這一節(jié)主要講解無(wú)參數(shù)無(wú)返回值的函數(shù)調(diào)用。
二、函數(shù)的聲明和調(diào)用
為了調(diào)用一個(gè)函數(shù),必須事先聲明該函數(shù)的返回值類(lèi)型和參數(shù)類(lèi)型,這和使用變量的道理是一樣的(有一種可以例外,就是函數(shù)的定義在調(diào)用之前,下面再講述)。
看一個(gè)簡(jiǎn)單的例子:
void a(); /*函數(shù)聲明*/
main()
{
a(); /*函數(shù)調(diào)用*/
}
void a() /*函數(shù)定義*/
{
int num;
scanf(%d,&num);
printf(%d\n,num);
}
在main()的前面聲明了一個(gè)函數(shù),函數(shù)類(lèi)型是void型,函數(shù)名為a,無(wú)參數(shù)。然后在main()函數(shù)里面調(diào)用這個(gè)函數(shù),該函數(shù)的作用很簡(jiǎn)單,就是輸入一個(gè)整數(shù)然后再顯示它。在調(diào)用函數(shù)之前聲明了該函數(shù)其實(shí)它和下面這個(gè)程序的功能是一樣的:
main()
{
int num;
scanf(%d,&num);
printf(%d\n,num);
}
可以看出,實(shí)際上就是把a(bǔ)()函數(shù)里面的所有內(nèi)容直接搬到main()函數(shù)里面(注意,這句話不是絕對(duì)的。)
我們前面已經(jīng)說(shuō)了,當(dāng)定義在調(diào)用之前時(shí),可以不聲明函數(shù)。所以上面的程序和下面這個(gè)也是等價(jià)的:
void a()
{
int num;
scanf(%d,&num);
printf(%d\n,num);
}
main()
{
a();
}
因?yàn)槎x在調(diào)用之前,所以可以不聲明函數(shù),這是因?yàn)榫幾g器在編譯的時(shí)候,已經(jīng)發(fā)現(xiàn)a是一個(gè)函數(shù)名,是無(wú)返回值類(lèi)型無(wú)參數(shù)的函數(shù)了。
那么很多人也許就會(huì)想,那我們何必還要聲明這一步呢?我們只要把所有的函數(shù)的定義都放在前面不就可以了嗎?這種想法是不可取的,一個(gè)好的程序員總是在程序的開(kāi)頭聲明所有用到的函數(shù)和變量,這是為了以后好檢查。
前面說(shuō)了,在調(diào)用之前,必須先聲明函數(shù),所以下面的做法也是正確的(但在這里我個(gè)人并不提倡)。
main()
{
void a();
a();
}
v oid a()
{
int num;
scanf(%d,&num);
printf(%d\n,num);
}
一般來(lái)說(shuō),比較好的程序書(shū)寫(xiě)順序是,先聲明函數(shù),然后寫(xiě)主函數(shù),然后再寫(xiě)那些自定義的函數(shù)。
既然main()函數(shù)可以調(diào)用別的函數(shù),那么我們自己定義的函數(shù)能不能再調(diào)用其他函數(shù)呢?答案是可以的?聪旅娴睦樱
void a();
void b();
main()
{
a();
}
void a()
{
b();
}
void b()
{
int num;
scanf(%d,&num);
printf(%d\n,num);
}
main()函數(shù)先調(diào)用a()函數(shù),而a()函數(shù)又調(diào)用b()函數(shù)。在C語(yǔ)言里,對(duì)調(diào)用函數(shù)的層數(shù)沒(méi)有嚴(yán)格的限制,我們可以往下調(diào)用100層、1000 層,但是在這里我們并不提倡調(diào)用的層數(shù)太多(除非是遞歸),因?yàn)閷訑?shù)太多,對(duì)以后的檢查有一些干擾,函數(shù)調(diào)過(guò)來(lái)調(diào)過(guò)去,容易讓自己都暈頭轉(zhuǎn)向。
在計(jì)算機(jī)培訓(xùn)欄目中我們整理了大量的輔導(dǎo)資料,包括網(wǎng)絡(luò)工程師、軟件工程師、電腦維修的基本常識(shí)輔導(dǎo)材料,還有計(jì)算機(jī)等級(jí)考試培訓(xùn)課程等內(nèi)容。
|
|
||
|
|