已閱讀5頁(yè),還剩63頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章函數(shù),清華大學(xué)鄭莉,目錄,3.1函數(shù)的定義與使用3.2內(nèi)聯(lián)函數(shù)3.3帶默認(rèn)參數(shù)值的函數(shù)3.4函數(shù)重載3.5使用C+系統(tǒng)函數(shù)3.6深度探索3.7小結(jié),2,3.1.1函數(shù)定義,函數(shù)是面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)功能的抽象函數(shù)定義的語(yǔ)法形式類型標(biāo)識(shí)符函數(shù)名(形式參數(shù)表)語(yǔ)句序列,3,3.1函數(shù)的定義與使用,是被初始化的內(nèi)部變量,壽命和可見(jiàn)性僅限于函數(shù)內(nèi)部,若無(wú)返回值,寫(xiě)void,3.1.1函數(shù)定義(續(xù)),形式參數(shù)表name1,name2,.,namen函數(shù)的返回值由return語(yǔ)句給出,例如:return0無(wú)返回值的函數(shù)(void類型),不必寫(xiě)return語(yǔ)句。,4,3.1函數(shù)的定義與使用,3.1.2函數(shù)的調(diào)用,調(diào)用前先聲明函數(shù):若函數(shù)定義在調(diào)用點(diǎn)之前,則無(wú)需另外聲明;若函數(shù)定義在調(diào)用點(diǎn)之后,則需要在調(diào)用函數(shù)前按如下形式聲明函數(shù)原型:類型標(biāo)識(shí)符被調(diào)用函數(shù)名(含類型說(shuō)明的形參表);調(diào)用形式函數(shù)名(實(shí)參列表)嵌套調(diào)用在一個(gè)函數(shù)的函數(shù)體中,可以調(diào)用另一函數(shù),稱為嵌套調(diào)用。遞歸調(diào)用函數(shù)直接或間接調(diào)用自身。,5,3.1函數(shù)的定義與使用,例3-1編寫(xiě)一個(gè)求x的n次方的函數(shù),#includeusingnamespacestd;/計(jì)算x的n次方doublepower(doublex,intn)doubleval=1.0;while(n-)val*=x;returnval;intmain()cout5tothepower2ispower(5,2)ch;if(ch=1)value+=static_cast(power(2,i);coutDecimalvalueisvalue1e-15)doublef=e/i;r=(i%4=1)?r+f:r-f;e=e*sqr;i+=2;returnr;,10,3.1函數(shù)的定義與使用3.1.2函數(shù)的調(diào)用,例3-3(續(xù)),intmain()doublea=16.0*arctan(1/5.0);doubleb=4.0*arctan(1/239.0);/*注意:因?yàn)檎麛?shù)相除結(jié)果取整,如果參數(shù)寫(xiě)1/5,1/239,結(jié)果就都是0*/coutPI=a-br;couts;if(r*r=s*s)k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s);elsek=tsin(r*s)/2;coutkendl;return0;,18,3.1函數(shù)的定義與使用3.1.2函數(shù)的調(diào)用,運(yùn)行結(jié)果:r=5s=81.37781,例3-5(續(xù)),例3-6投骰子的隨機(jī)游戲,每個(gè)骰子有六面,點(diǎn)數(shù)分別為1、2、3、4、5、6。游戲者在程序開(kāi)始時(shí)輸入一個(gè)無(wú)符號(hào)整數(shù),作為產(chǎn)生隨機(jī)數(shù)的種子。每輪投兩次骰子,第一輪如果和數(shù)為7或11則為勝,游戲結(jié)束;和數(shù)為2、3或12則為負(fù),游戲結(jié)束;和數(shù)為其它值則將此值作為自己的點(diǎn)數(shù),繼續(xù)第二輪、第三輪.直到某輪的和數(shù)等于點(diǎn)數(shù)則取勝,若在此前出現(xiàn)和數(shù)為7則為負(fù)。由rolldice函數(shù)負(fù)責(zé)模擬投骰子、計(jì)算和數(shù)并輸出和數(shù)。,19,3.1函數(shù)的定義與使用3.1.2函數(shù)的調(diào)用,例3.6(續(xù)),rand函數(shù)原型:intrand(void);所需頭文件:功能和返回值:求出并返回一個(gè)偽隨機(jī)數(shù)srand函數(shù)原型:voidsrand(unsignedintseed);參數(shù):seed產(chǎn)生隨機(jī)數(shù)的種子。所需頭文件:功能:為使rand()產(chǎn)生一序列偽隨機(jī)整數(shù)而設(shè)置起始點(diǎn)。使用1作為seed參數(shù),可以重新初化rand()。,20,3.1函數(shù)的定義與使用3.1.2函數(shù)的調(diào)用,#include#includeusingnamespacestd;/投骰子、計(jì)算和數(shù)、輸出和數(shù)introllDice()intdie1=1+rand()%6;intdie2=1+rand()%6;intsum=die1+die2;coutplayerrolleddie1+die2=sumseed;/輸入隨機(jī)數(shù)種子srand(seed);/將種子傳遞給rand()sum=rollDice();/第一輪投骰子、計(jì)算和數(shù),22,3.1函數(shù)的定義與使用3.1.2函數(shù)的調(diào)用,例3-6(續(xù)),switch(sum)case7:/如果和數(shù)為7或11則為勝,狀態(tài)為WINcase11:status=WIN;break;case2:/和數(shù)為2、3或12則為負(fù),狀態(tài)為L(zhǎng)OSEcase3:case12:status=LOSE;break;default:/*其它情況,游戲尚無(wú)結(jié)果,狀態(tài)為PLAYING,記下點(diǎn)數(shù),為下一輪做準(zhǔn)備*/status=PLAYING;myPoint=sum;coutpointismyPointendl;break;,23,3.1函數(shù)的定義與使用3.1.2函數(shù)的調(diào)用,例3-6(續(xù)),while(status=PLAYING)/只要狀態(tài)仍為PLAYING,就繼續(xù)進(jìn)行下一輪sum=rollDice();if(sum=myPoint)/某輪的和數(shù)等于點(diǎn)數(shù)則取勝status=WIN;elseif(sum=7)/出現(xiàn)和數(shù)為7則為負(fù)status=LOSE;/當(dāng)狀態(tài)不為PLAYING時(shí)上面的循環(huán)結(jié)束,以下程序段輸出游戲結(jié)果if(status=WIN)coutplayerwinsendl;elsecoutplayerlosesb;coutThesumofsquareofaandb:fun1(a,b)n;unsignedy=fac(n);coutn!=ynk;coutC(n,k)=comm(n,k)endl;return0;,35,3.1函數(shù)的定義與使用3.1.2函數(shù)的調(diào)用,運(yùn)行結(jié)果:1858568,例3-9(續(xù)),例3-10,有三根針A、B、C。A針上有N個(gè)盤(pán)子,大的在下,小的在上,要求把這N個(gè)盤(pán)子從A針移到C針,在移動(dòng)過(guò)程中可以借助B針,每次只允許移動(dòng)一個(gè)盤(pán),且在移動(dòng)過(guò)程中在三根針上都保持大盤(pán)在下,小盤(pán)在上。,36,3.1函數(shù)的定義與使用3.1.2函數(shù)的調(diào)用,例3-10(續(xù)),分析:將n個(gè)盤(pán)子從A針移到C針可以分解為下面三個(gè)步驟:將A上n-1個(gè)盤(pán)子移到B針上(借助C針);把A針上剩下的一個(gè)盤(pán)子移到C針上;將n-1個(gè)盤(pán)子從B針移到C針上(借助A針);事實(shí)上,上面三個(gè)步驟包含兩種操作:將多個(gè)盤(pán)子從一個(gè)針移到另一個(gè)針上,這是一個(gè)遞歸的過(guò)程。hanoi函數(shù)實(shí)現(xiàn)。將1個(gè)盤(pán)子從一個(gè)針上移到另一針上。用move函數(shù)實(shí)現(xiàn)。,37,3.1函數(shù)的定義與使用3.1.2函數(shù)的調(diào)用,#includeusingnamespacestd;/把src針的最上面一個(gè)盤(pán)子移動(dòng)到dest針上voidmove(charsrc,chardest)coutdestm;coutthestepstomovingmdiskes:BC-BA-CB-AB-CA-C,例3-10(續(xù)),3.1函數(shù)的定義與使用3.1.2函數(shù)的調(diào)用,遞歸過(guò)程,41,漢諾塔問(wèn)題與或圖,42,3.1.3函數(shù)的參數(shù)傳遞,在函數(shù)被調(diào)用時(shí)才分配形參的存儲(chǔ)單元。實(shí)參可以是常量、變量或表達(dá)式。實(shí)參類型必須與形參相符。值傳遞是傳遞參數(shù)值,即單向傳遞。引用傳遞可以實(shí)現(xiàn)雙向傳遞常引用作參數(shù)可以保障實(shí)參數(shù)據(jù)的安全,43,3.1函數(shù)的定義與使用,值傳遞舉例,44,3.1函數(shù)的定義與使用3.1.3函數(shù)的參數(shù)傳遞,例3-11輸入兩個(gè)整數(shù)交換后輸出,#includeusingnamespacestd;voidswap(inta,intb)intt=a;a=b;b=t;intmain()intx=5,y=10;coutx=xy=yendl;swap(x,y);coutx=xy=yendl;return0;,45,3.1函數(shù)的定義與使用3.1.3函數(shù)的參數(shù)傳遞,運(yùn)行結(jié)果:x=5y=10 x=5y=10,46,3.1函數(shù)的定義與使用3.1.3函數(shù)的參數(shù)傳遞,引用傳遞,引用(聲明一個(gè)引用時(shí),必須同時(shí)對(duì)它進(jìn)行初始化,使它指向一個(gè)已存在的對(duì)象。一旦一個(gè)引用被初始化后,就不能改為指向其它對(duì)象。引用可以作為形參voidswap(intvoidswap(int,48,3.1函數(shù)的定義與使用3.1.3函數(shù)的參數(shù)傳遞,運(yùn)行結(jié)果:x=5y=10 x=10y=5,49,swap(x,y);,3.1函數(shù)的定義與使用3.1.3函數(shù)的參數(shù)傳遞,例3-13值傳遞與引用傳遞的比較,/3_13.cpp#include#includeusingnamespacestd;voidfiddle(intin1,int,50,3.1函數(shù)的定義與使用3.1.3函數(shù)的參數(shù)傳遞,intmain()intv1=7,v2=12;coutThevaluesare;coutsetw(5)v1;coutsetw(5)v2endl;fiddle(v1,v2);coutThevaluesare;coutsetw(5)v1;coutsetw(5)v2endl;return0;,3.2內(nèi)聯(lián)函數(shù),聲明時(shí)使用關(guān)鍵字inline。編譯時(shí)在調(diào)用處用函數(shù)體進(jìn)行替換,節(jié)省了參數(shù)傳遞、控制轉(zhuǎn)移等開(kāi)銷。注意:內(nèi)聯(lián)函數(shù)體內(nèi)不能有循環(huán)語(yǔ)句和switch語(yǔ)句。內(nèi)聯(lián)函數(shù)的聲明必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一次被調(diào)用之前。對(duì)內(nèi)聯(lián)函數(shù)不能進(jìn)行異常接口聲明。,51,例3-14內(nèi)聯(lián)函數(shù)應(yīng)用舉例,#includeusingnamespacestd;constdoublePI=3.14159265358979;inlinedoublecalArea(doubleradius)returnPI*radius*radius;intmain()doubler=3.0;doublearea=calArea(r);coutareaendl;return0;,52,3.2內(nèi)聯(lián)函數(shù),3.3帶默認(rèn)參數(shù)值的函數(shù),函數(shù)在聲明時(shí)可以預(yù)先給出默認(rèn)的形參值,調(diào)用時(shí)如給出實(shí)參,則采用實(shí)參值,否則采用預(yù)先給出的默認(rèn)參數(shù)值。例如:intadd(intx=5,inty=6)returnx+y;intmain()add(10,20);/10+20add(10);/10+6add();/5+6,53,默認(rèn)參數(shù)值的說(shuō)明次序,有默認(rèn)參數(shù)的形參必須在形參列表的最后,也就是說(shuō)默認(rèn)參數(shù)值的右面不能有無(wú)默認(rèn)值的參數(shù)。因?yàn)檎{(diào)用時(shí)實(shí)參與形參的結(jié)合是從左向右的順序。例:intadd(intx,inty=5,intz=6);/正確intadd(intx=1,inty=5,intz);/錯(cuò)誤intadd(intx=1,inty,intz=6);/錯(cuò)誤,54,3.3帶默認(rèn)參數(shù)值的函數(shù),默認(rèn)參數(shù)值與函數(shù)的調(diào)用位置,如果一個(gè)函數(shù)有原型聲明,且原型聲明在定義之前,則默認(rèn)參數(shù)值必須在函數(shù)原型聲明中給出;而如果只有函數(shù)的定義,或函數(shù)定義在前,則默認(rèn)參數(shù)值需在函數(shù)定義中給出。例:,55,3.3帶默認(rèn)參數(shù)值的函數(shù),intadd(intx=5,inty=6)/只有定義,沒(méi)有原型聲明returnx+y;intmain()add();,intadd(intx=5,inty=6);/原型聲明在前intmain()add();intadd(intx,inty)/此處不能再指定默認(rèn)值returnx+y;,例3-15計(jì)算長(zhǎng)方體的體積,子函數(shù)getVolume是計(jì)算體積的函數(shù),有三個(gè)形參:length(長(zhǎng))、width(寬)、height(高),其中width和height帶有默認(rèn)值。主函數(shù)中以不同形式調(diào)用getVolume函數(shù),分析程序的運(yùn)行結(jié)果。,56,3.3帶默認(rèn)參數(shù)值的函數(shù),/3_15.cpp#include#includeusingnamespacestd;intgetVolume(intlength,intwidth=2,intheight=3);intmain()constintX=10,Y=12,Z=15;coutSomeboxdatais;coutgetVolume(X,Y,Z)endl;coutSomeboxdatais;coutgetVolume(X,Y)endl;coutSomeboxdatais;coutgetVolume(X)endl;return0;intgetVolume(intlength,intwidth/*=2*/,intheight/*=3*/)coutsetw(5)lengthsetw(5)widthsetw(5)heightn;coutxy;coutTheirsumofsquare:sumOfSquare(x,y)angle;/輸入角度值doubleradian=angle*PI/180;/轉(zhuǎn)化為弧度值coutsin(angl
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 推動(dòng)工業(yè)園區(qū)綠色發(fā)展的綜合規(guī)劃方案
- 農(nóng)民合作社聯(lián)合營(yíng)銷策略實(shí)施協(xié)議
- 節(jié)能減排應(yīng)對(duì)預(yù)案
- 趣味化學(xué)知識(shí)
- 綠色辦公環(huán)境設(shè)計(jì)優(yōu)化預(yù)案
- 維護(hù)消費(fèi)者正當(dāng)權(quán)益無(wú)欺詐行為承諾書(shū)(5篇)
- 嚴(yán)謹(jǐn)治學(xué)追求真理承諾書(shū)7篇
- 能源行業(yè)能源管理與節(jié)能預(yù)案高效節(jié)能減排策略
- 遠(yuǎn)程辦公雇傭合同協(xié)議2025年
- 貨代公司客服培訓(xùn)
- 上海市歷年中考語(yǔ)文現(xiàn)代文之議論文閱讀6篇(含答案)(2003-2022)
- 煙氣脫硝裝置安裝單位工程質(zhì)量驗(yàn)收表
- AQ 1046-2007 地勘時(shí)期煤層瓦斯含量測(cè)定方法(正式版)
- 軟裝配飾合同范本
- 蘇教版三年級(jí)下冊(cè)數(shù)學(xué)計(jì)算能手1000題帶答案
- 新媒體藝術(shù)的發(fā)展歷程及藝術(shù)特征
- 依法行醫(yī)教學(xué)課件
- 《日語(yǔ)零基礎(chǔ)學(xué)習(xí)》課件
- 講課學(xué)生數(shù)學(xué)學(xué)習(xí)成就
- 西葫蘆栽培技術(shù)要點(diǎn)
- 高中學(xué)生學(xué)籍表模板(范本)
評(píng)論
0/150
提交評(píng)論