C++基礎(chǔ)課件第八章函數(shù)_第1頁(yè)
C++基礎(chǔ)課件第八章函數(shù)_第2頁(yè)
C++基礎(chǔ)課件第八章函數(shù)_第3頁(yè)
C++基礎(chǔ)課件第八章函數(shù)_第4頁(yè)
C++基礎(chǔ)課件第八章函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第八章 函數(shù),課程內(nèi)容安排,函數(shù)的概念、分類和組成。 函數(shù)的定義、聲明和原型。 函數(shù)的調(diào)用和遞歸調(diào)用。 內(nèi)聯(lián)函數(shù)的應(yīng)用。 函數(shù)的綜合應(yīng)用。,函數(shù)的基本概念,簡(jiǎn)單的說(shuō),函數(shù)就是對(duì)復(fù)雜問(wèn)題的一種“自頂向下,逐步求精”思想的體現(xiàn)。用戶可以將一個(gè)大而復(fù)雜的程序分解為若干個(gè)相對(duì)獨(dú)立而且功能單一的小塊程序(函數(shù))進(jìn)行編寫,并通過(guò)在各個(gè)函數(shù)之間進(jìn)行調(diào)用來(lái)實(shí)現(xiàn)總體的功能,函數(shù)的組成,一般的說(shuō),函數(shù)由四部分構(gòu)成:返回類型、函數(shù)名、參數(shù)列表和函數(shù)體。函數(shù)名就是函數(shù)的名字,即函數(shù)的標(biāo)識(shí)符。既然是標(biāo)識(shí)符,就必須遵守標(biāo)識(shí)符的命名規(guī)則。同變量的標(biāo)識(shí)符相同,函數(shù)的標(biāo)識(shí)符也是只能由字母、數(shù)字以及下劃線組成,并且不能以數(shù)字開(kāi)頭

2、。,聲明函數(shù),函數(shù)聲明的作用就是告訴調(diào)用者如何使用該函數(shù),即函數(shù)接受什么類型的參數(shù),參數(shù)的個(gè)數(shù),以及函數(shù)的返回類型。函數(shù)聲明只是函數(shù)定義的一部分,缺少函數(shù)體。在C+中,聲明函數(shù)的一般形式如下所示: 類型說(shuō)明符 函數(shù)名(參數(shù)列表); 其中,類型說(shuō)明符指明了本函數(shù)的類型,函數(shù)的類型實(shí)際上是函數(shù)返回值的類型。而函數(shù)名即一個(gè)符合C+語(yǔ)法要求的標(biāo)識(shí)符。,定義函數(shù),一個(gè)函數(shù)的定義由返回類型、函數(shù)名、參數(shù)列表和函數(shù)體組成。前面的三個(gè)部分稱為函數(shù)的聲明,或函數(shù)原型。相對(duì)函數(shù)體來(lái)講,也稱作是函數(shù)頭。函數(shù)體是一個(gè)語(yǔ)句塊,由花括號(hào)“”和“”包圍起來(lái)。 例如,下面語(yǔ)句根據(jù)上述格式定義了一個(gè)無(wú)參函數(shù)hello。 voi

3、d hello() cout”Hello World”; ,形參和實(shí)參,一般來(lái)說(shuō),C+中函數(shù)的參數(shù)可以分為形式參數(shù)(形參)和實(shí)際參數(shù)(實(shí)參)兩種。所謂實(shí)參,是指函數(shù)定義時(shí)的參數(shù)。之所以稱作形參,是因?yàn)檫@些參數(shù)實(shí)際并不存在,只是在形式上代表運(yùn)行時(shí)實(shí)際出現(xiàn)的參數(shù)。 相對(duì)應(yīng)的,所謂實(shí)參,是指函數(shù)調(diào)用時(shí)傳入的參數(shù),也是程序運(yùn)行時(shí)實(shí)際存在的參數(shù)。簡(jiǎn)單地說(shuō),被調(diào)用函數(shù)與主調(diào)用函數(shù)之間的通信可以通過(guò)參數(shù)的傳遞來(lái)實(shí)現(xiàn)。,在C+中實(shí)參傳遞給形參時(shí)有兩種方式:值傳遞和地址傳遞。其中,值傳遞是指實(shí)參傳遞給函數(shù)后,系統(tǒng)構(gòu)建一份實(shí)參的副本,其值與實(shí)參的值相同。此后函數(shù)將針對(duì)這份副本進(jìn)行操作,對(duì)原始的實(shí)參沒(méi)有任何影響。

