下面 C++ 代码执行后,其输出是( )。
int cnt = 0;
for (int i = 0; i < 5; i++)
for (int j = i; j < 4; j++)
cnt += 1;
cout << cnt;答案B。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。
整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。
【考点】循环控制|嵌套循环
1. 考纲定位:GESP二级"算法基础"模块,考查循环次数统计。命题人专盯"嵌套循环边界易错"这一硬伤——外层for(i<5)内层for(j<i; j<4)极易被误算成j<i到j<5,导致答案偏大。此题卡住绝大多数考生对循环上限的敏感度,尤其是容易把内层j<i误看成j<i到j<4共5次。
2. 解题思维:先抓外层i取值0,1,2,3,4共5次;内层j从i到3(含3)共4‑i次。累加得(4‑0)+(4‑1)+(4‑2)+(4‑3)+(4‑4)=10。通法:对嵌套循环,逐层写出取值范围→计算每层循环次数→累加,或找规律直接求和。本题可化简为等差数列求和:首项4,末项0,项数5,和=5×4/2=10。
3. 陷阱拆解:A项9是内层j<i到j<4少算一次;C项14把内层上限错成j<5,多计两次;D项20是外层i到5,少算一次外层,却把内层上限又当成5,双重错误。最阴险细节是j<i与j<4同时出现,边界条件"j<4"常被忽略,很多人会下意识认为j<i到j<4共5次,导致多算。
4. 反命题思维:若把外层改成i<6,内层同上,答案变成11;把内层改成j<i; j<5,答案变成12。刷到类似题先问"循环上限到底是多少,边界是开还是闭",然后按步骤逐层计数。