C程序設(shè)計(jì)華中科技大學(xué)課件第三章new_第1頁
C程序設(shè)計(jì)華中科技大學(xué)課件第三章new_第2頁
C程序設(shè)計(jì)華中科技大學(xué)課件第三章new_第3頁
C程序設(shè)計(jì)華中科技大學(xué)課件第三章new_第4頁
C程序設(shè)計(jì)華中科技大學(xué)課件第三章new_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、c+程序設(shè)計(jì)程序設(shè)計(jì) 第三章第三章授課教師:李戰(zhàn)春網(wǎng)絡(luò)與計(jì)算中心本章內(nèi)容本章內(nèi)容函數(shù)的定義與調(diào)用 函數(shù)的參數(shù)傳遞,返回值及函數(shù)聲明 全局變量和局部變量 函數(shù)調(diào)用機(jī)制 作 用 域 與 標(biāo) 識(shí) 符 的 可 見 性存 儲(chǔ) 類 型 與 標(biāo) 識(shí) 符 的 生 命 期函數(shù)的遞歸調(diào)用函數(shù)的一些高級(jí)議題頭文件與多文件結(jié)構(gòu) 網(wǎng)絡(luò)與計(jì)算中心引例引例v編程計(jì)算輸出編程計(jì)算輸出33+4.63 + 433double p=1,x=3;int n=3;while(n-) p*=x;coutpendl;33?4.63?xn網(wǎng)絡(luò)與計(jì)算中心調(diào)用power(3.0,3 )函數(shù)power(3.0,3 )return 27.0主程序后

2、續(xù)語句n= 3x1= 3x2=4.6x3=43double power(double x,int n)/求x的n次冪double p=1;while(n-) p*=x;return p; int main()int n=3;double x1=3, x2=4.6, x3=43;double s;s=power(x1,n)+power(x2,n)+power(x3,n);cout“s= s b)t=a; else t=b; return t;函數(shù)頭函數(shù)數(shù)據(jù)類型 = 返回值數(shù)據(jù)類型網(wǎng)絡(luò)與計(jì)算中心3.1.2 函數(shù)的定義函數(shù)的定義v 無參函數(shù)無參函數(shù)/打印一個(gè)表頭void tablehead ( )

3、cout*endl;cout* example *endl;cout*endl;函數(shù)頭函數(shù)數(shù)據(jù)類型 = 返回值數(shù)據(jù)類型int input ( ) /輸入滿足要求的數(shù)據(jù)int n;cout輸入一個(gè)大于5的整數(shù):n;while(n=5);return n;網(wǎng)絡(luò)與計(jì)算中心return 語句語句 u return語句的作用: 返回函數(shù)值 不再執(zhí)行后續(xù)語句,程序控制返回調(diào)用點(diǎn) 一個(gè)函數(shù)體內(nèi)可以有多個(gè)return 語句 表達(dá)式返回值的類型與函數(shù)類型不相同時(shí),自動(dòng)強(qiáng)制轉(zhuǎn)換成函數(shù)的類型vreturn語句的格式:語句的格式: return 表達(dá)式;【例3.3】設(shè)計(jì)函數(shù),根據(jù)三角形的三邊長(zhǎng)求面積。如果不能構(gòu)成三角