4、值傳遞過(guò)程中,被調(diào)函數(shù)的形式參數(shù)作為被調(diào)函數(shù)的局部變量處理,即在堆棧中開(kāi)辟了內(nèi)存空間以存放由主調(diào)函數(shù)放進(jìn)來(lái)的實(shí)參的值,從而成為了實(shí)參的一個(gè)副本。 地址傳遞過(guò)程中,函數(shù)的形式參數(shù)雖然也作為局部變量在堆棧中開(kāi)辟了內(nèi)存空間,但是這時(shí)存放的是由主調(diào)函數(shù)放進(jìn)來(lái)的實(shí)參變量的地址。函數(shù)對(duì)形參的任何操作都被處理成間接尋址,即通過(guò)堆棧中存放的地址訪問(wèn)主調(diào)函數(shù)中的實(shí)參變量。正因?yàn)槿绱?,?duì)形參做的任何操作都影響了主調(diào)函數(shù)中的實(shí)參變量。,函數(shù)參數(shù)傳遞,在進(jìn)行函數(shù)的聲明或定義后,在其他程序中就可以對(duì)該函數(shù)進(jìn)行調(diào)用了。根據(jù)根據(jù)參數(shù)傳遞的方式不同,函數(shù)調(diào)用可分為傳值調(diào)用和傳址調(diào)用;根據(jù)函數(shù)是否有返回值,函數(shù)調(diào)用可分為無(wú)返回

5、值的調(diào)用和有返回值的調(diào)用。,函數(shù)的調(diào)用,如果一個(gè)函數(shù)在其定義中又調(diào)用自身,這個(gè)過(guò)程叫作遞歸調(diào)用,該函數(shù)則稱為遞歸函數(shù)。遞歸分為直接遞歸和間接遞歸。 在遞歸調(diào)用中,直接遞歸是指函數(shù)直接調(diào)用自身,對(duì)于一個(gè)函數(shù)func而言 間接遞歸也是遞歸的一種重要形式,其是指A函數(shù)調(diào)用了B函數(shù),而B(niǎo)函數(shù)又調(diào)用A函數(shù),遞歸,main函數(shù),讀者知道,每個(gè)C+程序都必須要有一個(gè)main()函數(shù),main()函數(shù)也稱為主函數(shù),是C+程序中最重要的函數(shù),所有完整可運(yùn)行的C+程序都必須有一個(gè)唯一的main()函數(shù)。,內(nèi)聯(lián)函數(shù),在C+中,如果在函數(shù)的聲明前加上inline關(guān)鍵字,則稱為內(nèi)聯(lián)函數(shù)。對(duì)于內(nèi)聯(lián)函數(shù),編譯器不創(chuàng)建真實(shí)的

6、函數(shù),而只是在函數(shù)調(diào)用處展開(kāi)(即將函數(shù)的代碼直接復(fù)制到調(diào)用處)。這樣,在“調(diào)用”函數(shù)時(shí)就不用跳轉(zhuǎn)了,避免了使用真實(shí)函數(shù)的代價(jià)。例如,對(duì)于add函數(shù),如果其聲明為: inline int add ( int a, int b ); 則在函數(shù)調(diào)用處,例如: int x = add ( 1, 2 ); 編譯后,實(shí)際的代碼是: int x = 1 + 2;,小結(jié),本章詳細(xì)講解的內(nèi)容主要包括函數(shù)的定義、聲明和調(diào)用,這是在實(shí)際程序中使用較多的。通過(guò)函數(shù),可以將實(shí)現(xiàn)某種功能的一系列語(yǔ)句組織成一個(gè)整體,以后使用時(shí)只要使用函數(shù)名,并傳入相應(yīng)的參數(shù)即可。而不必重復(fù)實(shí)現(xiàn)該功能。因此,本章還重點(diǎn)講述函數(shù)的參數(shù)傳遞、嵌

7、套調(diào)用和遞歸調(diào)用等。此外,本章還就內(nèi)聯(lián)函數(shù)做了簡(jiǎn)要介紹。,習(xí)題,【題目103】下列程序的輸出結(jié)果是多少? #include using namespace std; int fun(int x,int y) return x*y; int main() int k=5; coutfun(k+, +k)endl; system(“pause”); return 0; 【分析】該試題主要考查函數(shù)的調(diào)用。上述程序中的函數(shù)fun包含兩個(gè)參數(shù),在調(diào)用時(shí)將實(shí)參傳遞給形參。讀者需要注意實(shí)參分別為k+和+k,進(jìn)行參數(shù)傳遞后,k的值都將加1。因此,傳遞到函數(shù)fun后,x和y都變?yōu)?,運(yùn)行函數(shù)后,得到函數(shù)返回值3

