GESP C++ 2 级 · 知识点

常用数学函数

GESP C++ 二级要求会使用 cmath 中的绝对值、平方根等函数,以及 max、min 这类比较函数,理解它们的参数与返回值类型。除了记住函数名,更要理解参数类型与返回类型对结果的影响。

对应知识域:常用数学函数(绝对值、平方根、max、min)相关真题 4 套

本页为本站原创整理,例题与解析均由本站编写,不取自任何题库原题;考试范围以 CCF 官方公布为准,本平台不是 GESP 官方平台。

考纲要求

  • 掌握 abs、fabs、sqrt、pow 等函数的用途,知道使用前需要包含 cmath 头文件。
  • 会使用 max 与 min 比较两个数的大小,理解它们返回的是较大或较小的那个值。
  • 理解 sqrt 接受浮点参数并返回浮点数,传入整型时会先被转换成 double。
  • 能把数学函数组合进表达式,例如用 sqrt(a*a + b*b) 求两点之间的距离。

典型题型

  • 给出表达式,要求写出调用函数后的结果。
  • 用 max 或 min 求三个数中的最大值、最小值。
  • 用 sqrt 判断一个数是否为完全平方数或素数。

常见错误

  • 忘记包含 cmath 头文件,或者把 sqrt 写成 sqr、把 abs 的返回值类型记错。
  • 用 sqrt 的结果直接和整数比较时忽略精度误差,判断相等应比较差值是否足够小。
  • 把 max(a, b) 写成 max(a; b),或者只传入一个参数。
  • 以为 abs 能正确处理浮点数。整型的 abs 会返回整数,浮点绝对值应使用 fabs 或 std::abs 的浮点重载。

深入理解

cmath 里函数的返回值类型

这些函数都声明在 <cmath> 里(abs 的整数版本在 <cstdlib>,但现代编译器包含 <cmath> 后也能用 std::abs)。最需要记的是返回类型:

  • abs(x) / fabs(x):求绝对值,前者多用于整数,后者用于浮点数。
  • sqrt(x):求平方根,永远返回 double,即使传入 4 也返回 4.0。
  • pow(a, b):求 a 的 b 次方,返回 double,例如 pow(2, 10) 得 1024.0。

返回 double 意味着结果可以直接参与浮点运算,但赋给整数变量时小数部分会被截掉:int r = sqrt(10); 得到 3,因为 √10 ≈ 3.16,截断后是 3。想四舍五入得写成 (int)(sqrt(10) + 0.5)。

max 和 min 要求两边同类型

max(a, b) 返回较大的那个,min(a, b) 返回较小的那个,两者都不需要额外头文件(在 <algorithm>,多数环境已间接包含)。但它们是模板函数,两个参数必须是同一类型:max(3, 4.5) 会编译报错,而 max(3.0, 4.5) 正常。混类型时先手动转换,例如 max((double)3, 4.5)。

求三个数的最大值可以嵌套:max(a, max(b, c)),这是很常见的写法,比写三层 if 简洁得多。

浮点数不能用 == 比较

浮点数在内存中是近似存储,0.1 + 0.2 并不精确等于 0.3,直接写 a == b 可能得到 false。标准做法是比较差值:

if (fabs(a - b) < 1e-6) { /* 认为相等 */ }

判断完全平方数也属于同一类问题。稳妥写法是先开方再转整型、再平方回去比对:

int r = (int)(sqrt(n) + 0.5);
if (r * r == n) cout << "yes";

加 0.5 是为了修正浮点误差,例如 sqrt(25) 可能算出 4.9999999,不加 0.5 会截断成 4 而误判。

自编例题

用 sqrt 判断完全平方数

输入整数 n,判断它是不是完全平方数,即存在整数 k 使得 k×k 等于 n。

int k = (int)(sqrt(n) + 0.5);
if (k * k == n) cout << "yes" << endl;
else cout << "no" << endl;

sqrt(n) 返回浮点结果,直接转 int 会截断。由于浮点运算存在精度误差,sqrt(16) 有可能得到略小于 4 的数,截断后变成 3。加上 0.5 再转 int 相当于四舍五入,能得到正确的整数平方根,再用 k 乘 k 与 n 比较即可。这类题的关键是:浮点结果不要直接判断相等,要么先修正误差,要么改用整数方式验证。

相关真题

这块内容在整条路线里的位置:GESP C++ 2 级备考路径。

READY TO START

开始练习

先做一套本级别测评,报告会指出哪些知识点需要重点补;再回到本页对照考纲要求逐条核对,把不确定的条目记下来集中练。

常见问题

abs 和 fabs 有什么区别?

abs 用于整数求绝对值,fabs 用于浮点数求绝对值。对于浮点数应使用 fabs,避免小数部分被截断。

sqrt 返回什么类型?

sqrt 返回 double。传入整数时会先转换成 double,返回结果也是浮点数,需要整数时再显式转换。

max 和 min 能比较三个数吗?

它们只接受两个参数。求三个数的最大值可以写成 max(a, max(b, c)),嵌套调用即可。

本级别其他知识点

官方依据