4、形,給出提示信息。u分析:函數(shù)為計(jì)算三角形面積,一般三角形返回面積值,若不能構(gòu)成三角形則返回-1。設(shè)計(jì)一個(gè)主函數(shù)完成函數(shù)測(cè)試。根據(jù)返回值情況輸出相應(yīng)結(jié)果。網(wǎng)絡(luò)與計(jì)算中心【例3.3】程序:float trianglearea(float a, float b, float c) if (a+b=c)|(a+c=b)|(b+c=a) return -1; float s; s=(a+b+c)/2; return sqrt(s*(s-a)*(s-b)*(s-c) ;int main() float a,b,c,area; cout輸入三角形三邊輸入三角形三邊a,b,c:abc; area=trian

5、glearea(a,b,c); if(area=-1) cout(a,b, c )不能構(gòu)成三角形!不能構(gòu)成三角形!endl; else cout三角形三角形(a,b,c )面積為:面積為:areaendl; return 0;return 語句語句網(wǎng)絡(luò)與計(jì)算中心討論: -函數(shù)可以有返回值,也可以沒有返回值。對(duì)于沒有返回值的函數(shù),功能只是完成一定操作,應(yīng)將返回值類型定義為void ,函數(shù)體內(nèi)可以沒有return語句,當(dāng)需要在程序指定位置退出時(shí),可以在該處放置一個(gè):return ;return 語句網(wǎng)絡(luò)與計(jì)算中心函數(shù)頭函數(shù)頭函數(shù)體函數(shù)體 語句序列 定義函數(shù)返回值的數(shù)據(jù)類型。函數(shù)返回值由 retur

6、n 語句給出3.1.2 函數(shù)的定義函數(shù)的定義函數(shù)運(yùn)行時(shí)需要的數(shù)據(jù),由主調(diào)函數(shù)提供。“做什么”“拿什么來做”“結(jié)果是什么”“怎么做”網(wǎng)絡(luò)與計(jì)算中心3.1.3 函數(shù)的調(diào)用函數(shù)的調(diào)用v函數(shù)調(diào)用函數(shù)調(diào)用 所謂函數(shù)調(diào)用,就是使程序轉(zhuǎn)去執(zhí)行函數(shù)體。 無參函數(shù)的調(diào)用格式: 函數(shù)名( ) 有參函數(shù)的調(diào)用格式: 函數(shù)名(實(shí)際參數(shù)表)實(shí)際參數(shù)簡(jiǎn)稱實(shí)參,用來將實(shí)際參數(shù)的值傳遞給形參,因此可以是常量、具有值的變量或表達(dá)式。在c+中,除了主函數(shù)外,其他任何函數(shù)都不能單獨(dú)作為程序運(yùn)行。任何函數(shù)功能的實(shí)現(xiàn)都是通過被主函數(shù)直接或間接調(diào)用進(jìn)行的。網(wǎng)絡(luò)與計(jì)算中心【例3.1】 輸入兩個(gè)實(shí)數(shù),輸出其中較大的數(shù)。其中求兩個(gè)實(shí)數(shù)中的較大

7、數(shù)用函數(shù)完成。程序如下:程序如下:#include using namespace std;float max(float a,float b) return(a=b?a:b);int main()float a,b;cout輸入兩個(gè)實(shí)數(shù):輸入兩個(gè)實(shí)數(shù):ab;coutab 中較大數(shù)為中較大數(shù)為max(a,b)endl;return 0;main( )函數(shù)調(diào)用max(2.5,4.7 )函數(shù)max(2.5,4.7 )return 4.7 主程序后續(xù)語句網(wǎng)絡(luò)與計(jì)算中心v編寫函數(shù)把華氏溫度轉(zhuǎn)化為攝氏溫度,公式為編寫函數(shù)把華氏溫度轉(zhuǎn)化為攝氏溫度,公式為:c=(f-32)5/9;在主函數(shù)中計(jì)算輸出;在主函

8、數(shù)中計(jì)算輸出30、35、40、45、50、55、60華氏溫度華氏溫度對(duì)應(yīng)的攝氏溫度對(duì)照表。對(duì)應(yīng)的攝氏溫度對(duì)照表。v某大橋按照車輛的類型收取過橋費(fèi)用,自行車某大橋按照車輛的類型收取過橋費(fèi)用,自行車免費(fèi),摩托車免費(fèi),摩托車2元,小汽車元,小汽車5元,大客車元,大客車8元,元,大貨車大貨車10元。請(qǐng)編寫函數(shù)按照車輛的類型計(jì)算元。請(qǐng)編寫函數(shù)按照車輛的類型計(jì)算相應(yīng)的過橋費(fèi)用,在主函數(shù)中輸入車輛的類型相應(yīng)的過橋費(fèi)用,在主函數(shù)中輸入車輛的類型然后計(jì)算輸出費(fèi)用。然后計(jì)算輸出費(fèi)用。網(wǎng)絡(luò)與計(jì)算中心3.2.1 函數(shù)的參數(shù)傳遞及傳值調(diào)用 3.2.2 函數(shù)返回值 3.2.3 函數(shù)聲明網(wǎng)絡(luò)與計(jì)算中心【例3.2】 實(shí)參和形

9、參對(duì)應(yīng)關(guān)系的示例。調(diào)用power(4.6,3 )函數(shù)power(4.6,3 )return 97.336 主程序后續(xù)語句n= 3x= 4.6c= afloat power(float x,int n)/求求x x的的n n次冪次冪float p=1;while(n-) p*=x;return p; int main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;return 0;網(wǎng)絡(luò)與計(jì)算中心【例3.2

10、】 實(shí)參和形參對(duì)應(yīng)關(guān)系的示例。調(diào)用power(a,3 )函數(shù)power(97,3 )return 912673 主程序后續(xù)語句n= 3x= 4.6c= afloat power(float x,int n)/求求x x的的n n次冪次冪float p=1;while(n-) p*=x;return p; int main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;return 0;網(wǎng)絡(luò)與計(jì)算中心調(diào)用

11、power(3,4.6)函數(shù)power(3,4 )return 81主程序后續(xù)語句n= 3x= 4.6c= afloat power(float x,int n)/求求x x的的n n次冪次冪float p=1;while(n-) p*=x;return p; int main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;return 0;【例3.2】 實(shí)參和形參對(duì)應(yīng)關(guān)系的示例。網(wǎng)絡(luò)與計(jì)算中心3.2.

12、3 函數(shù)聲明函數(shù)聲明語法上對(duì)程序文件中函數(shù)的排列次序要求滿足語法上對(duì)程序文件中函數(shù)的排列次序要求滿足先定義后使用先定義后使用。對(duì)于函數(shù),。對(duì)于函數(shù),只要在調(diào)用之前作函數(shù)聲明(只要在調(diào)用之前作函數(shù)聲明(function declaration),則函數(shù)定義放在任何),則函數(shù)定義放在任何位置程序都能正確編譯運(yùn)行。位置程序都能正確編譯運(yùn)行。 函數(shù)聲明的引入:函數(shù)聲明的格式: 函數(shù)聲明是一條以分號(hào)結(jié)束的語句: 網(wǎng)絡(luò)與計(jì)算中心例如例如【例例3.33.3】中求三角形面積的中求三角形面積的函數(shù)聲明函數(shù)聲明為:為:float trianglearea(float a,float b,float c);或或fl

13、oat trianglearea(float,float,float);但下面的函數(shù)原型是錯(cuò)誤的:但下面的函數(shù)原型是錯(cuò)誤的:int trianglearea (float,float,float);/錯(cuò)誤,返回值類錯(cuò)誤,返回值類型不同型不同float trianglearea(int,int,int); /錯(cuò)誤,參數(shù)類型不同錯(cuò)誤,參數(shù)類型不同float trianglearea(float,float);/錯(cuò)誤,參數(shù)個(gè)數(shù)不同錯(cuò)誤,參數(shù)個(gè)數(shù)不同float trianglearea(float a, float b, float c) if (a+b=c)|(a+c=b)|(b+c=a) retu

14、rn -1; float s; s=(a+b+c)/2; return sqrt(s*(s-a)*(s-b)*(s-c) ;網(wǎng)絡(luò)與計(jì)算中心3.2.3 函數(shù)聲明函數(shù)聲明【例3.4】 輸出所有滿足下列條件的正整數(shù)m:10m1000且m、m2、m3均為回文數(shù)。分析:分析:回文指左右對(duì)稱的序列。如回文指左右對(duì)稱的序列。如121、353等就是回等就是回文數(shù)。判斷整數(shù)是否回文數(shù)用函數(shù)實(shí)現(xiàn),其思想是將文數(shù)。判斷整數(shù)是否回文數(shù)用函數(shù)實(shí)現(xiàn),其思想是將該數(shù)各位拆開后反向組成新的整數(shù),如果該整數(shù)與原該數(shù)各位拆開后反向組成新的整數(shù),如果該整數(shù)與原數(shù)相等則為回文數(shù)。數(shù)相等則為回文數(shù)。m m*m m*m*m11 121

15、1331101 10201 1030301111 12321 1367631 運(yùn)行結(jié)果:網(wǎng)絡(luò)與計(jì)算中心bool palindrome(int); /函數(shù)聲明函數(shù)聲明int main() int m;coutsetw(10)msetw(20)m*m“setw(20)m*m*mendl;for(m=11;m1000;m+)if(palindrome(m)&palindrome(m*m) &palindrome(m*m*m)coutsetw(10)msetw(20)m*msetw(20)m*m*m0);for(j=0;ji;j+) n=n*10+digitj;return (n=m)

16、;【例例3.43.4】 輸出回文數(shù)輸出回文數(shù)網(wǎng)絡(luò)與計(jì)算中心3.3.2 全局變量 3.3.3 局部變量網(wǎng)絡(luò)與計(jì)算中心 3.3.2 全局變量全局變量 在所有函數(shù)之外定義的變量稱為在所有函數(shù)之外定義的變量稱為全局變量全局變量。全局變量存放在全局?jǐn)?shù)據(jù)區(qū),因編譯器自動(dòng)將全局變量存放在全局?jǐn)?shù)據(jù)區(qū),因編譯器自動(dòng)將該區(qū)清為全該區(qū)清為全0,如果用戶在定義時(shí)不顯式給出初始,如果用戶在定義時(shí)不顯式給出初始化值,則化值,則等效初始化為全等效初始化為全0 。全局變量可定義在程序開頭,也可定義在中間全局變量可定義在程序開頭,也可定義在中間位置,該全局變量位置,該全局變量在定義處之后在定義處之后的任何位置都是可的任何位置都

