GESP 二级 · GESP 202409 C++ 二级 第 22 题

判断题 · 答案 B · 考点:循环结构

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

题目

下面 C++ 代码能求整数 $N$ 和 $M$ 之间所有整数之和,包含 $N$ 和 $M$。( )

int N, M, Sum;

cin >> N >> M;

if (N > M){
    int tmp = N;
    N = M, M = tmp;
}

for (int i = N; i < M+1; i++)
    Sum += i;

cout << Sum;
答案:B

考点

循环结构

解题思维

答案B。for循环每次迭代后执行更新表达式(如i++)。循环体执行次数由初始值、条件和更新共同决定。

常见错误

循环变量的初值、终值和步长共同决定循环次数。for(i=0;i<n;i++)执行n次。

详细解析(节选)

【考点】输入与输出|选择结构|循环结构|变量交换

🎯 考纲定位 “输入与输出”“选择结构”“循环结构”“变量交换”均属于 GESP 二级必考基础模块。命题人故意留一个“看似正确实则脆弱”的缺口,卡住的是考生对“输入合法性校验”和“未初始化变量使用”的盲区。

🧠 解题思维 看到题先确认范围是否被正确交换,再检查循环是否真的覆盖到 M。关键观察:for (int i = N; i < M+1; i++) 确实包含 M,但前提是 N 和 M 都有确定值。若输入非法,N、M 未初始化,Swap 交换的是垃圾值,随后循环用垃圾值累加,Sum 更是未初始化就输出。因此正确链应为:校验输入 → 交换确保 N ≤ M → 累加 → 输出。

🪤 陷阱拆解

🔄 反命题思维 若把 cin 换成 scanf("%d%d",&N,&M) 且加 if (N > M) swap(N,M); else if (N < M) swap(N,M); 甚至再补 if (N > M) swap(N,M);,答案会变吗?不会,因为真正的考点是“未初始化”和“输入校验”,不是交换语法。刷到类似题,先问自己:有没有可能输入不合法?有没有可能变量没初始化就用?这才是命题人想让我警惕的。

同考点真题

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