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

选择题 · 答案 B

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

题目

下面 C++ 代码执行后输出是( )。

int num = 0;
while (num <= 5) {
    num += 1;
    if (num % 3)
        continue;
    printf("%d#", num);
}
if (num > 5)
    printf("%d", num);
答案:B

解题思维

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

常见错误

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

详细解析(节选)

【考点】while循环|if条件表达式|printf输出格式

本题考查C++二级循环结构基础,核心考点为while循环、if条件判断及printf格式。命题人刻意用if (num % 3)替代if (num % 3 == 0),利用C++布尔表达式非零即真的特性,卡住死记硬背的学生。

执行流程为:num从0递增到6,每次先自增再判断。num为3和6时num%3==0不进入continue,触发printf("%d#",num)输出"3#"和"6#"。循环结束后num=6>5,再执行printf("%d",num)输出"6"。整体输出"3#6#6"。

易错点1:if (num % 3)在C++中非零即真,学生常误以为要显式写==0;易错点2:continue跳过printf,导致3和6只输出"#"后缀;易错点3:循环外if (num>5)用printf("%d",num),无"#",这直接对应选项B而非C。

若将循环条件改为num <= 6,则循环多一次num=7,最终输出会变成"3#5#6#7#";若将循环外if改为printf("%d#",num),则会多一个"#"。这提示复习时要区分循环终止条件与循环外单独执行语句。

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