GESP 二级 · GESP 202512 C++ 二级 第 24 题

判断题 · 答案 A

← 整套速查表 GESP 二级 全部真题

题目

下列 C++ 代码段执行后将输出 55。( )

int cnt = 0;
for (i = 0; i < 10; i++)
    for (j = i; j < 10; j++)
        cnt += 1;
cout << cnt;
答案:A

解题思维

答案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。刷到类似题,先问自己"命题人想考我什么"——是考察对循环边界的敏感度,还是等差数列求和的熟练度。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断