下列 C++ 代码段执行后将输出 55。( )
int cnt = 0;
for (i = 0; i < 10; i++)
for (j = i; j < 10; j++)
cnt += 1;
cout << cnt;答案A。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。
整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。
【考点】循环嵌套|执行次数统计|等差数列求和
考纲定位:GESP二级"基础算法"模块,循环控制与计数是核心技能。命题人专盯"嵌套循环执行次数"这一薄弱点——多数考生只会数外层循环次数,完全忽略内层循环随外层变量变化的动态范围,导致把10×10=100当成答案。该题是二级C++循环控制部分的经典题型,重点检验学生对嵌套循环执行次数的敏感度。
解题思维:看到双重循环先锁定内层循环的起止条件。外层i从0到9,内层j从i到9,因此第i轮内层执行次数为10-i。累加得到10+9+8+…+1=55。这类题通法是:固定外层变量,写出内层循环的迭代次数表达式,再对表达式求和,本质是等差数列求和。
陷阱拆解:选项B的错误设计源于三种常见误区——(1)只数外层循环次数(误以为内层每次都跑10次);(2)把内层循环起点当成0(误算为100);(3)混淆循环变量作用域(代码中i、j未声明,编译必错,但题目默认已定义)。最阴险的是第2点,因为学生容易把"j<10"当成"j从0到9",忽略j=i的起始条件。
反命题思维:若把内层改为j=0,cnt将变成100;若把外层改成i<11,cnt变成66;若内层改成j=i+1,cnt变成45。刷到类似题,先问自己"命题人想考我什么"——是考察对循环边界的敏感度,还是等差数列求和的熟练度。