GESP 2024 年 3 月 C++ 二级判断题 1-10 解析
第 1 题
题目: 输出是 28.5。 答案: 错误
这里卡在类型转换。int(s) 会直接把小数部分截掉,不会四舍五入。
int(18.5) // 结果为 18
所以 18 + 10 得到的是 28,不是 28.5。
第 2 题
题目: Xyz、xYz、xyZ 是不同变量? 答案: 正确
C++ 对大小写很敏感。变量名只要字母大小写不同,就算不同标识符。
abc != Abc != aBc
这个规则很基础,但考试里经常拿来绕人。
第 3 题
代码: cout << (8 < 9 < 10)
题目: 输出 true?
答案: 错误
< 是从左到右结合的。先算 8 < 9,结果是 true,在表达式里会转成 1,再算 1 < 10,结果还是 true。
默认情况下,cout 打印布尔值不是字符串 true,而是 1 或 0。如果想直接输出文字形式,要打开 boolalpha。
#include <iostream>
using namespace std;
int main() {
cout << boolalpha;
cout << (8 < 9 < 10);
return 0;
}
这段代码输出 true。不用的时候,可以用 noboolalpha 关掉。
第 4 题
代码: for(i=0; i<100; i+=2);
题目: i 的范围是 0 到 99?
答案: 错误
这段循环每次加 2,实际取值是 0, 2, 4, ..., 98。它不会走到 99,更谈不上覆盖 0 到 99。
顺手一提,末尾那个分号也很容易被忽略,真写代码时要小心。
第 5 题
题目: 输出都为 2022? 答案: 错误
这里混淆了数字和字符。
float(2022)的结果是2022.0'2022'不是合法的字符常量
C++ 里的字符常量只能放单个字符,比如 '2',不能写成多个字符。
第 6 题
已知: A = 65
表达式: int('C') + abs(-5.8)
题目: 结果 72.8?
答案: 正确
'C' 的 ASCII 码是 67,所以 int('C') 的值是 67。
int('C') // 值为 67
abs(-5.8) 返回 5.8。两者相加就是 67 + 5.8 = 72.8。
第 7 题
代码: bool(-1)
题目: 返回 false?
答案: 错误
C++ 里布尔转换很直接:0 是 false,非 0 是 true。
bool(-1) // 结果为 true
所以 -1 会转成 true,不是 false。
第 8 题
条件: sqrt(a) == abs(a)
题目: 那么 a=0?
答案: 错误
a 不止可以是 0。拿 a = 1 就能满足:
sqrt(1) = 1
abs(1) = 1
等式成立,所以这个条件不能推出 a 只能是 0。
第 9 题
题目: WIFI 盒子有路由功能? 答案: 正确
WIFI 盒子本质上就是一类小型路由设备,常见功能包括分配 IP 地址、连接网络。叫法不同,核心作用差不多。
第 10 题
题目: 所有 for 循环都能改成 while? 答案: 正确
for 和 while 的控制逻辑本来就能互相改写。for 更适合把初始化、条件、递增放在一起看,while 则更松一点。
// for 循环
for(i=0; i<5; i++)
// 等价于 while 循环
i=0;
while(i<5) { ... i++; }
真要改写,语义上通常没问题,区别主要是代码风格和可读性。


