如果 a 和 b 为 int 类型的变量,且值分别为 7 和 2,则下列哪个表达式的计算结果不是 3.5?( )
这题考的是整数除法与浮点运算的优先级和类型提升规则。拿到题先别急着算,盯着除法号两边的操作数看:只要其中一个是浮点数,结果就是小数;如果两边都是整数,C++会直接截断小数部分。
最容易掉进A选项的坑:看到0.0就以为整个表达式变成浮点了,其实0.0在加法那一侧,加法优先级低于除法,a/b先执行,7/2按整数除法得3,最后3+0.0才是3.0。另外,有些同学会误以为只要表达式里出现小数常量,所有运算都自动转浮点,忽略了运算顺序。
【考点】整数除法|运算符优先级|类型提升
这道题的核心就一句话:C++里整数除法会直接丢弃小数部分,只有当除法运算中至少有一个操作数是浮点类型时,才会进行浮点除法。
命题人在这儿挖坑特别典型:把0.0放在加法一侧,利用学生"看到小数就以为全变浮点"的心理。其实我们要看的是真正参与除法的那两个数。
逐项推演: A. 0.0 + a / b:加法优先级低于除法,先算a/b。a=7, b=2,全是int,整数除法7/2=3(不是3.5)。最后3+0.0=3.0。结果不是3.5。 B. (a + 0.0) / b:括号强制先算a+0.0,7+0.0=7.0(浮点)。再除以b=2,浮点除法7.0/2=3.5。 C. (0.0 + a) / b:同理,0.0+a=7.0,再除以2得3.5。 D. a / (0.0 + b):0.0+b=2.0,a除以2.0,浮点除法7/2.0=3.5。
思考心法:遇到除法题,先别管加减乘除混在一起,直接锁定除法号。问自己:"这两个数在相除那一刻是什么类型?"如果都是int,答案一定截断;只要有一个是double或float,答案就是小数。这是最高效的判断路径。
避坑提醒:A选项最阴险,0.0看起来像浮点,但它没参与除法运算。很多学生只背"浮点运算结果带小数",却不理解运算顺序,就会误选A以外的选项。记住:类型提升只看参与该运算的操作数,不是看整个表达式里有没有小数。
考频与趋势:根据题库数据,"基本数据类型"考点在2023年考了63题,2024年34题,2025年26题,2026年119题,呈现后期爆发式增长趋势;"运算符与表达式"在2023年考了91题,2024年41题,2025年61题,说明这类混合运算题在GESP一级中是高频必考点。结合历年分布,这类题未来仍会持续出现,且命题人可能会通过更隐蔽的括号嵌套或更多小数常量来增加迷惑性。
预测:基于2026年基本数据类型考题数激增至119题的趋势,以及运算符考题在2025年的回升,未来GESP一级中涉及"整数除法截断"和"浮点类型提升"的题目不仅不会减少,反而可能以"哪个表达式结果不是X"的反向提问形式持续高频出现。暂无足够依据预测具体年份的考题数量,但方向明确:这类基础陷阱题仍是压轴常客。
综上,正确答案是A。