【正文】
ing namespace std。 ?引用可以作為形參 void swap(int amp。 ?聲明一個(gè)引用時(shí),必須同時(shí)對(duì)它進(jìn)行初始化,使它指向一個(gè)已存在的對(duì)象。 ri = j。ri = i。)是標(biāo)識(shí)符的別名 ,例如 : int i, j。 5 x 10 y 5 a 10 b 5 t b=t。 5 x 10 y 5 a 10 b 執(zhí)行主函數(shù)中的函數(shù)調(diào)用 swap(x,y)。 return 0。 swap(x, y)。 } 函數(shù)的聲明與使用 int main() { int x = 5, y = 10。 a = b。 函數(shù)的聲明與使用 C++語言程序設(shè)計(jì) 清華大學(xué) 鄭莉 42 函數(shù)的參數(shù)傳遞機(jī)制 —— 參數(shù)值傳遞舉例 X N 被調(diào)函數(shù): 主調(diào)函數(shù): 3 A D = power(A,3) 3 double power(double X,int N) 函數(shù)的聲明與使用 C++語言程序設(shè)計(jì) 清華大學(xué) 鄭莉 43 例 311 輸入兩個(gè)整數(shù)交換后輸出 includeiostream using namespace std。 ? 實(shí)參類型必須與形參相符。 } 39 運(yùn)行結(jié)果: Enter the number of diskes:3 the steps to moving 3 diskes: A C A B C B A C B A B C A C 40 C++語言程序設(shè)計(jì) 清華大學(xué) 鄭莉 41 函數(shù)的參數(shù)傳遞機(jī)制 —— 傳遞參數(shù)值 ? 在函數(shù)被調(diào)用時(shí)才分配形參的存儲(chǔ)單元。)。,39。,39。 hanoi(m,39。 cin m。 } } 38 int main() { int m。 move(src, dest)。 } //把 n個(gè)盤子從 src針移動(dòng)到 dest針,以 medium針作為中介 void hanoi(int n, char src, char medium, char dest) { if (n == 1) move(src, dest)。 37 include iostream using namespace std。 ②將 1個(gè)盤子從一個(gè)針上移到另一針上。 事實(shí)上,上面三個(gè)步驟包含兩種操作: ①將多個(gè)盤子從一個(gè)針移到另一個(gè)針上,這是一個(gè)遞歸的過程。 ② 把 A針上剩下的一個(gè)盤子移到 C針上 。 A針上有 N個(gè)盤子,大的在下,小的在上,要求把這 N個(gè)盤子從 A針移到 C針,在移動(dòng)過程中可以借助 B針,每次只允許移動(dòng)一個(gè)盤,且在移動(dòng)過程中在三根針上都保持大盤在下,小盤在上。 return 0。 cin n k。 int n, k。 else return m(n 1, k) + m(n 1, k 1)。 int m(int n, int k) { if (k n) return 0。 } 運(yùn)行結(jié)果: Enter a positive integer:8 8! = 40320 33 C++語言程序設(shè)計(jì) 清華大學(xué) 鄭莉 34 例 39 ? 用遞歸法計(jì)算從 n個(gè)人中選擇 k個(gè)人組成一個(gè)委員會(huì)的不同組合數(shù)。 cout n ! = y endl。 cin n。 } 32 int main() { unsigned n。 else f = fac(n 1) * n。 unsigned fac(int n){ unsigned f。 ?遞歸過程的兩個(gè)階段: – 遞推: 4!=4 3!→ 3!=3 2!→ 2!=2 1!→ 1!=1 0!→ 0!=1 未知 已知 – 回歸: 4!=4 3!=24← 3!=3 2!=6← 2!=2 1!=2← 1!=1 0!=1← 0!=1 未知 已知 函數(shù)的聲明與使用 C++語言程序設(shè)計(jì) 清華大學(xué) 鄭莉 31 例 38 求 n! 分析:計(jì)算 n!的公式如下: 這是一個(gè)遞歸形式的公式,應(yīng)該用遞歸函數(shù)實(shí)現(xiàn)。 return 0。 cin a b。 } 函數(shù)的聲明與使用 int main() { int a, b。 int fun2(int m) { return m * m。 } 25 運(yùn)行結(jié)果 2: Please enter an unsigned integer:23 player rolled 6 + 3 = 9 point is 9 player rolled 5 + 4 = 9 player wins 26 C++語言程序設(shè)計(jì) 清華大學(xué) 鄭莉 27 嵌套調(diào)用 函數(shù)的聲明與使用 main{} 調(diào) fun1() 結(jié)束 fun1() 調(diào) fun2() 返回 fun2() 返回 ① ② ③ ⑦ ④ ⑤ ⑥ ⑧ ⑨ C++語言程序設(shè)計(jì) 清華大學(xué) 鄭莉 28 例 36 輸入兩個(gè)整數(shù),求平方和。 else cout player loses endl。 else if (sum == 7) //出現(xiàn)和數(shù)為 7則為負(fù) status = LOSE。 } 24 while (status == PLAYING) { //只要狀態(tài)仍為 PLAYING,就繼續(xù)進(jìn)行下一輪 sum = rollDice()。 cout point is myPoint endl。 default: //其它情況 ,游戲尚無結(jié)果 ,狀態(tài)為 PLAYING,記下點(diǎn)數(shù) ,為下一輪做準(zhǔn)備 status = PLAYING。 case 2: //和數(shù)為 3或 12則為負(fù) ,狀態(tài)為 LOSE case 3: case 12: status = LOSE。 //第一輪投骰子、計(jì)算和數(shù) 23 switch (sum) { case 7: //如果和數(shù)為 7或 11則為勝 ,狀態(tài)為 WIN case 11: status = WIN。//輸入隨機(jī)數(shù)種子 srand(seed)。 cout Please enter an unsigned integer: 。 GameStatus status。 } 22 enum GameStatus { WIN, LOSE, PLAYING }。 cout player rolled die1 + die2 = sum endl。 int die2 = 1 + rand() % 6。 21 include iostream include cstdlib using namespace std。 所需頭文件: cstdlib 功能: