执行如下 C++ 代码,其输出是( )。
int tot, i;
tot = 0;
for (i = 0; i < 10; i++)
if (i)
tot += 1;
cout << tot;看到循环先数迭代次数,看到 if(i) 立刻意识到这是"非零即真"的布尔判断而非数值比较。核心是统计 i 在 0~9 范围内有多少个非零值。这类题通法:先确定循环边界(含不含),再逐值判断条件真假,最后累加计数。
A 选项是典型"零值陷阱"——只注意到 i=0 时条件不成立,却忘了循环从 0 开始;B 选项 8 是计数偏差,可能误以为 i 从 1 开始或漏数了某个值;D 选项 10 是最危险的错误,把 if(i) 当成无条件执行。命题人故意用 if(i) 而非 if(i==1) 来测试考生对 C++ 布尔转换规则的掌握程度。
本题考查 GESP 二级大纲中"循环结构"与"条件表达式"两个核心考点。命题人卡住的是考生对 C++ 布尔判断机制的模糊认知——很多人看到 if(i) 下意识想成"i 等于 1",却忘了非零整数在 C++ 中直接视为 true。
完整思考链: 1. 循环变量 i 从 0 开始,条件 i<10,所以 i 取值 0,1,2,3,4,5,6,7,8,9,共 10 次迭代 2. if(i) 等价于 if(i!=0),即当 i 非零时执行 tot+=1 3. 在 0~9 这 10 个值中,只有 i=0 时条件为假,其余 9 个值条件为真 4. tot 初始为 0,执行 9 次累加后结果为 9 5. cout 输出 tot 即输出 9