🧮 数学库函数
想开平方、算几次方、问「10 的几次方等于 1000」?C++ 早就把这些数学本领装进了 <cmath> 数学库里。这一页我们认识三角、对数、指数三大家族,还会发现它们最爱用「弧度」和「小数」,别被绕进去哦。
考纲知识点:三角函数
对数函数
指数函数
对数函数
指数函数
📖
考纲 · 知识点详述
摘自《CCF编程能力等级认证 C++&Python 认证标准》C++ 七级
- (1)掌握数学库常用函数(三角、对数、指数),三角函数包括sin(x),cos(x)等;对数函数包括log10(x):返回x 以10 为底的对数,log2(x):返回x 以2 为底的对数;指数函数包括exp(x):计算指数函数,返回x 的以e 为底的指数函数。
📚
先学一学
花 5 分钟读完下面 4 课,再去闯关就不慌啦
1
🧰 cmath:C++ 自带的数学工具箱
程序里常要开平方、算几次方、求对数。这些数学本领不用自己慢慢造,C++ 把它们做成了一个现成的数学库,它的名字叫 <cmath>(老一点的叫法是 <math.h>)。只要在代码开头把它请进来,就能直接用 sin、cos、log、exp 这些函数啦。
🧪 读代码:先请数学库进门
看得懂就好,不用背:
#include <cmath>
#include <iostream>
using namespace std;
int main() {
cout << sqrt(144); // 12:开平方
cout << pow(2, 5); // 32:2 的 5 次方
}
#include <iostream>
using namespace std;
int main() {
cout << sqrt(144); // 12:开平方
cout << pow(2, 5); // 32:2 的 5 次方
}
sqrt(144) 求 144 的平方根,pow(2, 5) 算 2 的 5 次方。注意这些函数算出来的大多是小数(double 类型),连输入整数也一样。
💡 口诀:cmath 是工具箱,sin/log/exp 随取随用;数学函数爱吐小数,别把它当整数看。
🌟 行业实际:数值计算到处是它
气象预报算大气运动、游戏引擎算光影和碰撞、导航算地球曲面距离……背后都在悄悄调用数学库。工程师不会每次自己推导公式,而是「站在工具箱上干活」。
2
📐 三角函数 sin/cos:先说好,我们只认「弧度」
sin(x)、cos(x) 是三角函数,负责描述「角」和「长度」的关系,画波浪、转圈圈都靠它。数学课常把角说成 30°、90°,可 C++ 里的 sin/cos 只认弧度:一整圈是 2π 弧度,也就是 360°;90° 就是 π/2 ≈ 1.5708 弧度。
🧪 读代码:弧度写对才有好结果
看得懂就好,不用背:
cout << sin(3.1415926 / 2); // 弧度 π/2 ≈ 90°,结果约为 1
cout << sin(30); // 30 是弧度不是 30°,结果约为 -0.988
cout << cos(3.1415926 / 6); // 弧度 π/6 ≈ 30°,结果约为 0.866
cout << sin(30); // 30 是弧度不是 30°,结果约为 -0.988
cout << cos(3.1415926 / 6); // 弧度 π/6 ≈ 30°,结果约为 0.866
想算「30° 的正弦」,要先把角度换成弧度:30 × π ÷ 180 ≈ 0.5236,再写 sin(0.5236) 才对。直接写 sin(30) 是把 30 当弧度,结果可就不是 0.5 了。
💡 口诀:角度换弧度,乘 π 再除以 180;90° 是 π/2,写对弧度结果才对。
🎮 行业实际:游戏里转圈圈
做小游戏让飞船绕星球飞,或者让小人走出圆形路线,一般用 x = 圆心x + 半径 × cos(角度)、y = 圆心y + 半径 × sin(角度)。声音的波浪、弹簧的晃动也用 sin/cos 描述。
3
🪵 对数函数:倒过来问「几次方」
乘法问「一共多少」,对数却倒过来问「底数要乘几次才能到它」。比如 10 × 10 × 10 = 1000,就问「10 的几次方等于 1000」?答案 3,写出来就是 log10(1000) = 3。C++ 里常用的三个对数函数:
🔢 三个对数兄弟
· log10(x):以 10 为底的对数。log10(1000) = 3,因为 10³ = 1000。
· log2(x):以 2 为底的对数。log2(8) = 3,因为 2³ = 8;log2(32) = 5。
· log(x):自然对数,以神奇的数 e(约 2.718)为底。log(8) 约等于 2.079,既不是 2 也不是 3。
💡 口诀:log10 问「10 乘几次」,log2 问「2 乘几次」,log 单独出现是问「e 乘几次」。
🧪 读代码:对数也会吐小数
看得懂就好,不用背:
cout << (int)log(8); // log(8)≈2.079,强转 int 变成 2
cout << log2(32); // 数值是 5,但类型是 double,会显示 5
cout << log2(32); // 数值是 5,但类型是 double,会显示 5
(int) 会把小数尾巴直接截掉,只留整数部分。
🌍 行业实际:对数把「巨大」变成「好懂」
声音的分贝、地震的震级、手机信号强度用的都是对数刻度——真实能量相差一万亿倍,画出来没法看,取个对数就能压缩成 0~几百的舒服数字。二分查找每步砍一半,步数也是 log₂N,程序员天天跟「对数」打交道。
4
⚡ 指数函数 exp:和 log 唱反调
exp(x) 是「以 e 为底的指数函数」,算的是 e 的 x 次方,其中 e ≈ 2.718。log 是「问几次方」,exp 是「真去乘出来」,它俩正好是一对反函数,像把拉链拉上又拉开。
🧪 读代码:算 e 的几次方
看得懂就好,不用背:
cout << exp(1); // e¹ ≈ 2.718
cout << (int)exp(2); // e² ≈ 7.389,强转 int 变成 7
cout << (int)exp(2); // e² ≈ 7.389,强转 int 变成 7
e² ≈ 7.389,取整后是 7,不是 4 也不是 100。
💡 口诀:log 是「问几次方」,exp 是「真去乘」;数学库函数返回 double,取整 (int) 才变整数。
🧫 行业实际:细菌翻倍、钱生钱都靠指数
细菌每 20 分钟翻一倍、银行存款按复利增长,这类「越滚越快」的变化都适合用 exp 描述。计算机图形学里画柔和的光线衰减,也常请 exp 帮忙。
🎯
闯关小锦囊 · 考点提醒
- 用数学库先写 #include <cmath>;sin、cos、log、exp、sqrt、pow 都在里面。
- sin/cos 只认弧度:90° 写 sin(3.1415926/2) 才得 1;把 30 当弧度写 sin(30) 结果不是 0.5。
- log10(x) 以 10 为底、log2(x) 以 2 为底、log(x) 是自然对数 ln(以 e 为底)。
- exp(x) = e 的 x 次方;e ≈ 2.718,所以 exp(1) ≈ 2.718、exp(2) ≈ 7.389。
- 数学函数返回值大多是 double(小数):log2(32) 数值是 5 但类型是 double;pow(2, 10) 也是 double。
- 想取整数部分用 (int) 强转,会把小数尾巴直接截掉。
- x > 0 时 exp(x) − x 一定大于 0(因为 e 的 x 次方比 x 长得快),而 sin(x)/x 可能是负的。
🎮
学完了?来闯关!
下面 16 个小挑战,点一点就能玩
Demo 原型 · 每个知识点独立页面 · 暂不含真实编译与进度存储。