17、是可以訪問的,稱為以訪問的,稱為可見的可見的。全局變量引入:網(wǎng)絡(luò)與計(jì)算中心打印打印200調(diào)用調(diào)用func( )函數(shù)函數(shù)func( )200*2=400打印打印400n=100n=100*2=200【例3.5】 多個(gè)函數(shù)使用全局變量的例子。int n=100;void func()n*=2; int main()n*=2;coutnendl;func();coutnendl; return 0;網(wǎng)絡(luò)與計(jì)算中心3.3.3 局部變量 定義在函數(shù)內(nèi)或塊內(nèi)的變量稱為定義在函數(shù)內(nèi)或塊內(nèi)的變量稱為局部變量局部變量。程序中使用的絕大多數(shù)變量都是局部變量。程序中使用的絕大多數(shù)變量都是局部變量。局部變量在程序運(yùn)行

18、到它所在的塊時(shí)建立在棧中,局部變量在程序運(yùn)行到它所在的塊時(shí)建立在棧中,該塊執(zhí)行完畢局部變量占有的空間即被釋放。故亦稱該塊執(zhí)行完畢局部變量占有的空間即被釋放。故亦稱為為自動(dòng)變量自動(dòng)變量。局部變量在定義時(shí)可加修飾詞局部變量在定義時(shí)可加修飾詞auto,但通常省略。,但通常省略。局部變量在定義時(shí)若未初始化,其值為局部變量在定義時(shí)若未初始化,其值為隨機(jī)數(shù)隨機(jī)數(shù)。局部變量引入:網(wǎng)絡(luò)與計(jì)算中心打印main()中的t=3.5調(diào)用fun( )函數(shù)fun( )打印fun()中的t=5 打印main()中的t=3.5t= 3.5t = 5void fun()auto int t=5;/ fun()中的局部變量,au

