如下 C++ 代码执行后输出是 1 2 3 4 5 6 7 8 9 10 11 5 6 7 8 9 10 11 5 6 7 8 9 10 11 5 6 7 8 9 10 11 5 6 7 。横线处应该先后依次填入的运算符是( )。
int num = 1;
for (int i = 0; i < 35; i++) {
printf("%d ", num);
if (num _______ 10)
num _______ 2;
else
num _______ 1;
}答案A。先分析已有代码的功能,确定输出目标,再反推横线处需要的代码。可用代入法验证。
将每个选项代入横线处验证是最可靠的方法。注意代码的完整逻辑和输出格式。
【考点】关系运算符|整数除法|循环控制
解题思维:输出呈现 1-11→5-11→5-11→5-7 的循环。11 是第一次>10 的时刻,若用 /= 2 则 11/2=5,正好对应后续起始值;若用 >= 会在 10 时触发,而 10 是合法打印值,与题意矛盾。每次循环 num 递增 1,重置后从 5 开始再累加,直到再次>10 才重置,因此形成 5-11 的循环段;总共 35 次迭代恰好覆盖最后的 5-7。
陷阱拆解:选项 B 的 >= 会提前在 10 时重置,导致 10 被吞掉;C 的 %= 取余得 1,与输出 5 不符;D 的 =+ 是非法语法。题目故意用 /= 制造“除以 2 得 5"的直觉陷阱,而真正关键的是运算符优先级与循环终止条件。
反命题思维:若把 > 改成 >=,输出会变成 1-10→1-11→1-10→1-7;若把 /= 改成 %=,输出会变成 1-11→1-11→1-11→1-7。这类题的核心是“边界条件决定行为”,刷到同结构循环题时,先问“重置发生在哪一步”,而不是死记“除 2 得 5"。