有关下面 C++ 代码的说法,错误的是( )。
int tnt = 0;
for (int i = 1; i < 10; i += 2) // L1
tnt += i; // L2
cout << tnt;答案B。for循环先判断条件再执行循环体——可能一次都不执行。for(;;)是无限循环,三部分均可省略。
for循环体可能一次都不执行!这是和while循环一样的"先判断后执行"机制。
【考点】循环边界|累加器语义|赋值运算符
🎯 考纲定位:GESP 一级“循环控制”考点,命题人用“改起始值/改边界”卡住学生“只记结论不验算”的弱点——以为 i=0 不影响和,却忽略循环体仍会执行,且步长固定为 2,导致偶数被计入。
🧠 解题思维:原循环 i∈{1,3,5,7,9},和=25;若 i=0 则 i∈{0,2,4,6,8},和=20。关键观察:循环变量集由初值与步长共同决定,和随之变化,故 B 错误。
🪤 陷阱拆解:A 改 i<10→i<11,步长仍 2,循环集仍{1,3,5,7,9},和不变,真;C、D 考察+=与等价赋值,均真。命题人利用“0 不贡献”的直觉,却忘了循环条件仍判定 i=0 时进入。
🔄 反命题思维:若把步长改为 i+=1,循环集变为{0,1,2,…,9},和=45,答案全变。刷到类似题先问“改条件后迭代集如何变”。