C++語言程序設計第三章函數_第1頁
C++語言程序設計第三章函數_第2頁
C++語言程序設計第三章函數_第3頁
C++語言程序設計第三章函數_第4頁
C++語言程序設計第三章函數_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、C+語言程序設計第三章函數1 C+語言程序設計 C+語言程序設計 C+語言程序設計第三章函數2 本章主要內容本章主要內容 l函數的定義、聲明和調用函數的定義、聲明和調用 l函數間的參數傳遞函數間的參數傳遞 l內聯函數內聯函數 l帶默認形參值的函數帶默認形參值的函數 l函數重載函數重載 lC+系統(tǒng)函數系統(tǒng)函數 C+語言程序設計 C+語言程序設計第三章函數3 函數的定義函數的定義 l函數是面向對象程序設計中,對功能的函數是面向對象程序設計中,對功能的 抽象抽象 l函數定義的語法形式函數定義的語法形式 類型標識符 函數名(形式參數表) 語句序列 函數的聲明與使用 是被初始化的內部 變量,壽命和可見

2、性僅限于函數內部 若無返回值,寫void double power(double x, int n)double power(double x, int n) double val=1.0; double val=1.0; while (n - -) val=val while (n - -) val=val* *x;x; return(val); return(val); C+語言程序設計 C+語言程序設計第三章函數4 函數的調用函數的調用 l調用前先聲明函數原型:調用前先聲明函數原型: 在調用函數中,或程序文件中所有函數之 外,按如下形式說明: 類型標識符 被調用函數名(含類型說明的形參表

3、); l調用形式調用形式 函數名(實參列表) l嵌套調用嵌套調用 函數可以嵌套調用,但不允許嵌套定義。 遞歸調用 函數直接或間接調用自身。 函數的聲明與使用 C+語言程序設計 C+語言程序設計第三章函數5 例例3-1編寫一個求編寫一個求x的的n次方的函數次方的函數 # #include include double power(double x, int n);double power(double x, int n); int main()int main() cout5 to the power 2 is cout5 to the power 2 is power(5,2)endl; po

4、wer(5,2)endl; double power(double x, int n)double power(double x, int n) double val=1.0;double val=1.0; while (n-) val=valwhile (n-) val=val* *x;x; return(val);return(val); 函數的聲明與使用 C+語言程序設計 C+語言程序設計第三章函數6 運行結果:運行結果: 5 to the power 2 is 255 to the power 2 is 25 例例3-1編寫一個求編寫一個求x的的n次方的函數次方的函數 函數的聲明與使用

5、 C+語言程序設計 C+語言程序設計第三章函數7 例例3-2 數制轉換數制轉換 題目:題目: 輸入一個輸入一個8 8位二進制數,將其轉換為十進位二進制數,將其轉換為十進 制數輸出。制數輸出。 例如:例如: 0 02 2 = = 0(20(27 7)+ 1(2)+ 1(26 6)+ 1(2)+ 1(25 5)+0(2)+0(24 4)+1(2)+1(23 3)+0(2)+0(22 2)+0(2)+0(21 1)+1(2)+1(20 0) ) =105=10510 10 所以,如果輸入所以,如果輸入0 0,則應輸出,則應輸出105105 函數的聲明與使用 C+語言程序設計第三章函數8 # #inc

6、lude include double power (double x, int n); /double power (double x, int n); /聲明函數原型聲明函數原型powerpower int main()int main() int i;int i; int value = 0;int value = 0; char ch;char ch; cout Enter an 8 bit binary number ;cout = 0; i-)for (i = 7; i = 0; i-) cin ch;cin ch; if (ch = 1)if (ch = 1) value +=

