🎁 当前为 免费试看 内容 · 开通VIP 解锁 GESP 通关手册全部 1–8 级知识点 + 题库 + 详细解析
🌐 主站
📖 已学 0

📌 数学库函数

所属等级:GESP 7级 | 难度:★★★ | 关键词:数学库函数

📝 考纲要求

  • 掌握数学库常用函数,使用前应 #include <cmath>;
  • 三角函数:sin(x)、cos(x) 等,参数 x 为弧度;
  • 对数函数:log10(x) 返回以 10 为底的对数,log2(x) 返回以 2 为底的对数,log(x) 即 ln(x) 自然对数;
  • 指数函数:exp(x) 返回 x 的以 e 为底的指数函数(即 eˣ)。

📖 通俗讲解

💡 一句话理解 <cmath> 是 C++ 的数学工具箱,把“三角函数、对数、指数、开方、绝对值、乘方”这些手算麻烦的函数都封装好了,调用一句就能拿到高精度的 double 结果。

数学库里所有函数的参数和返回值都是浮点数(double)。最重要的一点:三角函数 sin / cos / tan 接受的不是“角度”,而是“弧度”。日常我们习惯用 30°、90° 这种角度,但 C++ 里要先把角度换算成弧度,公式是 弧度 = 角度 × π / 180,否则算出来的结果会完全错误。

下面两张速查表帮你记住常用函数,以及“角度”和“弧度”的区别。

🖼️ 图解

  cmath 常用函数速查表(参数/返回值均为 double)
  ┌──────────┬─────────────────────────────┬─────────────────────────┐
  │ 函数     │ 含义                        │ 参数说明                │
  ├──────────┼─────────────────────────────┼─────────────────────────┤
  │ sin(x)   │ 正弦 sin(x)                 │ x = 弧度(非角度!)    │
  │ cos(x)   │ 余弦 cos(x)                 │ x = 弧度                │
  │ tan(x)   │ 正切 tan(x)                 │ x = 弧度                │
  │ log10(x) │ 以 10 为底的对数 log₁₀(x)   │ x > 0                  │
  │ log2(x)  │ 以 2 为底的对数 log₂(x)     │ x > 0                  │
  │ log(x)   │ 自然对数 ln(x)(以 e 为底) │ x > 0                  │
  │ exp(x)   │ 以 e 为底的指数 eˣ          │ 任意实数 x             │
  │ sqrt(x)  │ 平方根 √x                   │ x ≥ 0                  │
  │ fabs(x)  │ 绝对值 |x|(浮点版)        │ 任意实数 x             │
  │ pow(a,b) │ a 的 b 次方 aᵇ              │ a≥0 或 b 为整数        │
  └──────────┴─────────────────────────────┴─────────────────────────┘

🖼️ 图解

  单位说明:角度(°) vs 弧度(rad)
  ┌──────────────────────────────────────────────────────────┐
  │  角度 30°  → 弧度 = 30 × π / 180 = π/6 ≈ 0.5236 rad       │
  │  角度 90°  → 弧度 = 90 × π / 180 = π/2 ≈ 1.5708 rad       │
  │  角度180°  → 弧度 = 180 × π / 180 = π   ≈ 3.1416 rad      │
  └──────────────────────────────────────────────────────────┘

         y
         ↑
         │      /| 斜边(长1)
         │    /  |  角度 θ (用弧度表示!)
         │  / θ  | 对边 = sin(θ)
         │/_____|→ x       邻边 = cos(θ)
        邻边

  ⚠️ 错误:sin(30)  ← 30 被当成 30 弧度,结果≈-0.988(错!)
  ✅ 正确:sin(30 * M_PI / 180)  ← 先转弧度,结果=0.5(对!)

🔵 核心必背重点

✅ 必背
  • 头文件:用任何数学函数前先写 #include <cmath>;
  • 弧度换算:弧度 = 角度 × M_PI / 180,M_PI 是 π 的常量(定义在 <cmath> 中);
  • 对数区分:log10(x) 是 log₁₀,log2(x) 是 log₂,log(x) 是 ln(自然对数,不是 10 为底);
  • 类型用 double:参数和接收变量都用 double,避免整数相除丢失精度。
🔑
记忆口诀:“三角吃弧度,角度先乘 π 除 180;log10 看 10、log2 看 2、log 是 ln;指数找 exp、开方用 sqrt、绝对值 fabs、乘方 pow 管。”

🔴 考试拉分难点

⚠️ 难点
  • 弧度混淆:直接把角度当参数传进 sin/cos,是最典型丢分点;务必先 × π / 180。
  • log 不是 log10:题目若要求“以 10 为底”,必须用 log10,用 log 会变成自然对数导致答案错。
  • abs vs fabs:整数用 abs(<cstdlib>),浮点数必须用 fabs(<cmath>),混用可能编译告警。

🟡 高频易错陷阱

🚫 扣分坑点
  • 忘记 #include <cmath>,导致 sin/cos/log 等函数找不到;
  • 用 3.14159 手写 π 而不用 M_PI,精度不足还可能拼错;
  • 把 pow 的底数/指数写成整数后直接赋给 int,精度与类型不匹配。

🧪 例题演练

例题 1(基础题):已知角度求直角三角形边长

题目:输入一个锐角角度 deg(0 < deg < 90)与斜边长度 h,求对边与邻边长度。
提示:对边 = h × sin(角度),邻边 = h × cos(角度)。注意 sin/cos 接受的是弧度。

C++
#include <iostream>
#include <cmath>          // 数学库头文件
using namespace std;
int main() {
    double deg, h;
    cin >> deg >> h;
    // 角度转弧度:乘以 π 再除以 180
    double rad = deg * M_PI / 180;
    double opposite = h * sin(rad);   // 对边 = h * sin(角度)
    double adjacent = h * cos(rad);   // 邻边 = h * cos(角度)
    cout << opposite << " " << adjacent << endl;
    return 0;
}
输入 / 输出30 2 1 1.73205
💡 解析 30° 转弧度为 π/6 ≈ 0.5236,sin(π/6)=0.5、cos(π/6)≈0.8660,故对边=2×0.5=1,邻边=2×0.8660≈1.732。若直接写 sin(30) 会得到一个错误结果,务必先转弧度。

例题 2(模拟真题):对数与指数科学计算

题目:输入一个正数 x,依次计算并输出:① 以 10 为底的对数;② 以 2 为底的对数;③ 以 e 为底的指数 eˣ。结果均用 double 输出。

C++
#include <iostream>
#include <cmath>          // 数学库头文件
using namespace std;
int main() {
    double x;
    cin >> x;
    double a = log10(x);   // 以 10 为底:log₁₀(x)
    double b = log2(x);    // 以 2 为底:log₂(x)
    double c = exp(x);     // 以 e 为底的指数:eˣ
    cout << a << " " << b << " " << c << endl;
    return 0;
}
输入 / 输出10 1 3.32193 22026.5
🚫 错误示范 double a = log(x); // 这算的是 ln(x) 自然对数,不是 log₁₀! 题目要求以 10 为底时应写 log10(x)。

🛡️ 避坑总结

  1. 用前必写 #include <cmath>;
  2. 三角函数吃“弧度”,角度要先 × M_PI / 180;
  3. log10 看 10、log2 看 2、log 是 ln,别混;
  4. exp(x) 算 eˣ,sqrt/fabs/pow 处理开方、绝对值、乘方;
  5. 参数与变量统一用 double,保证精度与类型正确。

💡 提示:按 ← → 方向键可在上一 / 下一知识点间快速翻页

GESP 7级 · 学习进度 0/0

📑 本页目录