在下列代码的横线处填写( ),可以使得输出是 “147”。
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 8; i++)
if (________) // 在此处填入代码
cout << i;
return 0;
}看到输出 147 别急着想奇数,先算数差:4-1=3,7-4=3,步长是 3 且余 1。代入选项验证,只有 B 的取余条件能精准命中这三个数,其他要么多了要么语法不对。
最容易掉进陷阱 A,把'奇数'和'余 1'混为一谈,以为只要是奇数就能输出,结果会多出 3 和 5。还有同学会选 C,觉得赋值能跳过数字,其实 i=i+3 会直接改变循环变量,导致后续逻辑崩坏甚至死循环。D 选项更是典型语法坑,表达式不能直接当 if 条件用。一定要用代入法,把每个选项填进去跑一遍,看输出是不是严格的 147,这才是最稳妥的解题姿势。
这题属于 GESP 一级「循环控制」与「运算符」的综合考查,核心是读懂循环变量变化规律,并用取余运算判断特定序列。
命题人专门针对死记硬背的弱点下手。看到输出 147,很多考生下意识地想'奇数',因为 1、3、5、7 都是奇数,于是顺手选了 A。但题目要求的是 1、4、7 这三个数,它们虽然都是奇数,但更重要的是它们构成公差为 3 的等差数列,且对 3 取余都等于 1。命题人就是利用这种'似对非对'的干扰项,让只背结论不思考规律的学生栽跟头。
拿到这种完善程序题,第一步永远是'代入验证'。把四个选项分别填进横线,看代码跑出来的结果是不是目标输出 147。这是最笨但最有效的方法,尤其对一级考生来说,逻辑推理还没完全建立,暴力试错反而更靠谱。
**选项 A:i % 2 == 1 这是判断奇数的经典写法。循环 i 从 1 到 8,奇数有 1、3、5、7。如果选 A,输出会变成 1357,多了 3 和 5,显然不对。
**选项 B:i % 3 == 1 这个是本题的正解。我们快速算一下:1%3=1(成立),2%3=2(不成立),3%3=0(不成立),4%3=1(成立),5%3=2(不成立),6%3=0(不成立),7%3=1(成立),8%3=2(不成立)。正好命中 1、4、7,输出就是 147,完美匹配。
**选项 C:i = i + 3 这个选项很有迷惑性。它看起来像是在'跳过'某些数,但注意它是赋值语句,不是条件判断。if 后面必须跟布尔表达式,赋值语句本身没有真假之分(除非在 C++ 里把赋值结果当布尔值,但这里 i 是 int 类型,非零为真,逻辑完全混乱)。而且就算语法允许,i=i+3 会直接修改循环变量,导致循环次数突变,后续逻辑彻底崩坏。
**选项 D:i + 3 这是典型的语法陷阱。if 条件必须是布尔表达式,i+3 是个整数表达式,不是布尔值。虽然在某些语言里非零整数当真,但在 C++ 里这样写虽然编译可能通过,但逻辑上毫无意义,输出结果也无法控制。
从题库数据看,'基础语法'是绝对高频考点,2023 年就有 287 题,2024 年 413 题,2025 年 401 题,说明这类题目年年必考。'运算符与表达式'也是重头戏,2023 年 91 题,2024 年 41 题,2025 年 61 题,取余运算 i%3==k 这种形式在各级别中反复出现,GESP 一级就考了 72 题。'循环控制'虽然总数不多(5 题),但 2023 年考了 2 题,2024 年 1 题,明显有上升趋势,说明命题人正在加强循环与条件判断的结合考查。
基于近年数据,GESP 一级和二级在 2026 年已经分别考了 109 题和 79 题,且 2025 年基础语法和运算符考量巨大,可以预测未来这类'完善程序'题目会继续增加,但难度不会突变,仍然侧重于基础运算和简单循环控制。如果目标是 2,5,8 这种序列,条件就会变成 i%3==2,命题人可能会在后续年份出类似的变式题,考察学生对取余规律的迁移能力。暂无足够依据预测更具体的题型变化。