执行以下 C++ 语言程序后,输出结果是( )。
#include <iostream>
using namespace std;
int main() {
int n = 17;
bool isprime = true;
for (int i = 2; i <= n; i++)
if (n % i == 0)
isprime = false;
cout << isprime << endl;
return 0;
}
这题表面考质数判断,实则考循环边界与布尔输出机制。拿到题先看n=17,循环条件i<=n会让i走到17,此时17%17==0必然触发,isprime被覆写为false。最后cout输出bool时,C++默认转为整数0,所以选C。
最容易掉进'17是质数'的直觉坑,直接选true或1;其次会混淆cout对bool的输出规则,以为输出字符串'false';还有少数人会纠结循环该写到i<n还是i<=n,没意识到题目故意写成i<=n就是为了在自身位置截断。这些坑都源于对C++布尔输出机制和循环边界细节的忽视。
【考点】循环控制|布尔类型输出|质数判断逻辑
GESP二级'算法基础'模块,重点考察循环边界对逻辑判断的影响,以及C++布尔类型在输出时的默认转换规则。命题人卡住的是考生对'cout << bool'行为的盲区——绝大多数人认为输出的是'true'或'false'字符串,却不知C++默认将bool转为整数输出(0/1)。这道题把这两个坑叠在一起:循环条件写成i<=n,让17被自身整除,isprime被覆写为false,最后cout输出0。