19、to可省略coutfun()中的t=tendl;int main()float t=3.5;/main()函數(shù)中的局部變量coutmain()中的t=tendl;fun();coutmain()中的t=tendl;return 0;【例3.6】 使用局部變量的例子。網(wǎng)絡(luò)與計(jì)算中心3.5.1 塊域3.5.2 函數(shù)聲明域3.5.3 文件域 網(wǎng)絡(luò)與計(jì)算中心 作用域:作用域:指標(biāo)識(shí)符能夠被使用的范圍。只有在指標(biāo)識(shí)符能夠被使用的范圍。只有在作用域內(nèi)標(biāo)識(shí)符才可以被訪問(稱為可見)作用域內(nèi)標(biāo)識(shí)符才可以被訪問(稱為可見)。本節(jié)重點(diǎn)討論本節(jié)重點(diǎn)討論局部域局部域和和文件域(全局域),文件域(全局域),其其中局部域

20、包括中局部域包括塊域塊域和和函數(shù)聲明域。函數(shù)聲明域。任何任何標(biāo)識(shí)符標(biāo)識(shí)符作用作用域的起始點(diǎn)均為域的起始點(diǎn)均為標(biāo)識(shí)符說明標(biāo)識(shí)符說明處。處。作用域與標(biāo)識(shí)符的可見性作用域與標(biāo)識(shí)符的可見性網(wǎng)絡(luò)與計(jì)算中心 函數(shù)中定義的標(biāo)識(shí)符,包括形參和函數(shù)體中定義函數(shù)中定義的標(biāo)識(shí)符,包括形參和函數(shù)體中定義的局部變量,作用域都在該函數(shù)內(nèi),也稱作的局部變量,作用域都在該函數(shù)內(nèi),也稱作函數(shù)域函數(shù)域。塊塊指一對(duì)大括號(hào)括起來的程序段。塊中定義的標(biāo)指一對(duì)大括號(hào)括起來的程序段。塊中定義的標(biāo)識(shí)符,作用域在塊內(nèi)。識(shí)符,作用域在塊內(nèi)。復(fù)合語句是一個(gè)塊。復(fù)合語句是一個(gè)塊。函數(shù)也是一個(gè)塊。函數(shù)也是一個(gè)塊。復(fù)合語句中定義的標(biāo)識(shí)符,復(fù)合語句中定義

