GESP 二级 · GESP 202403 C++ 二级 第 23 题

判断题 · 答案 B · 考点:数学

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

题目

如果变量 $a$ 的值使得 C++ 表达式 sqrt(a) == abs(a),则 $a$ 的值为 $0$。( )

答案:B

考点

数学

解题思维

别急着代入0,先想代数方程√a=|a|的解集。两边平方得a²−a=0,解出a=0或1。再看C++里sqrt返回double、abs返回int,比较时int会提升为double,1.0==1完全合法。所以a不必非要是0,命题是假的。

常见错误

最容易错在把√a=|a|当成只有a=0才成立,或者误以为abs(a)一定等于a,从而漏掉a=1这个完美平方数。还有学生看到sqrt和abs不同名就以为类型不同就不能比较,忘了C++里int提升为double的规则。这类题命题人就是爱用'=='伪装代数方程,专打'直觉'。

详细解析(节选)

这道题考什么

考查的是数学函数性质与C++类型转换、浮点数精确比较的结合。命题人想让你判断‘如果sqrt(a)==abs(a),则a一定为0’这个结论对不对。

概念与命题视角

先理清数学:√a=|a|两边平方得a²−a=0,解得a=0或1,且定义域a≥0,故两解均合法。再看C++:sqrt返回double,abs返回int,比较时int提升为double;当a=1时,sqrt(1)=1.0,abs(1)=1,1.0==1为真;a=0同理。结论:a不必为0,1同样满足条件,原命题为假。

思考心法

拿到题先问:‘命题人是否在用浮点比较伪装代数方程?’别只背‘√x=x解为0’,要验证平方后的解集。代入法或排除法都是好招,但代入0后还得问‘还有没有其他数?’

避坑

A项‘必须为0’错在忽略了a=1这个完美平方数;命题人用‘=='伪装成代数方程,实则考浮点存储与类型提升;绝对值陷阱在于学生易默认abs(a)=a,从而误判√a=|a|的解集。若只背‘√x=x解为0’而不验证,必掉坑。

考频与趋势

数学类题在题库共考过36题,覆盖2个考试级别(2020-2026);逐年分布:2020年1题、2024年1题、2026年13题、null年21题;分赛事:CSP入门级29题、CSP提高级7题。这类‘数学+类型’复合陷阱近年在CSP入门级高频出现,2026年单年13题说明命题人正加大数学与C++类型转换的交叉考查力度。

预测

基于数据趋势,未来GESP二级或CSP入门级仍可能出类似‘sqrt(a)==a’或‘sqrt(a)==abs(a)’的判断题,甚至扩展到pow(a,2)==a等变体,继续考浮点比较与代数解集的匹配。暂无足够依据预测具体年份或题型细节,但‘数学函数+类型提升’这一组合大概率持续受热。

同考点真题

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