C++第3章函數作業(yè)講評_第1頁
C++第3章函數作業(yè)講評_第2頁
C++第3章函數作業(yè)講評_第3頁
C++第3章函數作業(yè)講評_第4頁
C++第3章函數作業(yè)講評_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.,C+第 3章函數作業(yè) 參考答案,.,3-2 觀察下面程序的運行輸出,與你設想的有何不同?仔細體會引用的用法。,#include using namespace std; int main() int intOne; int ,.,int intTwo=8; rSomeRef=intTwo; coutnintOne:tintOneendl; coutintTwo:tintTwoendl; coutrSomeRef:trSomeRefendl; return 0; ,.,.,引用:是一種特殊類型的變量,可以認為是另一個變量的別名,即引用名與被引用的變量名所對應的是同一個儲存單元,所以通過引用名

2、對其儲存單元所做的一切操作相當于作用于變量名所對應的儲存單元。 注意: 聲明一個引用的同時需用已知對象對其進行初始化; 引用被聲明后,所指向對象不能更改。,.,.,3-3 比較值傳遞與引用傳遞的相同點與不同點。,【解】 相同點: 均是函數的參數傳遞,即函數被調用時形參與實參結合的過程。 不同點: 值傳遞是指在調用函數時將實參復制一份傳遞到函數中,這樣在函數中如果對參數進行修改,將不會影響到實參。值傳遞本質上傳的是實參表達式。 引用傳遞是指在調用函數時將實參的地址傳遞到函數中,這樣在函數中對參數所進行的修改,將影響到實參。引用傳遞本質上傳的是實參地址。,.,.,3-4 什么叫內聯函數?它有哪些特

3、點?,【解】內聯函數:在定義時用關鍵字inline修飾,它不是在調用時發(fā)生控制轉移,而是在編譯時將函數體嵌入在每一個調用處。 特點: 編譯前,有函數的結構,編譯后,卻不具備函數的性質; 編譯時用函數體替換調用處的函數名,節(jié)省參數傳遞、控制轉移等開銷; 不能是遞歸調用的函數; 函數功能簡單、規(guī)模小,不存在while和switch等復雜的結構且一般只有15條語句; 只能先定義后使用;,.,.,3-5 函數原型中的參數名與函數定義中的參數名以及函數調用中的參數名必須一致嗎?,【解】不必一致; 對有形參函數: 函數原型中的形參表只要求包含完整的類型信息,即形參的類型與位置,對形參名不作要求,不必與函數

4、定義一致,甚至可以省略; 函數定義中的形參表要考慮形參的類型、位置和形參名,形參名不能省略; 函數調用中的實參表只要求實參的類型和位置與函數的定義一致,對參數名不作要求,若函數是帶默認形參的函數,函數調用時實參與形參個數還可以不相同。,.,.,3-6 調用被重載的函數時,通過什么來區(qū)分被調用的是哪個函數?,【解】函數成功被調用,函數名要正確,更重要的是函數的形參表與調用中函數的實參表的參數類型與順序要吻合(個數相同與否要看函數有沒有默認形參)。重載函數的函數名相同,因此,區(qū)分重載函數的只能是函數的外部接口形參表。所以,調用被重載函數時,是通過函數形參的類型與個數來確定被調函數。特別注意,不能通

5、過返回值的類型和形參名來區(qū)分重載函數。,.,.,3-7 完成函數。參數為兩個unsigned short int 型數,返回值為第一個參數除以第二個參數的結果,數據類型為short int;如果第二個參數為0,則返回值為-1。在主程序中實現輸入輸出。,.,【解】編寫以下程序,實現上述功能: #include using namespace std; short divide(unsigned short a,unsigned short b) if(b=0) return -1; else return a/b; /函數定義 void main() unsigned short a,b; co

6、utab; couta/b=divide(a,b)endl(b=0時為-1)endl; ,.,運行結果截圖如下:,.,下面觀察以下兩個運行結果截圖:,觀察發(fā)現這兩個結果并不是我們想要看到的,因此,以上程序有待改進。,.,【解】改進以上程序: #include using namespace std; double divide(unsigned short a,unsigned short b) if(b=0) return -1; else return a/double(b); /更改函數返回值類型,b強制轉換為double類型 void main() unsigned short a,b

