表达式 sqrt(9) 的计算结果为 3,且结果类型为 int 类型。( )
这道题看似在考 sqrt 函数,实则是在考 C++ 的类型系统。拿到题先别急着算数,要盯着'类型'二字。sqrt 是 cmath 里的数学函数,参数是 double,返回值也是 double。整数 9 进去会自动提升成 9.0,出来就是 3.0。题目说结果是 int 类型,这就露馅了。
学生最容易掉进'值对就全对'的陷阱,看到 sqrt(9)=3 就以为正确,完全忽略了后半句'类型为 int'。另一个坑是混淆了'隐式转换'和'类型保持',觉得整数算出来还是整数。还有同学会纠结于'整除'概念,把 sqrt 当成整除运算符,导致对返回值类型产生误解。
考纲定位:GESP 二级 C++ 模块第 4 单元'函数与重载'。命题人利用初学者对数学函数返回值的直觉,掩盖了 C++ 函数重载的本质——sqrt 在 cmath.h 中定义为 double 版本,默认参数类型为 double,整数参数会自动提升为浮点型参与运算,返回结果必然是浮点数。
概念厘清:C++ 里有个重要规则叫'隐式类型提升'。当你把一个整数传给 double 类型的参数时,它不会保持整数身份,而是悄悄变成浮点数(比如 9 变成 9.0)。反过来,sqrt 函数既然声明为返回 double,那它吐出来的结果不管数值是多少,类型永远都是 double。所以 sqrt(9) 的结果是 3.0,类型是 double。
解题思维:看到 sqrt 直接定位标准库——cmath 中 sqrt 是浮点函数,接受 double 参数返回 double 值。整数 9 作为参数会被隐式转换为 double(9.0),函数执行后返回 3.0 而非整数 3。题目声称'结果为 3 且类型为 int'存在两处错误:值相等但类型不同,double 3.0 与 int 3 在 C++ 中是两个完全不同的类型对象。因此原命题为假,选 B。
陷阱拆解:A 选项利用'整除即整数'的思维惯性,但 sqrt 并非整除运算符而是数学开方函数,返回值类型由函数签名决定而非参数类型决定。题目阴险之处在于同时给出值与类型两个条件,考生若只验算 sqrt(9)=3 就选 A,完全忽略了类型判断——这正是 C++ 类型系统的核心考点。如果你只背结论、不理解函数重载机制,就会掉进这个陷阱。
反命题思维:若将 sqrt(9) 改为 sqrt(9.0),类型判断不变仍为 false;若改为(int)sqrt(9),则强制转换后类型为 int,命题变为真。刷到类似题时,先问自己'这个函数的返回类型由什么决定?'——函数定义而非参数类型。
考频趋势:'运算符与表达式'考点在题库共考过 261 题,覆盖 9 个考试级别(2007-2026)。从逐年分布看,2023 年 91 题、2024 年 41 题、2025 年 61 题、2026 年 14 题,呈现高位震荡后小幅回落的趋势;GESP 二级该考点考了 70 题,占比近四分之一,说明二级阶段对表达式类型的考察非常密集。'基本数据类型'考点共 267 题,GESP 二级考了 48 题,也印证了二级对类型概念的重视。
预测:基于数据,GESP 二级未来仍会高频考察'函数返回值类型'与'隐式转换'的结合,特别是涉及 sqrt、pow 等数学库函数与类型判断的题目。命题人可能会继续用'值对但类型错'的陷阱来区分真正理解类型系统的学生。暂无足够依据预测具体年份的突变,但可预见该考点在二级试卷中将持续保持较高权重。