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

选择题 · 答案 D

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

题目

执行下面的 C++ 代码,有关说法正确的是( )【质数是指仅能被 1 和它本身整除的正整数】。

int N;
cin >> N;
bool Flag = true;
for (int i = 2; i < N; i++){
    if (i * i > N)
        break;
    if (N % i == 0){
        Flag = false;
        break;
    }
}
if (Flag)
    cout << N << "是质数" << endl;
else
    cout << N << "不是质数" << endl;
答案:D

解题思维

答案D。if-else语句中else与最近的if配对。花括号可以改变匹配关系。

常见错误

if(a=b)合法但往往不是本意!它执行赋值后判断b的值是否为0。

详细解析(节选)

【考点】质数定义与判断|循环优化|边界条件处理

考纲定位:本题考查 GESP 二级"算法基础"模块中质数判断的经典陷阱。命题人卡住的是考生对"质数必须大于1"这一数学定义的机械记忆——代码默认Flag=true,对N=1或负数时循环根本不执行,却仍判定为质数。

解题思维:解题链:先看循环条件i<N,当N=1时i=2直接跳出循环;再看终止条件i*i>N,对N=2,3成立;再看取余判断N%i==0,对N=4成立。通法:任何质数判断代码必须显式处理N<2的边界,否则1会被误判为质数。

陷阱拆解:A错在默认Flag=true,N=1时循环不执行却输出"是质数";B错在负数时循环不执行仍输出"是质数";C错在N=0时同样被误判。D将Flag初始化为N>=2?true:false,确保0、1、负数直接判定非质数,再对≥2的数执行质数判断,覆盖所有整数。

反命题思维:命题人若把Flag改为N>=2?true:false,题目就变成考"质数判断的鲁棒性"而非单纯算法。刷到类似题先问:输入0或负数时程序会怎样?这才是真正区分记忆与理解的点。

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