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

选择题 · 答案 D

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

题目

假设下面 C++ 代码执行过程中仅输入正负整数或 0,有关说法错误的是( )。

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

解题思维

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

常见错误

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

详细解析(节选)

【考点】while循环条件判断|cin输入流处理|布尔值与整数转换

核心在于while(N)条件判断:非0整数视为真,0视为假。每次循环先累加再读入新值,因此只要连续输入非0数就会持续执行。终止条件是遇到第一个0,此时while(N)变为假,循环退出。这类题通用思路是“模拟输入流”:把cin>>N看成状态机,while(N)就是循环入口条件,每次迭代都要更新状态。

选项A、B、C均正确:输入0直接跳出循环;非0数连续累加;首入0则Sum仍为0。选项D是典型偷换条件:原while(N)只会在遇到0时停止,绝非死循环;改成while(N==0)后循环条件永远为假(除非N初始就是0),程序连一次累加都不会执行。命题人利用初学者对“非0即真”规则的机械记忆,诱导考生误判循环终止条件。

若把while(N)改为while(N!=0),逻辑完全一致,因为非0整数在C++中真值相同;若改成while(N==0)则循环条件永远为假(除非N初始就是0),程序连一次累加都不会执行;若把while(N)改成for(int i=0;i<N;i++)则循环次数由输入值决定,而非遇到0停止。刷到类似题先问:循环到底在什么时候退出?条件表达式是“真则进”还是“假则进”?

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