版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第三章函數(shù)C++語言程序設(shè)計2本章主要內(nèi)容函數(shù)的聲明和調(diào)用函數(shù)間的參數(shù)傳遞內(nèi)聯(lián)函數(shù)帶默認形參值的函數(shù)函數(shù)重載C++系統(tǒng)函數(shù)3函數(shù)的聲明函數(shù)是面向?qū)ο蟪绦蛟O(shè)計中,對功能的抽象函數(shù)聲明的語法形式類型標識符函數(shù)名(形式參數(shù)表){
語句序列}函數(shù)的聲明與使用是被初始化的內(nèi)部變量,壽命和可見性僅限于函數(shù)內(nèi)部若無返回值,寫void4函數(shù)的聲明形式參數(shù)表<type1>name1,<type2>name2,...,<typen>namen函數(shù)的返回值由return
語句給出,例如:
return0無返回值的函數(shù)(void類型),不必寫return語句。函數(shù)的聲明與使用5函數(shù)的調(diào)用調(diào)用前先聲明函數(shù)原型:在調(diào)用函數(shù)中,或程序文件中所有函數(shù)之外,按如下形式說明:
類型標識符被調(diào)用函數(shù)名(含類型說明的形參表);調(diào)用形式
函數(shù)名(實參列表)嵌套調(diào)用函數(shù)可以嵌套調(diào)用,但不允許嵌套定義。遞歸調(diào)用函數(shù)直接或間接調(diào)用自身。函數(shù)的聲明與使用6例3-1編寫一個求x的n次方的函數(shù)函數(shù)的聲明與使用函數(shù)的調(diào)用7例3-2數(shù)制轉(zhuǎn)換題目:輸入一個8位二進制數(shù),將其轉(zhuǎn)換為十進制數(shù)輸出。例如:11012=1(23)+1(22)+0(21)+1(20)
=1310
所以,如果輸入1101,則應(yīng)輸出13函數(shù)的聲明與使用8例3-3編寫程序求π的值其中arctan用如下形式的級數(shù)計算:直到級數(shù)某項絕對值不大于10-15為止;π和x均為double型。函數(shù)的聲明與使用9例3-4尋找并輸出11~999之間的數(shù)m,它滿足m、m2和m3均為回文數(shù)?;匚模焊魑粩?shù)字左右對稱的整數(shù)。
例如:11滿足上述條件
112=121,113=1331。分析:10取余的方法,從最低位開始,依次取出該數(shù)的各位數(shù)字。按反序重新構(gòu)成新的數(shù),比較與原數(shù)是否相等,若相等,則原數(shù)為回文。函數(shù)的聲明與使用10例3-5計算如下公式,并輸出結(jié)果:其中r、s的值由鍵盤輸入。SINx的近似值按如下公式計算,計算精度為10-6:函數(shù)的聲明與使用11例3-6投骰子的隨機游戲游戲規(guī)則是:每個骰子有六面,點數(shù)分別為1、2、3、4、5、6。游戲者在程序開始時輸入一個無符號整數(shù),作為產(chǎn)生隨機數(shù)的種子。每輪投兩次骰子,第一輪如果和數(shù)為7或11則為勝,游戲結(jié)束;和數(shù)為2、3或12則為負,游戲結(jié)束;和數(shù)為其它值則將此值作為自己的點數(shù),繼續(xù)第二輪、第三輪...直到某輪的和數(shù)等于點數(shù)則取勝,若在此前出現(xiàn)和數(shù)為7則為負。由rolldice函數(shù)負責模擬投骰子、計算和數(shù)并輸出和數(shù)。函數(shù)的聲明與使用rand函數(shù)原型:intrand(void);所需頭文件:<cstdlib>功能和返回值:求出并返回一個偽隨機數(shù)srand函數(shù)原型:voidsrand(unsignedintseed);參數(shù):seed產(chǎn)生隨機數(shù)的種子。所需頭文件:<cstdlib>功能:為使rand()產(chǎn)生一序列偽隨機整數(shù)而設(shè)置起始點。使用1作為seed參數(shù),可以重新初化rand()。1213函數(shù)調(diào)用的執(zhí)行過程函數(shù)的聲明與使用main()調(diào)fun()結(jié)束fun()返回①②④⑥⑦保存:返回地址當前現(xiàn)場③恢復:主調(diào)程序現(xiàn)場返回地址⑤14嵌套調(diào)用函數(shù)的聲明與使用main{}調(diào)fun1()結(jié)束fun1()調(diào)fun2()返回fun2()返回①②③⑦④⑤⑥⑧⑨15例3-6輸入兩個整數(shù),求平方和。函數(shù)的聲明與使用嵌套調(diào)用16遞歸調(diào)用函數(shù)直接或間接地調(diào)用自身,稱為遞歸調(diào)用。遞歸過程的兩個階段:遞推:
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ù)的聲明與使用17例3-8求n!分析:計算n!的公式如下:這是一個遞歸形式的公式,應(yīng)該用遞歸函數(shù)實現(xiàn)。函數(shù)的聲明與使用18例3-9用遞歸法計算從n個人中選擇k個人組成一個委員會的不同組合數(shù)。分析:由n個人里選k個人的組合數(shù)
=由n-1個人里選k個人的組合數(shù)
+由n-1個人里選k-1個人的組合數(shù)當n==k或k==0時,組合數(shù)為1函數(shù)的聲明與使用19例3-10漢諾塔問題有三根針A、B、C。A針上有N個盤子,大的在下,小的在上,要求把這N個盤子從A針移到C針,在移動過程中可以借助B針,每次只允許移動一個盤,且在移動過程中在三根針上都保持大盤在下,小盤在上。函數(shù)的聲明與使用ABC分析:將n個盤子從A針移到C針可以分解為下面三個步驟:①將A上n-1個盤子移到B針上(借助C針);②把A針上剩下的一個盤子移到C針上;③將n-1個盤子從B針移到C針上(借助A針);事實上,上面三個步驟包含兩種操作:①將多個盤子從一個針移到另一個針上,這是一個遞歸的過程。hanoi函數(shù)實現(xiàn)。②將1個盤子從一個針上移到另一針上。
用move函數(shù)實現(xiàn)。21函數(shù)的參數(shù)傳遞機制
——傳遞參數(shù)值在函數(shù)被調(diào)用時才分配形參的存儲單元。實參可以是常量、變量或表達式。實參類型必須與形參相符。傳遞時是傳遞參數(shù)值,即單向傳遞。函數(shù)的聲明與使用22函數(shù)的參數(shù)傳遞機制
——參數(shù)值傳遞舉例XN被調(diào)函數(shù):主調(diào)函數(shù):32.5AD=power(A,3)2.53doublepower(doubleX,intN)函數(shù)的聲明與使用23例3-11輸入兩整數(shù)交換后輸出函數(shù)的聲明與使用函數(shù)的參數(shù)傳遞機制
——參數(shù)值傳遞舉例a=b;5x10y5a10b執(zhí)行主函數(shù)中的函數(shù)調(diào)用Swap(x,y);t=a;5x10y5a10b5tb=t;5x10y10a5b5t5x10y10a10b5t在Swap子函數(shù)中返回主函數(shù)以后5x10y242425函數(shù)的參數(shù)傳遞
——用引用做形參引用(&)是標識符的別名,例如:inti,j;
int&ri=i;
//建立一個int型的引用ri,并將其
//初始化為變量i的一個別名
j=10;
ri=j;//相當于i=j;聲明一個引用時,必須同時對它進行初始化,使它指向一個已存在的對象。一旦一個引用被初始化后,就不能改為指向其它對象。引用可以作為形參
voidswap(int&a,int&b){...}函數(shù)的聲明與使用26例3-12輸入兩個整數(shù)交換后輸出函數(shù)的聲明與使用函數(shù)的參數(shù)傳遞
——用引用做形參t=a;x5t5x的別名axy510y的別名x的別名aby的別名x的別名abx10y10a=bb=t;y5t5y的地址bxy105Swap(x,y);2728內(nèi)聯(lián)函數(shù)聲明與使用聲明時使用關(guān)鍵字inline。編譯時在調(diào)用處用函數(shù)體進行替換,節(jié)省了參數(shù)傳遞、控制轉(zhuǎn)移等開銷。注意:內(nèi)聯(lián)函數(shù)體內(nèi)不能有循環(huán)語句和switch語句。內(nèi)聯(lián)函數(shù)的聲明必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一次被調(diào)用之前。對內(nèi)聯(lián)函數(shù)不能進行異常接口聲明。內(nèi)聯(lián)函數(shù)29例3-14內(nèi)聯(lián)函數(shù)應(yīng)用舉例內(nèi)聯(lián)函數(shù)內(nèi)聯(lián)函數(shù)聲明與使用30默認形參值的作用函數(shù)在聲明時可以預先給出默認的形參值,調(diào)用時如給出實參,則采用實參值,否則采用預先給出的默認形參值。例如:intadd(intx=5,inty=6){returnx+y;}intmain(){add(10,20);//10+20add(10);//10+6add();//5+6}帶默認形參值的函數(shù)31默認形參值的說明次序默認形參值必須從右向左順序聲明,并且在默認形參值的右面不能有非默認形參值的參數(shù)。因為調(diào)用時實參取代形參是從左向右的順序。例:intadd(intx,inty=5,intz=6);//正確intadd(intx=1,inty=5,intz);//錯誤intadd(intx=1,inty,intz=6);//錯誤帶默認形參值的函數(shù)32默認形參值與函數(shù)的調(diào)用位置調(diào)用出現(xiàn)在函數(shù)體實現(xiàn)之前時,默認形參值必須在函數(shù)原形中給出;而當調(diào)用出現(xiàn)在函數(shù)體實現(xiàn)之后時,默認形參值需在函數(shù)實現(xiàn)時給出。例:intadd(intx=5,inty=6);intmain(){add();
//調(diào)用在實現(xiàn)前}intadd(intx,inty){returnx+y;}intadd(intx=5,inty=6){returnx+y;}intmain(){add();
//調(diào)用在實現(xiàn)后}帶默認形參值的函數(shù)33默認形參值的作用域在相同的作用域內(nèi),默認形參值的說明應(yīng)保持唯一,但如果在不同的作用域內(nèi),允許說明不同的默認形參。例:intadd(intx=1,inty=2);intmain(){intadd(intx=3,inty=4);
add();//使用局部默認形參值(實現(xiàn)3+4)}voidfun(void){...
add();//使用全局默認形參值(實現(xiàn)1+2)}帶默認形參值的函數(shù)34重載函數(shù)的聲明C++允許功能相近的函數(shù)在相同的作用域內(nèi)以相同函數(shù)名聲明,從而形成重載。方便使用,便于記憶。例:形參類型不同intadd(intx,inty);floatadd(floatx,floaty);形參個數(shù)不同intadd(intx,inty);intadd(intx,inty,intz);
函數(shù)重載35注意事項不要將不同功能的函數(shù)聲明為重載函數(shù),以免出現(xiàn)調(diào)用結(jié)果的誤解、混淆。這樣不好:intadd(intx,inty);intadd(inta,intb);編譯器不以形參名來區(qū)分intadd(intx,inty);voidadd(intx,inty);編譯器不以返回值來區(qū)分intadd(intx,inty){returnx+y;}floatadd(floatx,floaty){returnx-y;}
函數(shù)重載重載函數(shù)的形參必須不同:個數(shù)不同或類型不同。編譯程序?qū)⒏鶕?jù)實參和形參的類型及個數(shù)的最佳匹配來選擇調(diào)用哪一個函數(shù)。36例3-16重載函數(shù)應(yīng)用舉例編寫三個名為add的重載函數(shù),分別實現(xiàn)兩整數(shù)相加、兩實數(shù)相加和兩個復數(shù)相加的功能。
函數(shù)重載37C++系統(tǒng)函
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)選擇講座模板
- 2025年度茶葉產(chǎn)品溯源體系建設(shè)合同范本4篇
- 2025年度場化項目服務(wù)類采購項目合同附件定制版4篇
- 2025年度電競主題商鋪租賃合作協(xié)議4篇
- 2025年度生態(tài)環(huán)保園區(qū)場地委托出租與環(huán)保技術(shù)服務(wù)合同樣本4篇
- 專業(yè)技能提升課程2024培訓協(xié)議
- 人教版九年級化學上冊第1章開啟化學之門《第2節(jié) 化學研究什么》公開示范課教學課件
- 二零二四事業(yè)單位聘用合同四種類別適用范圍與條件3篇
- 2025年度文化演藝中心場地租用協(xié)議范本4篇
- 2025年度城市綜合體項目場地購置合同示范文本4篇
- 格式塔心理咨詢理論與實踐
- 精神發(fā)育遲滯的護理查房
- 有效排痰的護理ppt(完整版)
- 魯教版七年級數(shù)學下冊(五四制)全冊完整課件
- 英語六級詞匯(全)
- 算法向善與個性化推薦發(fā)展研究報告
- 聚合物的流變性詳解演示文稿
- 電氣設(shè)備預防性試驗安全技術(shù)措施
- 醫(yī)院出入口安檢工作記錄表范本
- 內(nèi)科學教學課件:免疫性血小板減少癥(ITP)
- 中華人民共和國文物保護單位登記表
評論
0/150
提交評論