GESP 二级 · GESP 202506 C++ 二级 第 13 题

选择题 · 答案 D · 考点:循环结构

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

题目

下面 C++ 代码用于判断一个大于 $0$ 的正整数是几位数,横线处应填入代码先后是( )。

int N, cnt;
cout << "请输入大于0的正整数:";
cin >> N;

cnt = 0;
while (______){
    cnt += 1;
    ________;
}
cout << cnt;

A.

N > 1
N = N / 10

B.

N > 1
N /= 10

C.

N == 0
N /= 10

D.

N > 0
N /= 10
答案:D

考点

循环结构

解题思维

答案D。循环补全要分析循环变量的初始值、条件和更新方式,确保能产生目标输出。

常见错误

代入法验证时注意选项之间的细微差别。循环条件中的<和<=可能导致完全不同的结果。

详细解析(节选)

【考点】循环结构|整数除法|条件判断

1. 考纲定位:GESP二级C++「基础语法与算法」模块的循环控制与整数运算。命题人想卡住只会背模板的考生,因为很多人会误选A或B,把循环条件写成N>1,导致当N=1时循环不执行,cnt=0,错误。这道题是循环终止条件的经典测试,正确答案必须用N>0。

2. 解题思维:看到题先想:目标是统计位数,需要不断去掉最后一位数字,直到N变成0。关键观察:每次去掉最后一位用N/=10;循环继续的条件是N还没有减到0,所以是N>0。通法:对于任何「统计数字位数」或「逐位处理正整数」的问题,循环条件都是N>0,循环体是N/=10,计数器加一。注意顺序:先cnt+=1再N/=10,否则最后会被多算一位。

3. 陷阱拆解:选项A:把条件写成N>1,当N=1时循环不执行,cnt=0,错误。选项B:条件同样是N>1,只是写法不同,但逻辑错误一样。选项C:条件N==0会让循环永远不执行,因为初始N>0,不满足条件。选项D:唯一正确,条件N>0且用N/=10。最阴险的细节:很多学生会把「直到N变成0」理解为「直到N变成1」,从而选A,这就是命题人设的坑。

4. 反命题思维:如果把题目改成「统计负数的位数」或「统计0的位数」,答案会完全不同,循环条件要调整。例如负数需要先取绝对值,再循环N>0;零需要单独判断。提醒:刷到类似题,先问自己「命题人想考我什么」,别只看表面。

同考点真题

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