下面 C++ 代码执行后的输出是?( )
int n,a,m,i;
n=3, a = 5;
m = (a - 1) * 2;
for (i=0; i<n-1; i++)
m = (m - 1) * 2;
cout << m;先算初始值 m=8,再数循环次数:i 从 0 到 n-1=2,共 3 次迭代,每次执行 m=(m-1)*2,逐次模拟即可。
最容易栽跟头的是把循环次数数错。题目里 n=3,循环条件是 i<n-1,也就是 i<2,i 会取 0、1、2 这三个值,所以循环体实际执行了 3 次。很多考生看到 n=3 就下意识以为只跑 2 次,或者把条件看成 i<n,导致算出 14。还有一种陷阱是把乘法顺序搞反,以为先减 1 再乘 2 只算一次,忽略了每次迭代后 m 的值会更新,下一次要用新的 m 再减 1 再乘 2。
【考点】循环结构|变量赋值|算术运算
这道题考查的是最基础的循环执行次数与变量迭代更新。命题人喜欢用这种“看似简单、实则容易数错次数”的题来卡住刚入门的同学——很多人看到 n=3 就以为循环跑两次,或者把 for 条件看错,结果整道大题全错。
先算初始值:m = (5 - 1) × 2 = 8。这是循环前的状态,对应选项 A,但题目显然要我们继续往下算。
再看循环:for (i=0; i<n-1; i++),n=3,所以 i 从 0 开始,条件是 i < 2,i 会取 0、1、2 这三个值,循环体执行 3 次。每次执行 m = (m - 1) * 2,注意这里的 m 是上一次的结果,不是固定的 8,必须逐次更新。
逐次模拟:
循环结束,输出 50,对应选项 D。
易错点详解: 1. 循环次数数错:把 i<n-1 看成 i<n,以为只跑两次,得到 14(选项 B);或者把 n=3 直接当成循环次数,忽略条件里的减 1,得到 50 但理由不对(选项 D 对结果,但很多人是蒙的)。命题人特意把 n 写成 3 而不是 4,就是想看你是否真的读懂了 i<n-1 这个条件。 2. 更新规则理解错:以为 m 只减 1 再乘 2 一次,或者把乘法顺序搞反,导致算出 8(选项 A)或奇怪的中间值。 3. 忽略整数运算:本题全是整数运算,没有除法截断,但很多考生习惯性地想“会不会有取整问题”,反而把简单问题复杂化。
命题视角:这类题在 GESP 二级里非常典型,它不考复杂算法,只考“读懂题目、数清次数、按步骤算”。命题人喜欢把变量名用 m、a、n 这种简单符号,条件里埋一个 n-1,让粗心的人直接套 n 作为次数,结果全错。同时,循环体里用前一次结果再更新,考察你是否真的会模拟迭代,而不是背公式。
思考心法:拿到这种题,先别急着写代码或套模板。第一步,把初始值算出来;第二步,把循环条件翻译成“执行几次”;第三步,用草稿纸逐次写出来,每次更新后的值记清楚;第四步,检查有没有整数除法、取模等陷阱。本题没有陷阱,纯靠细心数次数和模拟。
考频与趋势:从题库数据看,“循环结构”一共考过 609 题,覆盖 12 个级别。逐年分布中,2023 年 77 题、2024 年 128 题、2025 年 158 题、2026 年 161 题,呈现逐年上升趋势,说明近年越来越重视对循环执行次数的精准把握。分赛事中,GESP 二级独占 172 题,远高于其他级别,可见二级是循环类题目的重灾区。结合 2024 年 GESP 二级共 413 题的总量,这类“数次数 + 迭代更新”的题在二级里占比很高,几乎每份试卷都会出现。
预测:基于 2023-2026 年循环结构考频持续攀升(77→128→158→161),且 GESP 二级在循环类题目中占比最高,未来两年(2026-2027)二级考试中,循环次数判断与变量迭代更新的题目仍将是高频考点,命题人可能会继续用“n-1”“i<n-1”这类隐蔽条件来挖坑,甚至把循环体改成更复杂的算术表达式(如 m = (m-1)*2+1),但核心仍是“数清次数、逐次模拟”。暂无足够依据预测具体年份的题型变化,但可以肯定的是,只要循环结构考频还在涨,这类题就不会降温。
综上,正确答案是 D(50)。解题关键就是:别被 n=3 迷惑,仔细数 i<n-1 的迭代次数,然后老老实实模拟三次更新。