如果 a、b、c 和 d 都是 int 类型的变量,则下列哪个表达式能够正确计算它们的平均值?
这题考整数除法会截断小数,看到四个 int 相加除以 4,只要记住‘除数写成 4.0 就变浮点运算’,就能避开陷阱选对。
学生会死记‘平均数公式’直接选 A,完全忽略 C++ 里 int/int 结果仍是 int 且会向下取整的特性。比如 a=1,b=2,c=3,d=4,和是 10,A 算出来是 2 而不是 2.5,这在二级 C++ 里是高频错题点。
考查 C++ 算术运算符中整数除法的截断特性,以及整型与浮点型在运算时的隐式转换规则。命题人故意用四个 int 变量凑出一个看似完美的公式,实则挖了个关于“除数类型”的坑。
在 C++ 里,除法 / 的行为取决于操作数的类型:
10 / 4 等于 2,不是 2.5。10 / 4.0 等于 2.5。这里的关键不是“会不会溢出”,而是“会不会丢小数”。
题目说 a、b、c、d 都是 int,求平均值。正确答案是 C:(a + b + c + d) / 4.0。命题人设计的陷阱就是 A:(a + b + c + d) / 4。很多考生看到“平均数”就条件反射选公式,完全没意识到在 C++ 里 int / int 会截断。B 和 D 则是偷换运算符(% 是求余),属于干扰项,用来筛掉不仔细看符号的考生。
1. 四个 int 相加,结果仍是 int,不会变浮点。 2. 接下来要除以 4,如果除数写 4,类型还是 int,整数除法一上来就把小数砍了。 3. 要想保留小数,必须让除数变成浮点。在 C++ 里,只要除数写成 4.0(或 4.、4.f),编译器就会把整个表达式转为浮点运算。 4. 所以正确写法是 (a + b + c + d) / 4.0。
假设 a=1, b=2, c=3, d=4:
% 迷惑,求余跟除法不是一回事。static_cast<double>(sum) / 4.0,但本题里 4.0 已经足够触发浮点运算。从数据看,2023 年“运算符与表达式”考到 91 题,2025 年 61 题,2026 年 14 题,整体仍高频;“基本数据类型”在 2026 年暴增到 119 题,说明这两年命题人明显加大了对类型转换、隐式提升这类细节的考查力度。结合历年趋势,未来 GESP 二级、三级、四级继续出现“整数除法截断”或“整型转浮点”的陷阱题概率很高,很可能换场景(比如求比例、分段计费、平均得分)来考同样的知识点。暂无足够依据预测具体年份或题型变化。