C 函式 實驗2

2022-04-19 09:45:54 字數 1602 閱讀 9299

1.實驗內容

函式宣告和函式定義

形參和實參

主調函式把實參的值傳送給被調函式的形參從而實現主調函式向被調函式的資料傳送。

返回值的作用:1.返回函式的運算結果。 2.return; 用於結束當前的函式執行。

函式的引數傳遞:

2.題目及**:

思路:將判斷質數單獨寫成乙個函式,如果乙個數從2開始到他本身都沒有能整除他的數即為質數。利用三個子函式(分別採用while,do...while,for)輸出列印質數。

1 #include2

using

namespace

std;3//

判斷質數:1到sqrt(n)都沒有能整除它的數

4int zspan(int

n) 9

if(i>=n) return1;

10else

return0;

11}

12//

輸出質數 三種不同的迴圈語句實現

13int coutzhishu1(int

n)cout<

19return0;

20}21int coutzhishu2(int

n)while(n<100

);27 cout<

28return0;

29}30int coutzhishu3(int

n)35 cout<

36return0;

37}3839

40int

main()

view code

3.第三章收穫:

遞迴的執行機制:

遞迴的效率:遞迴呼叫具體要儲存的內容包括:區域性變數、形參、呼叫函式位址、返回值。那麼,如果遞迴呼叫n次,就要分配n*區域性變數、n*形參、n*呼叫函式位址、n*返回值。這勢必是影響效率。遞迴就是利用系統的堆疊儲存函式當中的區域性變數來解決問題的,並且這些變數一直不被釋放,直到遇到簡單情境時才一一出棧釋放,所以總的開銷就很大。如何改進遞迴效率是乙個需要思考的問題。c++中提供乙個inline函式,可以避免引數壓棧。能不能用在遞迴裡面?

內聯函式:不是在呼叫時發生轉移,而是在編譯時將函式體嵌入在每乙個呼叫處。這樣在被呼叫處進行**展開,就省去了引數壓棧、棧幀開闢與**,結果返回等,從而提高程式執行速度。但是在書中p82頁上註明,對自身直接呼叫的遞迴函式不能使用。原因是,內聯函式只是程式設計師給編譯器的乙個建議,而遞迴函式被呼叫之前也不知道自己要被呼叫多少次的函式,展開過於龐大,使得**臃腫。

遞迴函式轉化成非遞迴:迭代:就是利用已知的值推算出下一步的值,可以避免呼叫棧。大多數的遞迴都可以轉化成迭代函式,使用迭代效率更高,但是沒有遞迴表達更清晰。

c++的系統函式:很多函式繼承c而來,因此繼承自c的函式字首為c,比如cmath.注意少用math.h。(僅僅是能相容)推薦**: 可以查詢標準函式原型,標頭檔案。

實驗2 函式

1.驗證性實驗 函式宣告和函式定義各自的作用,二者的區別 函式宣告的作用 檢查函式定義,函式呼叫時,引數,返回值,是否與宣告相同。函式定義的作用 在呼叫時尋找對應函式,執行操作。區別 函式宣告引入了乙個名字來代表乙個函式,並且可選的,指明函式的引數列表,可以出現在檔案作用域中。函式定義將函式體和函式...

C 第2次實驗 分段函式求值

1 問題及 檔名稱 分段函式求值.cpp 作 者 吳傑 完成日期 2016年 3 月 18日 版 本 號 v1.0 對任務及求解方法的描述部分 輸入不同段的x的值,通過不同的函式關係求y的值 輸入描述 輸入任意x的值 問題描述 求解x對應段的函式值y 程式輸出 輸出x對應的y值 問題分析 略 演算法...

c 實驗2 分段函式求值

一 問題及 檔名稱 c 實驗2 作 者 劉寅 完成日期 2016年3月24日 版 本 號 v1.0 對任務及求解方法的描述部分 利用程式求分段函式的值 輸入描述 輸入變數x的值 程式輸出 分段函式y的值 問題分析 x的值的範圍不同,所求函式值的的表示式也不同 演算法設計 略 include void...