21、的標(biāo)識(shí)符,作用域僅在該復(fù)合語句中。作用域僅在該復(fù)合語句中。塊的引入: 3.5.1 塊域網(wǎng)絡(luò)與計(jì)算中心a= 3 b= 535a=3 b=5a=5 b=3【例3.7】 輸入兩數(shù),按從大到小的順序保存,并輸出結(jié)果。結(jié)果棧t = 3 int main() int a,b; /具有函數(shù)域具有函數(shù)域 cout輸入兩整數(shù):輸入兩整數(shù):ab; cout“a=atb=b=a)int t; /具有塊域具有塊域 t=a; a=b; b=t; /交換交換a,b的值的值 couta=atb=bendl; return 0;上述程序若在最后一個(gè)上述程序若在最后一個(gè)cout語句處增加:語句處增加:couttendl;則編譯

22、時(shí)會(huì)提示錯(cuò)誤,因?yàn)樽兞縿t編譯時(shí)會(huì)提示錯(cuò)誤,因?yàn)樽兞縯的作用域只在的作用域只在if語句中,其它地方語句中,其它地方不可見不可見。 3.5.1 塊域網(wǎng)絡(luò)與計(jì)算中心由由vc+運(yùn)行,結(jié)果如下:運(yùn)行,結(jié)果如下:輸入兩整數(shù):輸入兩整數(shù):3 5調(diào)用前:實(shí)參調(diào)用前:實(shí)參a=3,b=5調(diào)用中調(diào)用中交換前:形參交換前:形參a=3,b=5交換后:形參交換后:形參a=5,b=3調(diào)用后:實(shí)參調(diào)用后:實(shí)參a=3,b=5 交換失敗交換失敗 3.5.1 塊域塊域v局部變量具有局部作局部變量具有局部作用域,使得程序在不用域,使得程序在不同塊中可以使用同名同塊中可以使用同名變量。這些同名變量變量。這些同名變量各自在自己的作用域各

23、自在自己的作用域中可見,在其它地方中可見,在其它地方不可見不可見【例3.8】設(shè)計(jì)函數(shù)完成兩數(shù)交換,用主函數(shù)進(jìn)行測(cè)試。網(wǎng)絡(luò)與計(jì)算中心100 200 3001100 500 600100200+300=500 500 200 300【例3.9】 顯示同名變量可見性。int n=100;#include using namespace std;int main() int i=200,j=300;cout ntitjendl; /內(nèi)部塊 int i=500,j=600,n; n=i+j; cout ntitj endl; /輸出局部變量n cout:nendl;/輸出全局變量n n=i+j;/修改全

