若有变量 int a, float x, y, 且 a=7,x=2.5,y=4.7, 则表达式 x+a%3*(int)(x+y)%2/4 的值大约是( ).
这题全是坑,别急着算。先记住:整数除法直接截断小数,运算顺序里%、*、/同级且从左往右。拿到题先圈出整数部分,把(x+y)强转成int,再按顺序一步步算,最后加回那个float。
学生最容易栽在两个地方:一是以为1/4等于0.25,其实整数除法1/4直接变0;二是把强制类型转换(int)当成四舍五入,7.2变7而不是8。还有人会乱算优先级,把乘法提前或者把取模算后,导致中间结果全错。记住,整数运算一旦出来,后面再参与乘除都是整数,小数部分直接丢光。
x + a % 3 * (int)(x + y) % 2 / 4
已知:a=7(int), x=2.5(float), y=4.7(float)
1. (int)(x+y) = (int)(2.5+4.7) = (int)7.2 = 7(强制类型转换截断小数,不是四舍五入) 2. a % 3 = 7 % 3 = 1 3. 1 * 7 = 7 4. 7 % 2 = 1 5. 1 / 4 = 0(整数除法,结果截断) 6. x + 0 = 2.5 + 0.0 = 2.5
% * / 优先级相同且左结合。整数除法结果截断为整数。
结论:约2.500000,答案选A。
这道题是典型的"混合类型陷阱"。命题人故意把float和int混在一起,让你以为(x+y)强转后是7.2,然后后面乘除还能保留小数。实际上,一旦(int)(x+y)把7.2变成7,整个表达式就全变成整数运算了。后面的1/4就是整数除法,直接变0。很多人会错选B(2.75),就是因为他们以为1/4=0.25,忘了整数除法的特性。还有人会错选C(3.5),可能是把(x+y)算成8,或者把a%3算错。
这个考点在题库共考过261题,覆盖9个考试级别。从历年分布看,2007年4题、2008年1题、2009年4题、2010年5题、2014年1题、2019年3题、2020年2题、2021年1题、2022年1题、2023年91题、2024年41题、2025年61题、2026年14题。分赛事来看,GESP一级72题、二级70题、三级47题、四级37题、CSP入门级12题、NOIP普及组初赛9题、CSP提高级7题、NOIP提高组初赛6题、GESP五级1题。
基于数据,2023-2025年这类混合类型陷阱题明显增多,尤其是GESP一级、二级和NOIP提高组初赛。未来可能继续考"int强转+整数除法"的组合,或者把float赋值给int变量后再运算。暂无足够依据预测具体年份,但这类题在初赛和GESP低级别中几乎年年都有。