下面的 C++ 代码执行后其输出是( )。
cnt = 0;
for (int i = -10; i < 10; i++)
for (int j = 0; j < i; j++)
cnt += 1;
cout << cnt;答案D。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。
整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。
【考点】嵌套循环|循环条件依赖|累加计数
【考纲定位】本题考查GESP二级"循环结构"与"变量初始化"考点,属于二级核心内容。嵌套循环的边界判断与累加计数是二级高频考点,命题人专挖"内层循环条件依赖外层变量"这一盲区,卡住大量考生对循环执行次数的直观判断。
【解题思维】看到题先抓两个关键:①内层循环条件j<i意味着当i≤0时内层一次也不进;②外层i从-10到9遍历,仅当i>0时内层才累加。计算过程:i=1时j加1次,i=2时j加2次……i=9时j加9次,求和1+2+…+9=45。此类题通法是"分层枚举+条件剪枝",先判断内层何时进入,再按执行次数累加,切忌盲目认为每一轮外层都会触发内层。
【陷阱拆解】A项145误把内层次数当成"i+1"或从1累加到10,B项125是外层i从0到11的错误计数,C项55恰好是1+2+…+10,命题人用i起始值-10制造"内层永远进"的错觉;最阴险处在外层i≤0时内层循环条件j<i直接不成立,这是"条件依赖"的语义陷阱,只背结论不看执行流必错。
【反命题思维】把i起始值改成0或1,答案不变仍为45;若把内层条件改为j<i+1,则累加到10得55,命题人正是用负数区间制造"内层不执行"的假象。刷到类似题先问自己:内层循环条件是否真的在每次外层迭代都成立?