第十章 函数的进阶与应用Word文档格式.docx
- 文档编号:4375588
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:17
- 大小:30.06KB
第十章 函数的进阶与应用Word文档格式.docx
《第十章 函数的进阶与应用Word文档格式.docx》由会员分享,可在线阅读,更多相关《第十章 函数的进阶与应用Word文档格式.docx(17页珍藏版)》请在冰点文库上搜索。
cout<
<
"
howmanynumberyouwanttocompare:
(2or3)"
cin>
>
n;
if(n==2)
{
Pleaseinputtwointegers,firstinteger:
x;
Thesecondinteger:
y;
Theminimumvalueis"
min(x,y)<
}
elseif(n==3)
Pleaseinputthreeintegers,firstinteger:
Thethirdinteger:
z;
min(x,y,z)<
elsecout<
Youinputawrongnumber"
return0;
}
doublemin(doublea,doubleb)
return(a<
b?
a:
b);
doublemin(doublea,doubleb,doublec)
doubletemp=a;
if(temp>
b)
temp=b;
c);
temp=c;
returntemp;
10-2參數的預設值
函數的參數可以做預設值,例如
declaration→floatArea(floatwidth,floatlength=12.0)
definition→floatArea(floatwidth,floatlength)
returnwidth*length;
call→A=Area(6.5)〜代表width=6.5,length已預設為12.0
A=Area(6.5,15)〜width=6.5,length=15.0
練習:
將上述宣告,定義及呼叫撰寫成程式
10-4亂數的取得(randomnumbers)
1、準亂數產生器(pseudo-randomnumbergenerator)
─每次執行起始值都一樣
declaration→#include<
cstdlib>
//C++standardlibrary
...
→cout<
rand();
//產生一個亂數介於0〜32767之間
如果想要產生有範圍的亂數,必須做縮尺(scaling),例如
i=rand()%6;
練習1.建立一個4
5的二維陣列,陣列每個元素介於1到6之間
i=(rand()%6+1);
主要程式碼(program:
10-4-1.cpp)
for(inti=0;
i<
4;
i++)
for(intj=0;
j<
j++)
array[i][j]=(rand()%6+1);
setw(10)<
array[i][j];
iomanip>
setw;
constintm=4;
constintn=5;
intA[m][n]={0};
inttemp=1;
while(temp==1)
for(inti=0;
m;
for(intj=0;
A[i][j]=(1+rand()%6);
for(intii=0;
ii<
ii++)
{
for(intjj=0;
jj<
jj++)
cout<
A[ii][jj];
cout<
}
cout<
Doyouwanttotryagain(1foryes)"
cin>
temp;
練習2.擲一骰子遊戲,骰子之數值介於1〜6之間,試統計擲6000次之後,1〜6每一個數字出現的機率次數
程式撰寫方法
先定義1〜6發生機率次數為0
再用for迴圈配合switch指令進行統計
程式主要架構(program10-4-2.cpp)
intf1=0,f2=0,f3=0,f4=0,f5=0,f6=0;
for(introll=0;
roll<
roll++)
face=1+rand()%6;
switch(face)
case1:
++f1;
break;
case2:
++f2;
case3:
++f3;
case4:
++f4;
case5:
++f5;
case6:
++f6;
default:
Programnevergethere."
;
return0;
intf[6]={0};
intface;
for(introll=1;
=6000;
face=1+rand()%6;
switch(face)
case1:
++f[0];
break;
case2:
++f[1];
case3:
++f[2];
case4:
++f[3];
case5:
++f[4];
case6:
++f[5];
default:
Programnevergethere!
Thetimesofdieis:
for(intj=0;
6;
face="
j+1<
thetimesis:
f[j]<
\nTheprobabilityofdieis:
for(intk=0;
k<
k++)
k+1<
double(f[k])/6000<
2、將pseudo-randomnumber改為randomize
1.採用srand(),程式輸入一個unsignedinteger為seed,可使rand函數產生不同系列的亂數
Example:
(program10-4-3.cpp)
unsignedintseed;
cout<
Enterseed:
cin>
seed;
srand(seed);
for(inti=1;
i<
=10;
1+rand()%6;
if(i%5==0)
練習:
將上述片段程式寫成完整程式碼,然後輸入不同seed
2.取用系統時間為亂數,較為簡易,需加上下列指令
#include<
ctime>
time;
...
srand(time(0));
將上題程式碼之seed改為time(0)(program10-4-4.cpp)
10-5遞迴函數(recursivefunction)
何謂遞迴函數:
函數不斷呼叫自己,直到terminationcondition產生才停止
1、階乘函數(factorialfunction)→n!
n!
=n(n-1)(n-2)...3
2
1
函數寫法
1.遞迴(10-5-2.cpp)
intFactorial(intN)
if(N<
=1)
return1;
else
returnN*Factorial(N-1);
2.迴圈(10-5-1.cpp)
inttemp=1;
for(inti=1;
=N;
temp*=i;
寫一個遞迴函數計算n!
1.採用迴圈方式寫
unsignedlongFactorial(int);
intN;
Pleaseinputaintegerbiggerthan1"
cin>
N;
Thevalueof"
N<
!
is"
Factorial(N)<
unsignedlongFactorial(intNum)
for(inti=1;
=Num;
temp*=i;
2.採用遞迴方式撰寫
if(Num<
return1;
//terminationcondition
else
returnNum*Factorial(Num-1);
//recursivecondition
2、GretestCommonDivider(GCD)
找兩個整數的最大公因數
1.遞迴(10-5-3.cpp)
intGCD(intM,intN)
if((M%N)==0)
returnN;
returnGCD(N,M%N);
intGCD(int,int);
intM,N;
Pleaseinputtwointegerbiggerthan1,thefirstvalueis"
Thesecondvalueis"
M;
cout<
Thegreatestcommondivideris:
GCD(M,N)<
intGCD(intm,intn)
if((m%n)==0)
returnn;
returnGCD(n,m%n);
2.迴圈(10-5-4.cpp)
inttemp=N;
while(temp>
1)
temp=1;
temp=M%N;
M=N;
N=temp;
inttemp=N;
while(temp>
if((M%N)==0)
temp=1;
temp=M%N;
M=N;
N=temp;
使用遞迴撰寫程式,求兩個整數之最大公因數
********************************************************************************
第十章作業
Topic1.函數的重載(overloading):
相同函數名稱被重複用於不同函數的宣告和定義
A.試寫出一程式,內含函數,以重載方式使程式能經由輸入一整數或浮點數值,回傳此數值的平方。
B.利用函數重載功能,寫出兩個同樣名為Max()的函數,分別可以找出二個數中之最大值及三個數中之最大值。
Topic2.亂數(randomnumbers)取得
A.寫一程式,能以亂數跑出一組樂透彩卷號碼。
Topic3.遞迴(recursion)函數
A.寫一程式,能以遞迴方式計算
,再以迴圈方式計算一次。
B.以遞迴方式計算兩數之最大公約數。
C.已知費式級數(Fibonaccinumber)之定義如下:
故
為0、1、1、2、3、5、8、13…,試以遞迴演算法(recursivealgorithm),計算
之值。
D.已知binomialcoefficient定義為
,有如下特性:
,且當
,試寫一遞迴演算法(recursivealgorithm)程式,能經由輸入n及m之值,求算
。
E.河內塔問題:
印度的傳說中,在世界的中心有一座廟裡豎立著三根柱子。
其中的一根柱子上放了大小各異的64個圓盤,而且圓盤由大而小往上疊起,古印度人稱之為梵天塔(towerofBrahma)。
廟裡的和尚整天忙著將64個圓盤由這一根子搬移到另一根柱子,但由於圓盤很重,一次只能搬動一個,而且搬動過程中,小圓盤不能被壓在大圓盤下,也不能放在地上。
當64個圓盤完全搬到另一根柱子後,世界末日就來臨了。
請嘗試解出此題目,並以遞迴方式計算之,程式能輸入圓盤數,再算出圓盤搬動次數。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十章 函数的进阶与应用 第十 函数 进阶 应用