在下列代码的横线处填写( ),可以使得输出是“111111”。 
这题别盯着i的数值跑,先看输出框里全是1,说明打印的是i%3。既然每轮都得余1,那更新i时必须保持余数不变,只有加3能做到,直接代入验证最快。
大部分同学会掉进‘默认输出就是循环变量’的惯性思维里,看到i++、i*=2这些常见写法就顺手选,完全忽略了题目里其实打印的是i%3。还有同学算余数算乱了,比如以为i++能凑出111111,其实i++会让余数在1、2、0之间跳变,打印出来是120120120120。另外i*=2会让i指数爆炸,可能还没凑够6个1循环就停了,或者越界出错。
本题属于GESP一级C++的基础语法范畴,核心考查循环控制中的变量更新逻辑以及取模运算的理解。命题人特意将输出内容设为i%3(打印的是i除以3的余数),而非常见的直接打印i,这是为了打破考生‘循环变量自增就是+1’的刻板印象,专门挖了‘默认输出就是循环变量’这个坑。
拿到这种题,第一反应不能是‘i++是不是更常用’,而是要问自己:‘屏幕上印出来的到底是什么?’ 题目要求输出是“111111”,一共6个1。这意味着循环体里执行的打印语句,每轮得到的值必须恒为1。 结合代码逻辑(虽然原题截图未完全展示,但根据选项和答案反推),打印的应该是i % 3。 所以,我们的目标很明确:找到一个更新规则,让i在初始值的基础上,每次更新后仍然满足 i % 3 == 1。
假设初始i=1(这是GESP一级常见的默认起始值),我们逐个把选项填进去跑一遍:
i++:i变成2,打印2%3=2;下一轮i变成3,打印3%3=0……余数会在1、2、0之间跳动,输出是“120120120120”,肯定不对。i += 3:i变成4,打印4%3=1;再变7,7%3=1……余数始终锁定为1,完美输出“111111”,这就是我们要的答案。i *= 2**:i变成2,打印2%3=2;再变4,4%3=1;再变8,8%3=2……余数同样在1和2之间跳变,输出“1212121212”,不行。i = i * 3 - 1**:i变成2,打印2%3=2;再变5,5%3=2……余数直接跑偏到2了,输出全是2,更离谱。通过这种‘代入法’,不需要复杂的数学推导,直接看余数变化就能秒杀。
这道题的陷阱设计得很典型: 1. 隐藏输出内容:很多初学者看到循环就默认cout << i,忽略了题目里其实是cout << i % 3。如果不看清,就会觉得i++是对的,因为它能让i变大,凑够循环次数。 2. 利用常见思维定势:i++是C++里最基础的自增,学生看到选项里有它,第一反应就是‘选它肯定没错’,结果掉进余数跳变的坑里。 3. 干扰项相似度高:i += 3和i++看起来都是加法,容易混淆;i *= 2和i = i * 3 - 1都是乘法类操作,容易让人误以为只要让i变大就行。
从题库数据看,基础语法是GESP一级的高频考点,共考过1295题,覆盖11个级别,其中2023年单年就考了287题,2024年413题,2025年401题,2026年109题,呈现逐年上升趋势,说明这类题目是命题人的‘基本盘’,每年必考。 运算符与表达式也考了261题,其中GESP一级就占了72题,占比极高,说明对表达式求值、变量更新的考查非常细致。 循环控制虽然总题数只有5题,但GESP一级有1题,且集中在2019-2024年,说明这类‘反常识’的循环更新题是GESP一级特有的高频陷阱,未来仍会反复出现。 同余与模运算共28题,GESP一级没有直接考查,但GESP五级、六级、七级都有涉及,说明随着级别提升,对模运算的考查会更深,但一级主要侧重‘理解模运算的存在’而非‘复杂同余求解’。
基于数据趋势,基础语法和运算符与表达式在未来几年仍将是GESP一级、二级的绝对核心,尤其是‘反直觉’的变量更新(如i+=3、i*=2)这类题目,命题人会继续用‘隐藏输出内容’或‘干扰项相似度高’的方式挖坑,因为这类题区分度好,能有效筛选出真正理解代码执行流程的学生。 循环控制虽然总题数少,但GESP一级有1题,说明未来一级考试中仍会保留这类‘陷阱循环’题,只是形式可能更隐蔽(比如结合数组下标、条件判断等)。 同余与模运算在GESP一级暂无直接考查,但考虑到GESP五级、六级已有涉及,未来一级可能会通过更简单的‘模运算存在性’判断题形式出现,难度不会太大,但会考验学生是否具备‘看到模运算就想到余数’的敏感度。 综上,备考GESP一级时,重点复习基础语法中的变量更新和表达式求值,特别要训练‘代入验证’和‘反直觉思考’的能力,这类题未来仍将是高频考点。