24、局變量cout ntitj endl;return 0;網(wǎng)絡(luò)與計(jì)算中心 3.6.1 存儲(chǔ)類型3.6.2 生命期網(wǎng)絡(luò)與計(jì)算中心v自動(dòng)存儲(chǔ)類型自動(dòng)存儲(chǔ)類型 自動(dòng)變量為用auto說明的變量,通常auto缺省。 局部變量都是自動(dòng)變量,生命期開始于塊的執(zhí)行,結(jié)束于塊的結(jié)束,其原因是自動(dòng)變量的空間分配在棧中,塊開始執(zhí)行時(shí)系統(tǒng)自動(dòng)分配空間,塊執(zhí)行結(jié)束時(shí)系統(tǒng)自動(dòng)釋放空間。故自動(dòng)變量的生命期和作用域是一致的。3.6.1 存儲(chǔ)類型存儲(chǔ)類型 網(wǎng)絡(luò)與計(jì)算中心3.6.1 存儲(chǔ)類型存儲(chǔ)類型 v靜態(tài)存儲(chǔ)類型靜態(tài)存儲(chǔ)類型 static說明的變量稱為靜態(tài)變量。 位置不同區(qū)別局部靜態(tài)變量和全局靜態(tài)變量,也稱內(nèi)部靜態(tài)變量和外部靜態(tài)

25、變量。 靜態(tài)變量均存儲(chǔ)在全局?jǐn)?shù)據(jù)區(qū),如果程序未顯式給出初始化值,則等效初始化為全0。 靜態(tài)變量占有的空間要到整個(gè)程序執(zhí)行結(jié)束才釋放,故靜態(tài)變量具有整個(gè)程序執(zhí)行期間的生命期。網(wǎng)絡(luò)與計(jì)算中心局部靜態(tài)變量是定義在塊中的靜態(tài)變量,編譯局部靜態(tài)變量是定義在塊中的靜態(tài)變量,編譯系統(tǒng)在全局?jǐn)?shù)據(jù)區(qū)為其開辟空間并保存數(shù)據(jù),系統(tǒng)在全局?jǐn)?shù)據(jù)區(qū)為其開辟空間并保存數(shù)據(jù),如果顯式給出初始化值,則在該塊第一次執(zhí)行如果顯式給出初始化值,則在該塊第一次執(zhí)行時(shí)完成,且只進(jìn)行一次。時(shí)完成,且只進(jìn)行一次?!纠?.10】 自動(dòng)變量與局部靜態(tài)變量的區(qū)別3.6.1 存儲(chǔ)類型存儲(chǔ)類型 網(wǎng)絡(luò)與計(jì)算中心【例3.10】 自動(dòng)變量與局部靜態(tài)變量的區(qū)

26、別 int st() static int t=100; /局部靜態(tài)變量 t+; return t;int at() int t=100; /自動(dòng)變量 t+;return t;int main() int i; for(i=0;i5;i+) coutat()t; coutendl; for(i=0;i5;i+) coutst()t; coutendl; return 0;i= 0t= 1001 2 3 4 51011011011011013.6.1 存儲(chǔ)類型存儲(chǔ)類型 網(wǎng)絡(luò)與計(jì)算中心i= 0t=1001 21013 4 5102103104105【例例3.10】 自動(dòng)變量與局部靜態(tài)變量的區(qū)別自動(dòng)

27、變量與局部靜態(tài)變量的區(qū)別 int st() static int t=100; /局部靜態(tài)變量局部靜態(tài)變量 t+; return t;int at() int t=100; /自動(dòng)變量自動(dòng)變量 t+;return t;int main() int i; for(i=0;i5;i+) coutat()=t; coutendl; for(i=0;i5;i+) coutst()t; coutendl; return 0;3.6.1 存儲(chǔ)類型存儲(chǔ)類型 網(wǎng)絡(luò)與計(jì)算中心 自己調(diào)用自己網(wǎng)絡(luò)與計(jì)算中心1n 1)!-(n*n1n 1 0n 1 n!可以看出是用階乘定義階乘,這種自己定義自己的方法稱為遞歸定義。遞

28、歸的引入遞歸的引入v遞歸是一種描述問題的方法,或稱算法。遞歸是一種描述問題的方法,或稱算法。v遞歸的思想可以簡(jiǎn)單地描述為遞歸的思想可以簡(jiǎn)單地描述為“自己調(diào)用自己自己調(diào)用自己”。v例如用如下方法定義階乘:例如用如下方法定義階乘:網(wǎng)絡(luò)與計(jì)算中心遞歸定義的階乘函數(shù): int fac(int n)int y;if (n=0|n=1) y=1;else y=n*fac(n-1);return y;只要設(shè)計(jì)主函數(shù)調(diào)用階乘函數(shù),即可實(shí)現(xiàn)計(jì)算階乘。只要設(shè)計(jì)主函數(shù)調(diào)用階乘函數(shù),即可實(shí)現(xiàn)計(jì)算階乘。遞歸的引入遞歸的引入遞歸函數(shù)必須定義遞歸遞歸函數(shù)必須定義遞歸終止條件終止條件(stopping conditionst

29、opping condition),避免),避免無窮遞無窮遞歸歸(infinite recursioninfinite recursion)。網(wǎng)絡(luò)與計(jì)算中心#include int fac(int n)int y; coutnt;if(n=0|n=1) y=1; else y=n*fac(n-1);coutyt;return y;int main()coutn4!=fac(4)endl;return o; n=4cout4;y=4*fac(3);fac(4)=cout2;y=2*fac(1); n=2cout1;y=1;cout1;return 1; n=1 n=3cout3;y=3*fac(

