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

判断题 · 答案 A · 考点:循环控制

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

题目

下面 C++ 代码能实现正整数各位数字之和。( )

int N, Sum = 0;
cin >> N;
while (N){
    Sum += N % 10;
    N /= 10;
}
cout << Sum;
答案:A

考点

循环控制

解题思维

答案A。while循环先判断条件再执行,可能一次都不执行。do-while至少执行一次。

常见错误

while先判断后执行,可能0次。do-while先执行后判断,至少1次。

详细解析(节选)

【考点】循环控制|取模运算|数字拆分

🎯 考纲定位:GESP二级编程基础模块(循环结构与取模运算)。命题人把"各位数字之和"这种数学概念转化为循环求和,卡住的是考生对while条件判断和取余逻辑的混淆——很多初学者会写成while(N!=0)却忘记更新N,或者把N%10误当作字符串处理。

🧠 解题思维:核心是"每次取个位(N%10)累加,再去掉个位(N/=10)"。while(N)对正整数等价于while(N!=0),循环终止条件天然满足。这类题的通法是:遇到"数字拆分/累加"类问题,优先用取模和整除构造循环,避免字符串转换带来的额外开销。

🪤 陷阱拆解:选项B是"错误"陷阱。命题人故意把代码写得简洁,让考生误以为"循环条件while(N)对正整数不安全"或"N/=10会丢失数据",其实while(N)对int类型正数完全合法,N/=10正是数字拆分的关键。如果你只背"循环要用!=0"的结论,就会掉进这个"条件写法"的陷阱。

🔄 反命题思维:若把while(N)改为while(N>0),代码逻辑不变,答案仍为A;若把N/=10改为N=N%10,则陷入死循环,答案变B。刷到类似题先问自己:命题人想考我"循环终止条件"还是"数字拆分步骤"?

同考点真题

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