7、int(power(2,i); /value += int(power(2,i); /調用函數調用函數powerpower cout Decimal value is valueendl;cout Decimal value is valueendl; double power (double x, int n) /double power (double x, int n) /聲明函數聲明函數powerpower double val = 1.0;double val = 1.0; while (n-) val while (n-) val * *= x;= x; return(val);r

8、eturn(val); 運行結果:運行結果: Enter an 8 bit binary number Enter an 8 bit binary number 0110100101101001 Decimal value is 105Decimal value is 105 8 C+語言程序設計 C+語言程序設計第三章函數9 例例3-3編寫程序求編寫程序求的值的值 其中其中arctanarctan用如下形式的級數計算:用如下形式的級數計算: 直到級數某項絕對值不大于直到級數某項絕對值不大于1010-15 -15為止; 為止; 和和x x均為均為doubledouble型。型。 函數的聲明與使

9、用 239 1 arctan4 5 1 arctan16 753 )arctan( 753 xxx xx C+語言程序設計第三章函數10 #include#include int main()int main() double a,b; double a,b; double arctan(double x);/ double arctan(double x);/函數原型聲明函數原型聲明 a=16.0a=16.0* *arctan(1/5.0); arctan(1/5.0); b=4.0 b=4.0* *arctan(1/239.0); arctan(1/239.0); / /注意:因為整數相除

10、結果取整,注意:因為整數相除結果取整, /如果參數寫如果參數寫1/51/5,1/2391/239,結果就都是,結果就都是0 0 coutPI=a-bendl; coutPI=a-b1e-15) while(e/i1e-15) f=e/i; f=e/i; r=(i%4=1)? r+f : r-f; r=(i%4=1)? r+f : r-f; e=e e=e* *sqr; i+=2;sqr; i+=2; return r; return r; 運行結果:運行結果: PI=3.14159PI=3.14159 11 C+語言程序設計 C+語言程序設計第三章函數12 例例3-4 l尋找并輸出尋找并輸出1

11、199911999之間的數之間的數m m,它滿足,它滿足m m、 m m2 2和和m m3 3均為回文數。均為回文數。 回文:各位數字左右對稱的整數。 例如:11滿足上述條件 112 2=121,113 3=1331。 l分析:分析: 10取余的方法,從最低位開始,依次取出該數 的各位數字。按反序重新構成新的數,比較與 原數是否相等,若相等,則原數為回文。 -參見例參見例2-6 函數的聲明與使用 C+語言程序設計第三章函數13 #include #include int main()int main() bool symm(long n); bool symm(long n); long m;

12、 long m; for(m=11; m1000; m+) for(m=11; m1000; m+) if (symm(m)mendl; 13 C+語言程序設計第三章函數14 bool symm(long n)bool symm(long n) long i, m; long i, m; i=n ; m=0 ; i=n ; m=0 ; while(i) / while(i) /等價于等價于while(i!=0)while(i!=0) m=m m=m* *10+i%10; /10+i%10; /對求出的每一位累加對求出的每一位累加 i=i/10 ;i=i/10 ; return( m=n );

13、return( m=n ); 14 C+語言程序設計第三章函數15 運行結果:運行結果: m=11 mm=11 m* *m=121 mm=121 m* *m m* *m=1331m=1331 m=101 mm=101 m* *m=10201 mm=10201 m* *m m* *m=1030301m=1030301 m=111 mm=111 m* *m=12321 mm=12321 m* *m m* *m=1367631m=1367631 15 C+語言程序設計 C+語言程序設計第三章函數16 例例3-5 計算如下公式,并輸出結果:計算如下公式,并輸出結果: 其中其中r r、s s的值由鍵盤輸

14、入。的值由鍵盤輸入。sin xsin x的近似的近似 值按如下公式計算,計算精度為值按如下公式計算,計算精度為1010-6 -6: : 函數的聲明與使用 22 2222 r)sin( 2 1 r)(sin)(sin ssr ssr k 當 當 1 12 1 753 )!12( ) 1( ! 7! 5! 3! 1 sin n n n n xxxxx x C+語言程序設計第三章函數17 #include #include #include#include int main()int main() double k,r,s; double k,r,s; double tsin(double x);

15、double tsin(double x); coutr=; coutr; cinr; couts=; couts; cins; if (r if (r* *r=sr=s* *s)s) k=sqrt(tsin(r) k=sqrt(tsin(r)* *tsin(r)+tsin(s)tsin(r)+tsin(s)* *tsin(s);tsin(s); else else k=tsin(r k=tsin(r* *s)/2;s)/2; coutkendl; coutk=p); while(fabs(t)=p); return g; return g; 運行結果: r=5 s=8 1.37781 18

16、1 12 1 753 )!12( ) 1( ! 7! 5! 3! 1 sin n n n n xxxxx x g : 存放累加和 t : 存放任一項 當前項 =(-1)*前一項*X*X/(2*n-1)/(2*n-2) C+語言程序設計 C+語言程序設計第三章函數19 例例3-6投骰子的隨機游戲投骰子的隨機游戲 每個骰子有六面,點數分別為每個骰子有六面,點數分別為1 1、2 2、3 3、4 4、5 5、6 6。 游戲者在程序開始時輸入一個無符號整數,作為產生游戲者在程序開始時輸入一個無符號整數,作為產生 隨機數的種子。隨機數的種子。 每輪投兩次骰子,第一輪如果和數為每輪投兩次骰子,第一輪如果和數

17、為7 7或或1111則為勝,則為勝, 游戲結束;和數為游戲結束;和數為2 2、3 3或或1212則為負,游戲結束;和數則為負,游戲結束;和數 為其它值則將此值作為自己的點數,繼續(xù)第二輪、第為其它值則將此值作為自己的點數,繼續(xù)第二輪、第 三輪三輪.直到某輪的和數等于點數則取勝,若在此前直到某輪的和數等于點數則取勝,若在此前 出現和數為出現和數為7 7則為負。則為負。 由由rolldicerolldice函數負責模擬投骰子、計算和數并輸函數負責模擬投骰子、計算和數并輸 出和數。出和數。 函數的聲明與使用 C+語言程序設計第三章函數20 #include #include #include #inc

18、lude int rolldice(void);int rolldice(void); int main()int main() int gamestatus,sum,mypoint; int gamestatus,sum,mypoint; unsigned seed; unsigned seed; coutPlease enter an unsigned integer:; coutseed; / cinseed; /輸入隨機數種子輸入隨機數種子 srand(seed); /srand(seed); /將種子傳遞給將種子傳遞給rand()rand() sum=rolldice(); / su

19、m=rolldice(); /第一輪投骰子、計算和數第一輪投骰子、計算和數 20 C+語言程序設計第三章函數21 switch(sum) switch(sum) case 7: / case 7: /如果和數為如果和數為7 7或或1111則為勝則為勝, ,狀態(tài)為狀態(tài)為1 1 case 11: gamestatus=1; case 11: gamestatus=1; break; break; case 2: / case 2: /和數為和數為2 2、3 3或或1212則為負則為負, ,狀態(tài)為狀態(tài)為2 2 case 3: case 3: case 12: gamestatus=2; case 1

20、2: gamestatus=2; break; break; default: default: / /其他情況其他情況, ,游戲尚無結果游戲尚無結果, ,狀態(tài)為狀態(tài)為0,0,記下點數記下點數, ,為下一輪做準備為下一輪做準備 gamestatus=0;gamestatus=0; mypoint=sum ; mypoint=sum ; coutpoint is mypointendl; coutpoint is mypointendl; break; break; 21 C+語言程序設計第三章函數22 while(gamestatus=0) while(gamestatus=0) /只要狀態(tài)仍

21、為只要狀態(tài)仍為 0,0,就繼續(xù)進行下一輪就繼續(xù)進行下一輪 sum=rolldice(); sum=rolldice(); if(sum=mypoint) if(sum=mypoint) /某輪的和數等于點數則取勝某輪的和數等于點數則取勝, ,狀態(tài)置為狀態(tài)置為1 1 gamestatus=1 gamestatus=1 else else if ( sum=7 )/ if ( sum=7 )/出現和數為出現和數為7 7則為負則為負, ,狀態(tài)置為狀態(tài)置為2 2 gamestatus=2; gamestatus=2; /當狀態(tài)不為當狀態(tài)不為0 0時上面的循環(huán)結束時上面的循環(huán)結束, ,以下程序段輸出游戲

22、結果以下程序段輸出游戲結果 if( gamestatus=1 )if( gamestatus=1 ) coutplayer winsn; coutplayer winsn; else else coutplayer losesn; coutplayer losesn; 22 C+語言程序設計第三章函數23 lrandrand 函數原型:int rand(void); 所需頭文件: 功能和返回值:求出并返回一個偽隨機數 lsrandsrand 函數原型:void srand(unsigned int seed); 參數:seed產生隨機數的種子。 所需頭文件: 功能:為使rand()產生一序列偽

23、隨機整數而設 置起始點。使用1作為seed參數,可以重新 初化rand()。 23 C+語言程序設計第三章函數24 int rolldice(void)int rolldice(void) / /投骰子、計算和數、輸出和數投骰子、計算和數、輸出和數 int die1,die2,worksum;int die1,die2,worksum; die1=1+rand()%6; die1=1+rand()%6; die2=1+rand()%6; die2=1+rand()%6; worksum=die1+die2; worksum=die1+die2; coutplayer rolled coutpl

24、ayer rolled die1+die2=worksumendl;die1+die2=worksumendl; return worksum; return worksum; 24 C+語言程序設計第三章函數25 運行結果運行結果2 2: Please enter an unsigned integer:23Please enter an unsigned integer:23 player rolled 6+3=9player rolled 6+3=9 point is 9point is 9 player rolled 5+4=9player rolled 5+4=9 player wi

25、nsplayer wins 25 C+語言程序設計 C+語言程序設計第三章函數26 函數調用的執(zhí)行過程函數調用的執(zhí)行過程 函數的聲明與使用 main() 調fun() 結束 fun() 返回 保存: 返回地址 當前現場 恢復: 主調程序現場 返回地址 C+語言程序設計 C+語言程序設計第三章函數27 嵌套調用嵌套調用 函數的聲明與使用 main 調fun1() 結束 fun1() 調fun2() 返回 fun2() 返回 C+語言程序設計 C+語言程序設計第三章函數28 例例3-6 輸入兩個整數,求平方和。輸入兩個整數,求平方和。 #include #include int main()int

26、 main() int a,b; int a,b; int fun1(int x,int y); int fun1(int x,int y); cinab; cinab; couta couta、b b的平方和:的平方和: fun1(a,b)endl; fun1(a,b)endl; 函數的聲明與使用 C+語言程序設計第三章函數29 int fun1(int x,int y)int fun1(int x,int y) int fun2(int m); int fun2(int m); return (fun2(x)+fun2(y); return (fun2(x)+fun2(y); int fu

27、n2(int m)int fun2(int m) return (m return (m* *m);m); 運行結果:運行結果: 3 43 4 a a、b b的平方和:的平方和:2525 29 C+語言程序設計 C+語言程序設計第三章函數30 遞歸調用遞歸調用 l函數直接或間接地調用自身,稱為遞歸調用。 l遞歸過程的兩個階段: 遞推: 4!=43!3!=32!2!=21!1!=10!0!=1 未知 已知 回歸: 4!=43!=243!=32!=62!=21!=21!=10!=10!=1 未知未知 已知已知 函數的聲明與使用 C+語言程序設計 C+語言程序設計第三章函數31 例例3-8 求求n!

28、 分析:計算n!的公式如下: 這是一個遞歸形式的公式,應該用遞 歸函數實現。 函數的聲明與使用 )0()!1( )0(1 ! nnn n n C+語言程序設計第三章函數32 源程序:源程序: #include #include long fac(int n)long fac(int n) long f; long f; if (n0) if (n0) coutn0,data error!endl; coutn0,data error!endl; else if (n=0) f=1; else if (n=0) f=1; else f=fac(n-1) else f=fac(n-1)* *n;n

29、; return(f); return(f); 32 C+語言程序設計第三章函數33 int main()int main() long fac(int n); long fac(int n); int n; int n; long y; long y; coutEnter a positive integer:; coutn; cinn; y=fac(n); y=fac(n); coutn!=yendl; coutn!=yendl; 運行結果:運行結果: Enter a positive integer:8Enter a positive integer:8 8!=403208!=40320

30、 33 C+語言程序設計 C+語言程序設計第三章函數34 例例3-9 l用遞歸法計算從用遞歸法計算從n n個人中選擇個人中選擇k k個人組個人組 成一個委員會的不同組合數。成一個委員會的不同組合數。 l分析:分析: 由n個人里選k個人的組合數 =由n-1個人里選k個人的組合數 +由n-1個人里選k-1個人的組合數 當n=k或k=0時,組合數為1 函數的聲明與使用 C+語言程序設計第三章函數35 #include#include int main()int main() int n,k; int n,k; int comm(int n, int k); int comm(int n, int k

31、); cinnk; cinnk; coutcomm(n,k)endl; coutcomm(n,k)n) return 0; if (kn) return 0; else if( n=k|k=0 ) else if( n=k|k=0 ) return 1; return 1; else else return comm(n-1,k)+comm(n-1,k-1); return comm(n-1,k)+comm(n-1,k-1); 運行結果: 18 5 8568 35 C+語言程序設計 C+語言程序設計第三章函數36 例例3-10漢諾塔問題漢諾塔問題 有三根針有三根針A A、B B、C C。A A

32、針上有針上有N N個盤子,大個盤子,大 的在下,小的在上,要求把這的在下,小的在上,要求把這N N個盤子從個盤子從A A針針 移到移到C C針,在移動過程中可以借助針,在移動過程中可以借助B B針,每次針,每次 只允許移動一個盤,且在移動過程中在三根只允許移動一個盤,且在移動過程中在三根 針上都保持大盤在下,小盤在上。針上都保持大盤在下,小盤在上。 函數的聲明與使用 ABC C+語言程序設計第三章函數37 分析:分析: 將將n n 個盤子從個盤子從A A針移到針移到C C針可以分解為下面三個步驟:針可以分解為下面三個步驟: 將將A A 上上n-1n-1個盤子移到個盤子移到 B B針上(借助針上

33、(借助C C針)針); ; 把把A A針上剩下的一個盤子移到針上剩下的一個盤子移到C C針上針上; ; 將將n-1n-1個盤子從個盤子從B B針移到針移到C C針上(借助針上(借助A A針)針); ; 事實上,上面三個步驟包含兩種操作:事實上,上面三個步驟包含兩種操作: 將多個盤子從一個針移到另一個針上,這是一個遞將多個盤子從一個針移到另一個針上,這是一個遞 歸的過程。歸的過程。 hanoihanoi函數實現。函數實現。 將將1 1個盤子從一個針上移到另一針上。個盤子從一個針上移到另一針上。 用用movemove函數實現。函數實現。 37 C+語言程序設計第三章函數38 #include #i

34、nclude void move(char getone,char putone)void move(char getone,char putone) coutgetoneputoneendl; coutgetoneputoneendl; void hanoi(int n,char one,char two,char three)void hanoi(int n,char one,char two,char three) void move(char getone,char putone);void move(char getone,char putone); if (n=1) move (o

35、ne,three);if (n=1) move (one,three); elseelse hanoi(n-1,one,three,two); hanoi(n-1,one,three,two); move(one,three); move(one,three); hanoi(n-1,two,one,three); hanoi(n-1,two,one,three); 38 C+語言程序設計第三章函數39 int main()int main() void hanoi(int n,char one,char two,char three);void hanoi(int n,char one,cha

36、r two,char three); int m;int m; coutEnter the number of diskes:;coutm;cinm; coutthe steps to moving mcoutthe steps to moving m diskes:endl; diskes:CA-C A-BA-B C-BC-B A-CA-C B-AB-A B-CB-C A-CA-C 40 C+語言程序設計 C+語言程序設計第三章函數41 函數的參數傳遞機制函數的參數傳遞機制 傳遞參數值傳遞參數值 l在函數被調用時才分配形參的存儲在函數被調用時才分配形參的存儲 單元。單元。 l實參可以是常量、

37、變量或表達式。實參可以是常量、變量或表達式。 l實參類型必須與形參相符。實參類型必須與形參相符。 l傳遞時是傳遞參數值,即單向傳遞。傳遞時是傳遞參數值,即單向傳遞。 函數的聲明與使用 C+語言程序設計 C+語言程序設計第三章函數42 函數的參數傳遞機制函數的參數傳遞機制 參數值傳遞舉例參數值傳遞舉例 XN 被調函數:被調函數: 主調函數:主調函數: 3 3 2.5 2.5A D = power(A,3) 2.5 2.53 3 double power(double X,int N) 函數的聲明與使用 C+語言程序設計 C+語言程序設計第三章函數43 例例3-11 輸入兩個整數交換后輸出輸入兩個

38、整數交換后輸出 #include#include void Swap(int a, int b);void Swap(int a, int b); int main()int main() int x(5), y(10);int x(5), y(10); coutx=x y=yendl;coutx=x y=yendl; Swap(x,y);Swap(x,y); coutx=x y=yendl;coutx=x y=yendl; return 0;return 0; 函數的聲明與使用 C+語言程序設計第三章函數44 void Swap(int a, int b)void Swap(int a, i

39、nt b) int t;int t; t=a;t=a; a=b;a=b; b=t;b=t; 運行結果運行結果: : x=5 y=10 x=5 y=10 x=5 y=10 x=5 y=10 44 C+語言程序設計第三章函數45 a=b; 5 x 10 y 5 a 10 b 執(zhí)行主函數中的函數調用 S);S); t=a; 5 x 10 y 5 a 10 b 5 t b=t; 5 x 10 y 10 a 5 b 5 t 5 x 10 y 10 a 10 b 5 t 在Swap子函數中 返回主函數以后 5 x x 10 y45 45 C+語言程序設計 C+語言程序設計第三章函數46 函數的參數傳遞函數

