- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
函式的宣告
* 解二元一次聯立方程式的巨集 我們將這兩個公式定義成巨集便可以求出各種聯立方程式的解, 程式如下: * 解二元一次聯立方程式的巨集 * 解二元一次聯立方程式的巨集 * 解二元一次聯立方程式的巨集 * 綜合練習 階乘函式,計算1億次1345並給出所花時間 用快速方法再計算1億次1345並給出所花時間 * * 次方、平方根、指數、對數 使用這些函式時請注意一些數學及 C++ 語言資料型別的限制。舉例來說, 如果 x 為負數, 則 sqrt(x) 將會傳回錯誤的結果, 因為負數開根號會出現虛數, 這不是 double 可表現的資料範圍。同理, 若 x 為負數且 y 有小數點, 則 pow (x,y) 也會傳回錯誤。 例如以下就是利用求平方根的函式來計算直角三角形的斜邊長度: * 次方、平方根、指數、對數 * 次方、平方根、指數、對數 * 三角函數 cmath 含括檔中宣告的數學函式中另一類在各種計算也常用到的就是三角函數的函式, 這些函數包括: * 三角函數 * 三角函數 使用這類函式時要注意兩點, 首先是前面提過的參數範圍, 以反三角函數為例, 必需以 -1~1 之間的參數值, 才會傳回合理的角度值;此外這些標準函式所使用的角度單位並非一般習慣使用的角度, 而是使用弳度為單位, 也就是以 π (=180 度) 的角度單位來計算。因此為了方便計算, 建議要用到這些函式時, 先在程式中定義代 表 π 或角度 / 弳度換算用的巨集常數, 請參考以下範例: * 三角函數 * 三角函數 * 三角函數 1. 第 10~13 行以迴圈的方式輸出 30、60、90… 至 180 度的 sin() 正弦函數值。 2. 第 12 行使用 PI 常數以便將角度轉成弳度再呼叫 sin() 方法。 讀者可發現, 當角度為 180 度 () 時, sin 函數的值應該為 0, 但範例程式算出來的結果只是非常小的數值, 但仍不是 0。這是電腦浮點數處理方式的先天限制, 並非 C++ 的算術不好, 讀者若在進行較精密的計算時, 需注意這個問題。 * 時間函式 時間類型的函式也是寫作程式常會用到的, C++ 提供了幾個與時間有關的函式, 例如有一個是由中央處理器的時脈 (clock) 數傳回目前時間的函式: 其中 clock_t 為使用 typedef 定義的型別, 通常就是 long 型別。此外有個巨集常數 CLK_TCK, 表示每秒的時脈數, 因此我們可利用它們來計算程式執行的時間, 或是控制程式等待的時間。 * 時間函式 * 時間函式 1. 第 9 行的迴圈雖然沒做什麼事, 但運算式每次都會將 i 遞增並做比較, 所以等於做加法及比較運算一億次。 2. 第 12 行將執行迴圈前後的系統時間 (以時脈為單位) 相減, 再除以 CLK_TCK 常數即可得到執行的秒數。由於參與計算的數值都是整數型別, 所以用強迫轉型的方式, 以取得商數的小數點。 * 6-7 函式多載 (Overloading) 函式的參數列中各參數的型別也稱為函式的簽名 (Signature)。因為在 C++ 的程式中, 函式名稱可以重複, 但同名的函式其簽名必須彼此不同, 每個名稱及簽名的組合必須是唯一而不可重複的。使用相同的名稱來定義不同的函式就稱為多載 (Overload), 當程式中有多載的函式時, C++ 的編譯器就會依呼叫函式時的參數型別, 來判斷程式到底是呼叫哪一個函式。 * 函式多載 (Overloading) 舉例來說, 剛剛介紹的數學函式, 其實就有 3 種版本: 以上三個函式的宣告均為合法, 因為它們的參數列不同; 因此編譯時編器會替函式名稱加上不同的簽名以茲分辨。當我們呼叫函式時, 編譯器也會依照呼叫函式時的參數型別, 來決定要使用哪一個函式。除了參數型別不同外, 參數數量不同也可以是簽名的依據: * 函式多載 (Overloading) * 函式多載 (Overloading) * 函式多載 (Overloading) 1. 第 4~8 行為計算並顯示球體體積的函式 volume(), 呼叫時需傳遞球體的半徑為參數。 2. 第 10~14 行為計算並顯示長方體體積的函式 volume(), 呼叫時需傳遞長、寬、高為參數。 3. 第 18、19 行分別以不同數量的參數呼叫 volume() 函式, 結果分別會執行到不同的計算體積函式, 如執行結果所示。 * 函式多載 (Overloading) 在設計多載函式時請注意, 函式的簽名是依據參數的型別, 所以只有傳回值型別不同是無法成為多載函式: 多載函式的應用是物件導向程式設計三項特性中多面性 (Polymorphism) 的一環, 在後面章節進入物件導向的主題後, 將會介紹更多的複載函式應用。 * 6
文档评论(0)