下面 4 个选项中,与下面 C++ 代码段具有相同效果的是( )。
i = 0;
while (i < 5) {
cout << i;
i += 1;
}A.
for (i = 0; i < 5; i++)
cout << i;B.
for (i = 1; i < 5; i++)
cout << i;C.
for (i = 0; i < 6; i++)
cout << i;D.
for (i = 1; i < 6; i++)
cout << i;答案A。考点: 循环结构——for/while的执行与嵌套。
关键提醒:C++中的^是异或运算符,不是乘方!2^5=7而非32。这是最高频的错误。
【考点】循环控制|for与while等价性|输出顺序
1. 考纲定位:GESP二级循环模块,命题人专盯"把while转for"的转换盲区——多数考生只会改循环体,却忽略初始化值与终止条件决定打印集合。
2. 解题思维:while循环先打印再自增,i从0到4共5次输出0 1 2 3 4;for循环等价条件是初值、条件、步进三者完全对应。A选项初值0、条件<5、步进++,完全匹配;B初值1漏掉0;C终止条件<6多打印5;D既缺0又多5。
3. 陷阱拆解:B的陷阱是"循环肯定包含0"的绝对化错觉;C利用"少看一步自增"的疏忽,把<6当成范围扩大;D则双重陷阱——同时错判初值与终值。题干"相同效果"要求输出序列完全一致,任何数值偏差都是错。
4. 反命题思维:若把while改成先自增再打印,答案会全变;若把条件改为≤4,则A也错。刷到此类题先问"代码实际输出了哪些数?"别被选项数字迷惑。