30、2);cout24;return 24;cout6;return 6;cout2;return 2;24遞歸的引入遞歸的引入【例3.12】 求4!網(wǎng)絡(luò)與計(jì)算中心遞歸過程分析遞歸過程分析v遞歸函數(shù)的執(zhí)行分為遞歸函數(shù)的執(zhí)行分為“遞推遞推”和和“回歸回歸”兩個(gè)過兩個(gè)過程程v這兩個(gè)過程由遞歸這兩個(gè)過程由遞歸終止條件終止條件控制,即控制,即逐層遞推逐層遞推,直至遞歸終止條件,然后直至遞歸終止條件,然后逐層回歸逐層回歸。v每次調(diào)用發(fā)生時(shí)都首先判斷遞歸終止條件每次調(diào)用發(fā)生時(shí)都首先判斷遞歸終止條件網(wǎng)絡(luò)與計(jì)算中心 3.8.1 函數(shù)重載 3.8.2 默認(rèn)參數(shù)3.8.3 內(nèi)聯(lián)函數(shù)網(wǎng)絡(luò)與計(jì)算中心3.8.1 函數(shù)重載函

31、數(shù)重載 v重載的引入重載的引入 c+中,如果需要定義幾個(gè)功能相似,而參數(shù)類型不同的函數(shù),那么這樣的幾個(gè)函數(shù)可以使用相同的函數(shù)名,這就是函數(shù)重載 例:求和函數(shù)對(duì)應(yīng)不同的參數(shù)類型可以定義如下幾個(gè)重載函數(shù):int sum(int a,int b)double sum(double a,double b)float sum(float a,float b,float c)網(wǎng)絡(luò)與計(jì)算中心因此在定義重載函數(shù)時(shí)必須保證因此在定義重載函數(shù)時(shí)必須保證參數(shù)類型不同參數(shù)類型不同,僅僅返回值類型不同,僅僅返回值類型不同是不行的。函數(shù)重載的好處在于,可以用相同的函數(shù)名來定義一組功是不行的。函數(shù)重載的好處在于,可以用相同

32、的函數(shù)名來定義一組功能相同或類似的函數(shù),程序的可讀性增強(qiáng)。能相同或類似的函數(shù),程序的可讀性增強(qiáng)。3.8.1 函數(shù)重載函數(shù)重載 v重載匹配規(guī)則重載匹配規(guī)則(1)如果有嚴(yán)格匹配的函數(shù),就調(diào)用該函數(shù);(2)參數(shù)內(nèi)部轉(zhuǎn)換后如果匹配,調(diào)用該函數(shù);(3)通過用戶定義的轉(zhuǎn)換尋求匹配。網(wǎng)絡(luò)與計(jì)算中心3.8.1 函數(shù)重載函數(shù)重載 3+5=調(diào)用sum(3,5 )函數(shù)sum(3,5 )return 8 2.2+5.6=調(diào)用sum(2.2,5.6 )函數(shù)double sum(2.2,5.6 )return 7.8 3.5+4+8=調(diào)用sum(3.5, 4, 8 )函數(shù)float sum(3.5, 4.0, 8.0 )return 15.5 結(jié)束87.815.5int sum(int a,int b) return a+b;double sum(double a,double b)return a+b;float sum(float a,float b,float c)return a+b+c;int main()cout3+5=sum(3,5) endl;cout2.2+5.6= sum(2.2,5.6)endl;cout3.5+4+8= sum

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論