下面 C++ 代码用于求正整数各位数字之和,横线处不应填入代码是( )。
int tnt, N;
printf("请输入正整数:");
cin >> N;
tnt = 0;
while (N != 0){
________________
N /= 10;
}
cout << tnt;答案D。循环补全要分析循环变量的初始值、条件和更新方式,确保能产生目标输出。
代入法验证时注意选项之间的细微差别。循环条件中的<和<=可能导致完全不同的结果。
【考点】取余运算|累加赋值|循环控制
1. 🎯 考纲定位 GESP二级 C++ 第 4 章「循环结构」第 2 节「循环体内的累加」——题目卡住的是「赋值与累加」的区分:学生背过「+=」等于「= +」,却误以为「= N % 10」也能累加,这是二级学生最易混淆的符号语义。
2. 🧠 解题思维 看到循环 while (N != 0),立刻想到「逐位提取」:N % 10 取末位,N /= 10 去掉末位。横线必须在取位之后、除十位之前,且必须把取到的位「加进」tnt。因此正确写法只能是 tnt = tnt + N % 10 或其等价形式;任何把 tnt 直接赋为 N % 10 的写法都会丢掉之前的累加值。
3. 🪤 陷阱拆解
tnt = N % 10:命题人把「赋值」伪装成「累加」,利用学生「+= 和 = + 一样」的直觉,却忘了「=」会覆盖旧值。这是最阴险的——代码跑完只输出最后一位数字,与题意完全背离。tnt = N % 10 + tnt:语法完全合法,只是把加法顺序写反了,学生若只记结论易误选。+= 是简写,本质与 A 相同。最关键的细节:题目问「不应填入」,很多学生看到 D 项能「算出个位」就以为它能用,忽略了「累加」这一核心要求。
4. 🔄 反命题思维 若把 D 项改成 tnt = tnt + N % 10,题目就变成「哪个选项能正确求和」,答案变成 A/B/C 中的一个;若把循环条件改成 N > 0,对正整数无影响,但加上 N < 0 就会让循环永不执行,tnt 恒为 0——命题人随时可以换条件考察边界。刷到这类「求各位数字之和」的题,先问自己:「我需要的是取余 + 累加,还是单纯取余?」