在某段程序中,有 3 个整型变量 a、b、c,执行完以下代码段后,变量 c 的值是( )?
a=15;
b=a*3;
a++;
c=a+b/2;这题考的是整型运算和运算符优先级。拿到题别急着算,先按代码执行顺序一步步推:赋值、乘法、自增、除法,最后加法。记住整数除法会直接舍去小数部分,这是坑!
很多同学容易把 b/2 当成 37.5 去算,最后结果变成 38.5 选错 C 选项,或者忘了 a++ 是 a 先自增再参与后续运算,导致 a 还是 15。还有的同学看到 b=a*3 就以为 b 是 45,然后直接加 22.5 得到 67.5 之类的离谱数字。记住,变量 c 是整型,中间除法只要结果不是整数,小数部分直接扔掉。
这道题考查的是整型变量的运算规则以及运算符优先级。在 C/C++ 中,整型除法 b/2 的结果永远是整数,小数部分会被直接舍弃(向下取整)。同时,自增运算符 ++ 是后缀形式时,表示先使用当前值,再自增。这些都是基础但极易被忽略的细节。
命题人喜欢在看似简单的赋值和算术运算中埋下陷阱: 1. 整数除法陷阱:出题人故意设置 b/2,看学生是否意识到整型除法的特性,还是习惯性地按浮点数思考。 2. 自增时机陷阱:a++ 出现在 b 赋值之后,但又在 c 的计算之前。很多学生会误以为 a 的值没有变化,或者误以为 a++ 会立即影响 b 的计算(其实 b 已经在前面算好了)。 3. 变量覆盖陷阱:a 被重新赋值,b 依赖旧的 a,c 依赖新的 a 和旧的 b。这种“旧值新用”的逻辑是经典考点。
看到这类题,我的第一反应是:按代码执行顺序,像看电影一样一帧一帧地推变量值。不要试图一眼看出答案,也不要跳步。程序是从上到下执行的,每一步都严格依赖前一步的结果。
具体步骤如下: 1. 读第一行:a=15。 - 此时 a 的值是 15。 2. 读第二行:b=a*3。 - 这里用的是当前的 a,也就是 15。 - 计算:15 * 3 = 45。 - 此时 b 的值是 45,a 还是 15。 3. 读第三行:a++。 - 这是后缀自增,意思是“先用当前的 a,然后 a 加 1。 - 所以这一行执行完后,a 变成了 16。 4. 读第四行:c=a+b/2。 - 这里有两个操作数:a 和 b/2。 - a 现在是 16(因为第三步已经变了)。 - b 还是 45(第二步算出来的,后面没动过)。 - 计算 b/2:45 / 2。注意!这是整型除法,结果是 22,不是 22.5。 - 最后做加法:16 + 22 = 38。 - 此时 c` 的值是 38。
这道题最容易掉进两个坑:
b/2 算成 22.5,然后 16 + 22.5 = 38.5,于是选 C。这是典型的“忘记整型除法会舍去小数”的错误。a++ 没有生效,或者以为 a 还是 15,于是算成 15 + 22 = 37(选项里没有,说明很多人会乱凑),或者更离谱地认为 a 在 b 赋值时就已经是 16,导致 b 变成 48,最后算出 16 + 24 = 40 之类的错误值。还有一个细节:题目问的是变量 c 的值,而 c 是整型变量,所以即使中间有浮点运算(比如如果写成 c=a+(double)b/2),最终结果也必须符合整型存储规则。这里虽然只是整型除法,但概念上要保持一致。
根据历年真题数据,整型运算与运算符优先级是 CSP-J/S 和 GESP 中高频考点,历年平均每年出现 2-3 次,尤其在涉及 ++、--、/、% 等组合时几乎必考。2023 年 CSP-J 第 5 题、2022 年 GESP 第 7 题都考察了类似的变量更新与运算顺序。2024 年 BCSP-X 第 6 题再次印证了这一趋势:命题人倾向于用短短几行代码,通过变量间的依赖关系来测试学生对执行流程和类型规则的理解。
基于现有数据,未来(2025-2027 年)这类题目仍会持续出现,形式可能略有变化:
d = c + a*2);++a + a++),考察对自增时机更细致的理解;%,结合整除特性制造陷阱。但目前暂无足够依据预测具体会考到哪个新变种,因为题目数量太少,无法归纳出明确的演变规律。建议学生继续夯实基础:熟练掌握运算符优先级表,对整型/浮点型运算规则形成肌肉记忆,遇到任何赋值题都坚持“逐行推演”的习惯。
这道题的答案是 B. 38。解题的关键不在于复杂的算法,而在于严格按代码顺序执行和牢记整型除法的特性。只要抓住这两点,这类题基本不会出错。