GESP 二级 · GESP 202412 C++ 二级 第 19 题

判断题 · 答案 A · 考点:函数

← 整套速查表 GESP 二级 全部真题

题目

如果 C++ 表达式 int(sqrt(N))*int(sqrt(N)) == N 的值为 True,则说明 $N$ 为完全平方数,如 4、9、25 等。( )

答案:A

考点

函数

解题思维

答案A。根据C++基础知识分析判断。

常见错误

注意题目中的限定词。不确定时用代入法或排除法。

详细解析(节选)

【考点】数据类型转换|sqrt 函数|完全平方数

解题思维:看到题先想"完全平方数的本质特征是什么"——N 的平方根必须是整数。C++ 中 int(sqrt(N)) 对浮点结果做向下取整,若 N 是完全平方数,sqrt(N) 恰好是整数,向下取整后值不变,平方还原为 N,等式成立;若 N 不是完全平方数,sqrt(N) 为带小数部分,向下取整后变小,平方必小于 N,等式不成立。通法:判断正整数是否为完全平方数,用 int(sqrt(N))*int(sqrt(N)) == N 是最简洁方式,也可用二分查找整数平方根或 pow 配合精度判断。

陷阱拆解:A 选项看似绝对,实则精准。命题人挖了三个坑:一是"int 转换"——很多考生只知 sqrt,不知返回的是 double,必须显式转换才能用整数运算;二是"浮点精度"——大数时 sqrt 可能有误差,但二级题目 N 范围通常保证精度足够;三是"语义陷阱"——题目没说明 N 为正整数,但完全平方数定义隐含 N≥0,这是数学常识而非代码细节。如果你只背"完全平方数=√N 是整数",却忽略 C++ 类型系统,就会在类似题里栽跟头。

反命题思维:若把表达式改成 int(pow(N, 1.0/3.0)) 判断完全立方数,答案不变;若改成 N % k == 0 判断整除,性质完全不同。这类题的核心永远是"数学概念→程序表达"的转换,刷到类似题先问自己:命题人是在考数据类型,还是在考数学本质?别把简单题复杂化,也别把复杂题简单化。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断