40、的參數傳遞 用引用做形參用引用做形參 l引用引用( int /建立一個int型的引用ri,并將其 /初始化為變量i的一個別名 j=10; ri=j;/相當于 i=j; l聲明一個引用時,必須同時對它進行初始化,聲明一個引用時,必須同時對它進行初始化, 使它指向一個已存在的對象。使它指向一個已存在的對象。 l一旦一個引用被初始化后,就不能改為指向一旦一個引用被初始化后,就不能改為指向 其它對象。其它對象。 l引用可以作為形參引用可以作為形參 void s a, intvoid S int main()int main() int x(5), y(10);int x(5), y(10); cout

41、x=x y=yendl;coutx=x y=yendl; Swap(x,y);Swap(x,y); coutx=x y=yendl;coutx=x y=yendl; return 0;return 0; void Swap(int int t; t=a;t=a; a=b;a=b; b=t;b=t; 函數的聲明與使用 運行結果運行結果: : x=5 y=10 x=5 y=10 x=10 y=5x=10 y=5 C+語言程序設計第三章函數48 t=a; x x 5 t 5 x 的別名 a a x xy y 510 y 的別名x 的別名 a ab b y 的別名x 的別名 a ab b x x 10

42、 y y 10 a=bb=t; y 5 t 5 y 的地址 b b x xy y 105 S); 48 C+語言程序設計 C+語言程序設計第三章函數49 內聯函數聲明與使用內聯函數聲明與使用 l聲明時使用關鍵字聲明時使用關鍵字 inlineinline。 l編譯時在調用處用函數體進行替換編譯時在調用處用函數體進行替換, , 節(jié)省了參數傳遞、控制轉移等開銷。節(jié)省了參數傳遞、控制轉移等開銷。 l注意:注意: 內聯函數體內不能有循環(huán)語句和switch 語句。 內聯函數的聲明必須出現在內聯函數第 一次被調用之前。 對內聯函數不能進行異常接口聲明。 內聯函數 C+語言程序設計 C+語言程序設計第三章函數

43、50 例例3-14 內聯函數應用舉例內聯函數應用舉例 #include#include inline double CalArea(double radius)inline double CalArea(double radius) return 3.14return 3.14* *radiusradius* *radius;radius; int main()int main() double r(3.0);double r(3.0); double area;double area; area=CalArea(r);area=CalArea(r); coutareaendl;coutare

44、aendl; return 0;return 0; 內聯函數 C+語言程序設計 C+語言程序設計第三章函數51 默認形參值的作用默認形參值的作用 l函數在聲明時可以預先給出默認的形參值,函數在聲明時可以預先給出默認的形參值, 調用時如給出實參,則采用實參值,否則采調用時如給出實參,則采用實參值,否則采 用預先給出的默認形參值。用預先給出的默認形參值。 l例如:例如: int add(int x=5,int y=6) return x+y; int main() add(10,20);/10+20 add(10); /10+6 add(); /5+6 帶默認形參值的函數 C+語言程序設計 C+語

45、言程序設計第三章函數52 默認形參值的說明次序默認形參值的說明次序 l默認形參值必須從右向左順序聲明,默認形參值必須從右向左順序聲明, 并且在默認形參值的右面不能有非默并且在默認形參值的右面不能有非默 認形參值的參數。因為調用時實參取認形參值的參數。因為調用時實參取 代形參是從左向右的順序。代形參是從左向右的順序。 l例:例: int add(int x,int y=5,int z=6);/正確 int add(int x=1,int y=5,int z);/錯誤 int add(int x=1,int y,int z=6);/錯誤 帶默認形參值的函數 C+語言程序設計 C+語言程序設計第三章

46、函數53 默認形參值與函數的調用位置默認形參值與函數的調用位置 l調用出現在函數體實現之前時,默認形參值必須在函調用出現在函數體實現之前時,默認形參值必須在函 數原形中給出;而當調用出現在函數體實現之后時,數原形中給出;而當調用出現在函數體實現之后時, 默認形參值需在函數實現時給出。默認形參值需在函數實現時給出。 l例:例: int add(int x=5,int y=6); int main() add(); /調用在實現前 int add(int x,int y) return x+y; int add(int x=5,int y=6) return x+y; int main() add

47、(); /調用在實現后 帶默認形參值的函數 C+語言程序設計 C+語言程序設計第三章函數54 默認形參值的作用域默認形參值的作用域 l在相同的作用域內,默認形參值的說明應保在相同的作用域內,默認形參值的說明應保 持惟一,但如果在不同的作用域內,允許說持惟一,但如果在不同的作用域內,允許說 明不同的默認形參。明不同的默認形參。 l例:例: int add(int x=1,int y=2); int main() int add(int x=3,int y=4); add();/使用局部默認形參值(實現3+4) void fun() . add();/使用全局默認形參值(實現1+2) 帶默認形參值

48、的函數 C+語言程序設計 C+語言程序設計第三章函數55 重載函數的聲明重載函數的聲明 lC+C+允許功能相近的函數在相同的作用域內以允許功能相近的函數在相同的作用域內以 相同函數名聲明,從而形成重載。方便使用,相同函數名聲明,從而形成重載。方便使用, 便于記憶。便于記憶。 l例:例: 形參類型不同 int add(int x,int y); float add(float x,float y); 形參個數不同 int add(int x,int y); int add(int x,int y,int z); 函 數 重 載 C+語言程序設計 C+語言程序設計第三章函數56 注意事項注意事項

49、不要將不同功能的函數聲明為重載函數,以免出 現調用結果的誤解、混淆。這樣不好: int add(int x,int y); int add(int a,int b); 編譯器不以形參名來區(qū)分 int add(int x,int y); void add(int x,int y); 編譯器不以返回值來區(qū)分 int add(int x,int y) return x+ +y; float add(float x,float y) return x- -y; 函 數 重 載 重載函數的形參必須不同:個數不同或類型不同。 編譯程序將根據實參和形參的類型及個數的最佳匹配來 選擇調用哪一個函數。 C+語言

50、程序設計 C+語言程序設計第三章函數57 例例3-16重載函數應用舉例重載函數應用舉例 編寫三個名為編寫三個名為addadd的重載函數,分別實現兩整數的重載函數,分別實現兩整數 相加、兩實數相加和兩個復數相加的功能。相加、兩實數相加和兩個復數相加的功能。 #include#include struct complexstruct complex double real;double real; double imaginary;double imaginary; ; 函 數 重 載 C+語言程序設計第三章函數58 int main()int main() int m, n;int m, n;

51、double x, y;double x, y; complex c1, c2, c3;complex c1, c2, c3; int add(int m, int n);int add(int m, int n); double add(double x, double y);double add(double x, double y); complex add(complex c1, complex c2);complex add(complex c1, complex c2); coutEnter two integer: ;coutmn;cinmn; coutinteger m+n=a

52、dd(m,n)endl;coutinteger m+n=add(m,n)endl; 58 C+語言程序設計第三章函數59 coutEnter two real number: ;coutxy;cinxy; coutreal number x+y= add(x,y)coutreal number x+y= add(x,y) endl; endl; coutEnter the first complex number: ;coutc1.realc1.imaginary;cinc1.realc1.imaginary; coutEnter the second complex number: ;cou

53、tc2.realc2.imaginary;cinc2.realc2.imaginary; c3=add(c1,c2);c3=add(c1,c2); coutcomplex number (c1.real,coutcomplex number (c1.real, c1.imaginary )+(c2.real, c1.imaginary )+(c2.real, c2.imaginary)=(c3.real, c2.imaginary)=(c3.real, c3.imaginary)n; c3.imaginary)n; 59 C+語言程序設計第三章函數60 int add(int m, int n)int add(int m, int n) return m+n; return m+n; double add(double x, double y)double add(double x, doub

溫馨提示

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

評論

0/150

提交評論