下面 C++ 代码执行后输出是( )。
int num = 0;
while (num <= 5) {
num += 1;
if (num % 3)
continue;
printf("%d#", num);
}
if (num > 5)
printf("%d", num);答案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),则会多一个"#"。这提示复习时要区分循环终止条件与循环外单独执行语句。