8、6。因此,該程序的輸出為36,【題目104】已知三角形的三邊,求三角形面積,將其編寫成一個(gè)函數(shù),在main函數(shù)中調(diào)用該函數(shù)。例如,運(yùn)行該程序段后輸入三角形的三邊分別為3 4 5,輸出三角形面積如下圖8.29所示。,【題目105】編寫函數(shù),重復(fù)打印給定字符n次。例如,在主函數(shù)中調(diào)用該函數(shù)后,給出打印字符和次數(shù),該函數(shù)將在屏幕上輸出指定字符。 【分析】該試題主要考查字符串參數(shù)在函數(shù)調(diào)用過(guò)程中的傳遞。根據(jù)前面章節(jié)的學(xué)習(xí),讀者知道字符的輸出可以通過(guò)輸出流cout來(lái)實(shí)現(xiàn),但更好的辦法是通過(guò)putchar函數(shù)來(lái)實(shí)現(xiàn)。指定輸出字符的次數(shù)后,通過(guò)一個(gè)循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)即可。同時(shí),在主函數(shù)中要指定需打印的字符,也可

9、以用函數(shù)getchar來(lái)實(shí)現(xiàn)接收。 【題目107】編寫一個(gè)遞歸函數(shù),將輸入的整數(shù)按字符串形式正序輸出。例如:輸入12345,輸出:1 2 3 4 5。,【題目106】下面程序段的運(yùn)行結(jié)果是多少? #include using namespace std; int func(int x) int p; if (x=0 | x=1) return (3); p=x- func(x-2); return p; int main( ) coutfunc(9); system(“pause”); return 0; ,【題目108】編寫一個(gè)遞歸函數(shù),求出:(x/1!)+(x*x*x/3!)+(5個(gè)x相乘

10、/5!)+(2n-1)個(gè)X相乘/(2*n-1)!)的值,到第n項(xiàng),n和x的值由鍵盤輸入。 【分析】該試題主要考查遞歸函數(shù)的編寫及實(shí)現(xiàn)。在該函數(shù)中,只有當(dāng)x為1時(shí)其階乘才為0,其他時(shí)候?yàn)?*n-1的階乘,其次n個(gè)x相乘即x的(2n-1)次方,可以通過(guò)冪函數(shù)pow來(lái)實(shí)現(xiàn)。該表達(dá)式好要求和,因此使用循環(huán)語(yǔ)句將這(2n-1)個(gè)表達(dá)式相加。因此,該程序可以編寫兩個(gè)函數(shù),一個(gè)用于實(shí)現(xiàn)遞歸,另一個(gè)求出表達(dá)式(2n-1)個(gè)X相乘/(2*n-1)!)的值,然后再主函數(shù)main中調(diào)用,并通過(guò)循環(huán)求出最終值。,【題目109】下列是正確的遞歸函數(shù)的是? Aint fun(int n)Bint fun(int n) i

11、f (n1) return 1; if (n1) return 1; else return n*fun(n*2); else return n*fun(n-1); 【分析】該試題主要考查遞歸函數(shù)的定義。在上述4個(gè)選項(xiàng)中,選項(xiàng)A中遞歸調(diào)用fun(n+1)將導(dǎo)致參數(shù)越來(lái)越大,從而無(wú)法進(jìn)行回歸;選項(xiàng)C和選項(xiàng)D都不能執(zhí)行到遞歸,無(wú)法進(jìn)行遞推,都不符合遞歸函數(shù)的定義;只有選項(xiàng)B既能遞推也能回歸,因此選項(xiàng)B是正確的。,【題目110】編寫一個(gè)函數(shù),用于檢驗(yàn)用戶輸入的一個(gè)字符是大寫字母還是小寫字母或不是26個(gè)英文字母。 【題目111】編寫一個(gè)函數(shù),將華氏溫度轉(zhuǎn)換為攝氏溫度,公式為C=(F-32)*5/9;并在主函數(shù)中調(diào)用。 【題目112】編寫一個(gè)函數(shù),利用非遞歸的方法求斐波那契數(shù)列第n項(xiàng)。 【題目113】編寫一個(gè)函數(shù),利用遞歸的方法求斐波那契數(shù)列第n項(xiàng)。,【題目114】編寫函數(shù)利用遞歸的方法計(jì)算x的n階勒讓德多項(xiàng)式的值。該公式如下: 【題目115】設(shè)計(jì)兩個(gè)求面積的函數(shù): area(); /求圓面積,需傳遞一個(gè)參數(shù) area(); /求矩形面積,需傳遞兩個(gè)參數(shù) 然后自行輸入數(shù)據(jù)進(jìn)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論