题目
下面 C++ 代码执行后的输出是( )。
int N = 10;
while(N){
N -= 1;
if(N%3 == 0)
cout << N << "#";
}
答案:B
考点
循环控制
解题思维
这道题考的是while循环的执行流程与取模运算。拿到题先别急着看选项,盯着while(N)和N-=1的顺序:循环条件先判断,再进体,所以N=0时还会多跑一次,且此时N%3==0会触发输出。
常见错误
最容易掉进‘循环在N=1时停止’的直觉坑里,漏掉末尾的0#;或者把减法顺序搞反,以为先输出再减一,导致选项C那种把10也输出的错误;还有人会纠结while(N)和while(N>0)的区别,其实这题里N先减1再判条件,所以N=0时条件仍为真,这是命题人专门挖的‘条件检测时机’坑。
详细解析(节选)
考点定位
GESP一级 C++ 循环结构与条件判断。命题人卡住的是‘while条件检测时机’——90%考生误以为循环在 N=1 时停止,却忽略了 N 先减 1 再判条件,导致漏掉 0#。
逐行追踪
从 main 开始,记录每个变量的值变化。初始 N=10。
- 第1轮:判断 while(10) 真,N-=1 → N=9;9%3==0,输出 9#
- 第2轮:while(9) 真,N=8;8%3!=0,无输出
- 第3轮:while(8) 真,N=7;7%3!=0
- 第4轮:while(7) 真,N=6;6%3==0,输出 6#
- 第5轮:while(6) 真,N=5;5%3!=0
- 第6轮:while(5) 真,N=4;4%3!=0
- 第7轮:while(4) 真,N=3;3%3==0,输出 3#
- 第8轮:while(3) 真,N=2;2%3!=0
- 第9轮:while(2) 真,N=1;1%3!=0
- 第10轮:while(1) 真,N=0;0%3==0,输出 0#
- 第11轮:while(0) 假,循环结束。
因此输出顺序为 9#6#3#0#,对应选项 B。
同考点真题
- 第 16 题· CSP 2019 提高级第一轮 · 答案 BAD看解析 →
- 第 19 题· CSP 2019 提高级第一轮 · 答案 CDB看解析 →
- 第 14 题· GESP 一级样题(C++ 组) · 答案 B看解析 →
- 第 14 题· GESP 二级样题(C++ 组) · 答案 D看解析 →
- 第 23 题· GESP 二级样题(C++ 组) · 答案 A看解析 →