GESP 二级 · GESP 202406 C++ 二级 第 15 题

选择题 · 答案 D

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

题目

在下面的 C++ 代码中,$N$ 必须是小于 $10$ 大于 $1$ 的整数,$M$ 为正整数(大于 $0$)。如果 $M$ 被 $N$ 整除则 $M$ 为幸运数,如果 $M$ 中含有 $N$ 且能被 $N$ 整除,则为超级幸运数,否则不是幸运数。程序用于判断 $M$ 是否为幸运数或超级幸运数或非幸运数。阅读下面代码,有关说法正确的是( )。

int N, M;
cout << "请输入幸运数字:";
cin >> N;
cout << "请输入正整数:";
cin >> M;

bool Lucky;
if (M % N == 0)
    Lucky = true;
else
    Lucky = false;
while (M){
    if (M % 10 == N && Lucky){
        printf("%d是%d的超级幸运数!", M, N);
        break;
    }
    M /= 10;
}
if (M == 0)
    if (Lucky)
        printf("%d是%d的幸运数!", M, N);
    else
        printf("%d非%d的幸运数!", M, N);
答案:D

解题思维

答案D。追踪程序输出时注意整数除法截断和循环条件的边界值。变量初始值对结果影响很大。

常见错误

整数除法截断容易忽略!if(n%i==0)中%是取余运算不是除法。

详细解析(节选)

【考点】整除判断|循环遍历与变量修改|条件分支逻辑

1. 🎯 考纲定位(考点定位)

本题考查 GESP 二级 编程基础与算法 模块中的整除判断、循环遍历、条件分支逻辑及变量修改的综合运用。命题人卡住的是那些只背“幸运数”定义、却看不懂代码执行流的考生——他们往往在判断“超级幸运数”时忽略循环对 M 的修改,导致输出结果与预期不符。

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