# 【知識精講】數學函數
## Part1
在 C 語言(沒錯,就是 C 語言)的數學(math)函數庫中,有很多不同的數學函數—— C++ 語言完整繼承了 C 語言的絕大多數庫,其中就包括 math 庫。在使用的時候,直接引用即可。需要說明的是,學過 C 語言的同學可能會注意到 C 語言中引用 math 庫時的文件名是`math.h`,雖然在 C++ 語言中,你依然可以這么寫,但是更好的寫法應該是`cmath`——所有繼承的 C 庫,在 C++ 中都應該這么寫,即以`c某某某`的名字引入。
剛才小渡和你已經一起學習了一下 `pow` 函數(其實它的名字是 power 的縮寫),現在讓我們一起來再學習一下絕對值函數、三角函數、對數函數、取整函數、平方根函數這些數學函數在 C 語言中的使用。
## Part2
**絕對值函數**
在 C 語言中有兩個常用的絕對值函數,分別是 `abs` 函數和 `fabs` 函數。
其中 `abs` 函數傳入的參數需要是一個整數,返回的結果則會是這個傳入的整數的絕對值。例如, `abs(-4)`的返回值會是 444。
而 `fabs` 函數,就明顯是一個起名很友好的函數,其中 `f` 表示了浮點數。所以它是一個類似于`abs`函數,但傳入的參數是浮點數的函數——當然,返回的結果就是所傳入的浮點數的絕對值。例如,`fabs(-3.14)`的返回值會是 3.143.143.14,`fabs(2.7)`的返回值會是 2.72.72.7。
就像我們上面介紹的那樣,C++ 語言幾乎實現了對 C 語言的源碼級兼容——所以你仍然可以使用這兩個函數。但是因為 C++ 語言支持一種名為**函數重載**的特性,所以你可以直接使用`abs`函數來計算多種形式的數字——包括整數和浮點數。關于函數重載的詳細內容,我們將會在后續課程中向大家介紹。
## Part3
**三角函數**
在`cmath`數學庫中,包含了我們常用的三角函數:正弦 `sin`、余弦 `cos`、正切 `tan`、反正弦 `asin`、反余弦 `acos`、反正切 `atan`。它們都接受一個(雙精度)浮點數值作為傳入的參數,返回的則是對應的數學定義上的三角函數被應用在傳入的浮點數值后的結果,類型也是(雙精度)浮點數。
例如, `tan(3.1415926535/4)` 的返回值是 1.0000001.0000001.000000,`acos(0.32696)` 的返回值是 1.2377111.2377111.237711。
## Part4
**對數函數**
對于以 e 為底的對數函數 lnx ,`cmath`數學庫中提供了名為 `log` 的函數;而對于以 10 為底的對數函數,數學庫中則提供了一個名為 `log10` 的函數。
與三角函數類似,它們都接受一個(雙精度)浮點數值作為傳入的參數,返回的也都是對應的數學定義上的相應對數函數被應用在傳入的浮點數值后的結果,類型也是(雙精度)浮點數。
例如,`log(2.71828)` 的返回值是 0.999999,而 `log10(100)` 的返回值是 2.000000。
## Part5
在數學庫中還有**上取整函數**(天花板函數)`ceil` 和**下取整函數**(地板函數)`floor`。它們接受一個(雙精度)浮點數值作為傳入的參數,返回的也都是對應的數學定義上的相應上、下取整后的浮點數結果。例如,`floor(2.7)` 的結果會是 2.0000002.0000002.000000,`ceil(-3.2)`的結果會是 ?3.000000\-3.000000?3.000000。
另外,數學庫中還有一個求平方根的函數 `sqrt`。它接受一個(雙精度)浮點數值作為傳入的參數,返回的也都是對應的數學定義上的浮點數結果。例如,`sqrt(42.25)`的結果會是 6.5000006.5000006.500000。
接下來的課程中,我們可就要試著使用這些數學函數了喔!
## Part6
- 教材介紹
- 《編程初學入門常識》
- 什么是程序語言
- 【知識精講】編程與編程語言
- 【選擇測試】編程語言分類
- 【知識精講】高級語言分類
- 【選擇測試】編譯與解釋
- 【選擇測試】程序員笑話-Java
- 熟悉鍵盤上用于編程的鍵位
- 【知識精講】認識你的鍵盤
- 【知識精講】中文和英文字符
- 【匹配測試】識別中英文符號
- 【選擇測試】中英文符號的影響
- 【伴隨編程】不要使用中文引號
- 【伴隨編程】不要使用中文分號
- 【伴隨編程】正確地輸入符號
- 【選擇測試】找出程序中的錯誤
- 初始工程師思維
- 【知識精講】二進制思想
- 【選擇測試】程序員笑話-湊整
- 【知識精講】閉合的邏輯
- 【選擇測試】程序員笑話-條件
- 程序員職業與生活
- 【知識精講】程序員的發展方向
- 【知識精講】程序員的裝備
- 【知識精講】程序員的健康
- 【選擇測試】做一名健康的程序員
- 《C++程序設計》
- 前言
- 【知識精講】編程與計算機科學
- 【知識精講】編程與軟件工程
- 【知識精講】如何學習編程
- 你好C++
- 【知識精講】你好,C++
- 【知識精講】C++程序是如何開發的
- 【知識精講】成為一名Power User
- 【伴隨編程】讓我們一起說你好
- 【知識精講】你的第一個C++語言程序
- 【伴隨命令】編譯、運行你的程序
- 【伴隨編程】將變量流式輸出
- 【選擇測試】變量的作用域
- 【知識精講】變量與數據類型
- 【匹配測試】C++語言的入門概念
- 【知識精講】在程序中學會換行
- 【選擇測試】正確地換行
- 簡單數學運算
- 【知識精講】重新認識基本運算
- 【選擇測試】運算符的理解
- 【伴隨編程】做一下簡單的運算
- 【伴隨編程】a 的 n 次方
- 【知識精講】數學函數
- 【伴隨編程】讓C++語言變成計算器
- 【伴隨編程】計算球的體積
- 【匹配測試】數學世界知多少
- 【知識精講】在程序中添加注釋
- 【選擇測試】正確地寫注釋
- 從伴隨輸入到變量地址
- 【伴隨編程】 一個數字復讀機器
- 【選擇測試】理解標準輸入輸出
- 【伴隨編程】一個加法計算器
- 【程序設計】A+B+C問題
- 【伴隨編程】簡單的I/O格式控制
- 【知識精講】地址與取地址符
- 【伴隨編程】看看我們的地址
- 習題一:面積與周長
- 【程序設計】矩形面積與周長
- 【程序設計】三角形面積與周長
- 【程序設計】圓形面積與周長
- 程序中的是與非
- 【知識精講】是非的表示與關系運算
- 【伴隨編程】驗一驗關系運算式
- 【選擇測試】關系運算式求值
- 【知識精講】如果的意義
- 【伴隨編程】分段函數求值
- 【知識精講】如果之后的如果
- 【伴隨編程】五則運算器
- 【選擇測試】分支的嵌套
- 【伴隨編程】問號表達式
- 【知識精講】是非之間的邏輯組合
- 【伴隨編程】判斷閏年
- 【程序設計】日期合法性
- 【知識精講】多路順序結構
- 【知識精講】在程序中學會縮進
- 【選擇測試】正確的縮進
- C++程序中的苦力
- 【知識精講】使用循環結構
- 【選擇測試】對比兩種循環
- 【伴隨編程】使用while循環
- 【填空測試】理解循環結構
- 【知識精講】自減和自增運算符
- 【伴隨編程】使用自增運算符
- 【知識精講】for循環
- 【選擇測試】for循環的使用
- 【程序設計】一大波好玩兒的程序
- 《代碼能力快速提升》
- 《基礎數據結構》
- 《搜索入門》
- 《動態規劃基礎》
- 《數論和基礎數學》
- 《圖和數基礎》