7、; coutab; couta/b=divide(a,b)endl(b=0時為-1)endl; ,.,驗證改進效果截圖如下:,.,.,.,【解】編寫以下程序,實現華氏溫度與攝氏溫度的轉換: #include using namespace std; double FtoC(double F) double C; C=5/double(9)*(F-32); /注意分數運算 return C; void main() double T; coutT; coutT=T=FtoC(T)endl; ,.,運行結果截圖如下:,.,25,.,26,3-8,#include using namespace s

8、td; void main() double f,c; coutf; c=(f-32)*5/9; cout對應的攝氏溫度為:cendl; ,.,27,.,.,29,寫成函數形式,#include using namespace std; double faToCel(double f) return (f-32)*5/9); void main() float f; coutf; cout對應的攝氏溫度為:faToCel(f)endl; ,.,30,.,.,32,3_9 編寫函數判別一個數是否是質數,在主程序中實現輸入輸出。,.,33,#include using namespace std;

9、 bool prime(int num) bool flag; flag=true; for(int i=2; inum;i+) if(num%i=0) flag=false; break; return flag; ,.,34,void main() int num ; coutnum; if(prime(num)=true) coutnum是質數endl; else coutnum不是質數endl; ,.,.,36,提高了效率,#include #include using namespace std; bool prime(int num) bool flag; flag=true; i

10、nt k=sqrt(num); for(int i=2; i=k;i+) if(num%i=0) flag=false; break; return flag; ,.,37,void main() int num ; coutnum; if(prime(num)=true) coutnum是質數endl; else coutnum不是質數endl; ,.,38,.,39,.,40,.,41,3-10,最大公約數:如果有一個自然數a能被自然數b整除,則稱a為b的倍數,b為a的約數。幾個自然數公有的約數,叫做這幾個自然數的公約數。公約數中最大的一個公約數,稱為這幾個自然數的最大公約數。例如: 12

11、的約數有:1,2,3,4,6,12; 18的約數有:1,2,3,6,9,18。12和18的公約數有:1,2,3,6. 6是12和18的最大公約數,.,42,3-10,最小公倍數:兩個或兩個以上的數公有的倍數叫做這幾個數的公倍數,其中最小的一個叫做這幾個數的最小公倍數。 例如: 12的倍數有:12,24,36,48,60,72,84,18的倍數有:18,36,54,72,90, 2和18的公倍數有:36,72,. 其中36是12和18的最小公倍數 。,.,3-10 編寫函數求兩個整數的最大公約數和最小公倍數。,.,【解】編寫以下程序,求兩個正整數的最大公約數和最小公倍數:,#include us

12、ing namespace std; int GCD(int a,int b) int i,j; j=(a=1;i-) if(a%i=0 /定義最小公倍數函數,.,void main() int a,b; coutab; couta“和”b“的最大公約數為GCD(a,b)endl; couta和b的最小公倍數為LCM(a,b)endl; ,.,運行結果截圖如下:,.,.,3-11 什么叫做嵌套調用?什么叫做遞歸?,【解】函數允許嵌套調用,如果函數1調用了函數2,函數2在調用函數3,便形成了函數的嵌套調用。函數可以直接或間接地調用自身,成為遞歸調用。,嵌套調用,遞歸調用,.,.,.,#inclu

13、de using namespace std; int Sum(int n) if(n=1) return 1; else return n+Sum(n-1); /直接遞歸調用 void main() int n; do coutn; while(n=0); /避免輸入負數或0 cout1+2+.+n=Sum(n)endl; ,【解】編寫以下程序,求前n個正整數之和:,.,運行結果截圖如下:,.,.,.,#include using namespace std; int Fib(int n) if(n=1|n=2) return 1; else return Fib(n-1)+Fib(n-2); /直接遞歸調用 void main() int n; do coutn; while(n=0); coutFibonacci(n)=Fib(n)endl; ,【解】編寫以下程序,求Fibonacci級數:,.,運行結果截圖如下:,.,.,附加題,.,請將劃線處缺失的部分補充完整(你有幾種填寫方法?不允許修改程序其他地方),#include using namespace std; class Cat public: Cat(int initAge)age=initAge; Cat() ;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論