第六章 函数.docx
- 文档编号:13171934
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:28
- 大小:42.08KB
第六章 函数.docx
《第六章 函数.docx》由会员分享,可在线阅读,更多相关《第六章 函数.docx(28页珍藏版)》请在冰点文库上搜索。
第六章函数
第六章函數
6-1基本概念
何謂函數:
許多相關的程式指令放在一起,加以命名,形成一個執行單元。例如主程式main(x)為標準函數。
用途:
a.減少重複撰寫類似功能的程式
b.易於除錯和維護─分成數個模組,分別開發和測試
語法:
下列三步驟
a.宣告:
建立函數的原型
b.定義:
函數內容寫成程式
c.呼叫:
使用已定義過的函數
●範例說明1.
─產生攝氏與華氏溫度的對照表
//TempConv.cpp
#include
usingstd:
:
cin;
usingstd:
:
cout;
usingstd:
:
endl;
#include
usingstd:
:
setw;
//DeclarationofC2F
doubleC2F(double);
//說明doubleC2F(double)
//double是回傳值C2F是函數名稱(double)呼叫函數時,由呼叫函數傳入值
//MainFunction
intmain()
{
doubleCTemp;
cout<<"攝氏華氏"< cout<<"__________________"< for(inti=1;i<=10;i++) { CTemp=10.0*i; cout< < } cout<<"__________________"< return0; } //DefineC2F(doublec) doubleC2F(doublec) { doubleF; F=c*9.0/5.0+32.0; returnF; } ●1.FunctionPrototype a.函數原型(Prototype)的通式為 返回資料型態函數名稱(參數資料型態列); b.小括號內容稱為functioncalloperator c.FunctionPrototype置於主程式之前 d.常見的FunctionPrototype 無參數傳入函數 Ex: intWarning() 單參數型態 Ex: intMaxInt(int) 多參數型態 Ex: intMaxInt(int,int,int) e.參數名稱定義 Ex: intArea(intwidth,intlength) f.不返回資料 Ex: voidSwap(double,double) ●2.DefinitionofFunction 定義的語法 返回資料型態函數名稱(參數列)//headerline //Functionbody { Statement; … return傳回值; } Example: doubleC2F(doublec) { doubleF; F=c*9.0/5.0+32.0; returnF; } ●3.CallFunction 可分成─有引數(argument)、無引數 ─有返回資料、無返回資料 a.有引數與無引數之呼叫 有引數: 指呼叫函數時,必須有值傳給函數 例: cout< CTemp為從主程式呼叫函數時,傳給函數之值 無引數: 從主程式呼叫函數時,不用傳值給函數 例: swap() b.有返回、無返回資料 有返回資料: 於宣告prototype時,即有回傳資料型態 例如: floatC2F(float);//宣告 cout< 無返回資料: 不回傳資料 例如: voidC2F(float);//宣告 C2F(CTemp);//呼叫 ●範例說明2. 求1+2+3+…+N,其中1+2+3+…+N採用函數之寫法 1.有引數、有返回之寫法 //Sum.cpp #include usingstd: : cin; usingstd: : cout; usingstd: : endl; intsum(int); intmain() { intN,Total; cout<<"PleaseinputapositiveintegerN: "; cin>>N; Total=sum(N); cout<<"Thesumof1+2+3+…+"< return0; } intsum(intnumber) { intsumup=0; for(inti=1;i<=number;i++) sumup+=i; returnsumup; } 2.有引數、無返回之寫法 //Sum.cpp #include usingstd: : cin; usingstd: : cout; usingstd: : endl; voidsum(int); intmain() { intN,Total; cout<<"PleaseinputapositiveintegerN: "; cin>>N; sum(N); return0; } voidsum(intnumber) { intsumup; for(inti=1;i<=N;i++) sumup+=i; cout<<"Thesumof1+2+3+…+"< } 練習1: 求 採用有引數無返回函數之寫法 練習2: 求 採用有引數有返回函數之寫法 練習3: 輸入任意數,再找出最大值,用forstructure,並採用無引數無返回函數之寫法 6.2Callbyvalue(傳值呼叫) ●1.程式運作程序: a.呼叫函數 函數被呼叫時,將引數複製到堆疊(stack),稱為傳值(callbyvalueorpassbyvalue) b.被呼叫函數將參數初始化為堆疊內的值 Ex: 將CTemp→c c.運算完畢後將結果複製一份至堆疊內 Ex: 將F→stack d.呼叫函數再把堆疊內的結果複製一份回來 課本page.6-9_圖6.1.2 ●2.不使用Prototype的語法 →將函數定義置於函數原型的位置 範例說明1: TempConv2.cpp #include usingstd: : cout; usingstd: : endl; #include usingstd: : setw; //DefineC2F(doublec) doubleC2F(doublec) { doubleF; F=c*9.0/5.0+32.0; returnF; } //MainFunction intmain() { doubleCTemp; cout<<"攝氏華氏"< cout<<"__________________"< for(inti=1;i<=10;i++) { CTemp=10.0*i; cout< < } cout<<"__________________"< return0; } ●3.函數內return功能 ─return可以提早結束程式 範例說明2: SeasonFnc.cpp #include usingstd: : cin; usingstd: : cout; usingstd: : endl; voidCheckSeason(int); intmain() { intM; cout<<"Pleaseinputamonth: "; cin>>M; CheckSeason(M); return0; } voidCheckSeason(intMonth) { if(Month<1||Month>12) { cout<<"Youinputaerrormonth! "< return; } cout<<"Month"< switch((Month%12)/3) { case0: cout<<"Winter"< break; case1: cout<<"Spring"< break; case2: cout<<"Summer"< break; case3: cout<<"Autumn"< break; default: cout<<"Programneverarrivalhere! "< } return; } 練習1: 寫一個sum(),可以指定要累加到的數字,並把結果傳回 練習2: 寫一個circle()的函數計算圓面積,prototype如floatcircle(floatr); 6-3Callbyreference ●1.參照 定義: 同一個變數的別名(alias) Example: intN; int&M=N; 說明: intN定義了變數N, M為N的alias(參照) &: 參照運算子(referenceoperator),表示M和N所代表的數字於同一個位址上 故對於M所作的變化,對N也會產生變化 故對於N所作的變化,對M也會產生變化 ●範例說明1: //Alias.cpp #include usingstd: : cout; usingstd: : endl; intmain() { intN=10; int&M=N; cout<<"OriginalvalueofNis"< cout<<"OriginalvalueofMis"< N=5; cout<<"AfterexecutionofN=5,thevalueofMis"< M=2; cout<<"AfterexecutionofM=2,thevalueofNis"< return0; } 範例說明2: 比較pass-by-value和pass-by-reference的不同 #include usingstd: : cout; usingstd: : endl; intsquarebyValue(int); voidsquarebyreference(int&); intmain() { intx=2; intz=4; cout<<"x="< cout<<"ValuereturnedbysquarebyValue: " < cout<<"x="< cout<<"z="< squarebyreference(z); cout<<"z="< return0; } intsquarebyValue(intnumber) { returnnumber*=number; } voidsquarebyreference(int&numberRef) { numberRef*=numberRef; } 說明: pass-by-value,執行後原資料不變 pass-by-reference,執行後原資料會變 範例說明3: 攝氏與華氏溫度的轉換(以參照方式) //TempConv3.cpp #include #include usingnamespacestd; voidC2F(float,float&); intmain() { floatctemp,ftemp; cout<<"攝氏華氏"< cout<<"__________________"< for(inti=1;i<=10;i++) { ctemp=10.0*i; C2F(ctemp,ftemp); cout< < } cout<<"__________________"< return0; } voidC2F(floatc,float&f) { f=c*9.0/5.0+32.0; return; } 範例說明4: 比較參照與非參照轉換資料 //Swap.cpp #include usingstd: : cout; usingstd: : endl; voidswap(int&,int&); voidswap2(int,int); intmain() { intA=5,B=10; swap(A,B); cout<<"Afterexecutionswap()\n"; cout<<"ThevalueofA: "< cout<<"ThevalueofB: "< swap2(A,B); cout<<"Afterexecutionswap2()\n"; cout<<"ThevalueofA:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六章 函数 第六