试卷解析 · 理解每一步
2025-06-Level-3
2025-06-Level-3
试卷解析总览,可直接查看每题答案与解析。
第 1 题(单选题,2 分)
8位二进制原码能表示的最小整数是:()
正确答案A
解析详情
8位二进制原码,第1位为符号位,剩余7位为数值位。最大值为 `01111111` (+127),最小值为 `11111111` (-127)。
第 2 题(单选题,2 分)
反码表示中,零的表示形式有:
正确答案B
解析详情
在反码表示中,零有两种形式:正零 `00000000` 和负零 `11111111`。
第 3 题(单选题,2 分)
补码 1011 1011 对应的真值是()
正确答案A
解析详情
补码 `1011 1011` 首位为 1,是负数。转原码:先减 1 得 `1011 1010`,再取反(除符号位)得 `1100 0101`。1000101(2) = 64 + 4 + 1 = 69。故真值为 -69。
第 4 题(单选题,2 分)
若 X 的 8 位补码为 0000 1010,则 X/2 的补码是()。
正确答案A
解析详情
X 的补码为 `0000 1010` (10)。X/2 为 5。5 的补码为 `0000 0101`。对于正数,补码右移高位补 0。
第 5 题(单选题,2 分)
二进制数 1101.101 对应的十进制数是()
正确答案A
解析详情
`1101.101`:整数部分 `1*8 + 1*4 + 0*2 + 1*1 = 13`;小数部分 `1*0.5 + 0*0.25 + 1*0.125 = 0.625`。总和为 13.625。
第 6 题(单选题,2 分)
补码加法中,若符号位无进位而次高位有进位,则说明()
正确答案B
解析详情
补码加法中,符号位无进位而次高位有进位,意味着两个正数相加结果变成了负数,发生了正溢出(上溢)。
第 7 题(单选题,2 分)
八进制数35.6对应的十进制数是()
正确答案A
解析详情
`35.6` (8):整数部分 `3*8 + 5 = 29`;小数部分 `6 * 8^-1 = 6/8 = 0.75`。总和为 29.75。
第 8 题(单选题,2 分)
二进制数 1010 | 1100 的结果是()
正确答案B
解析详情
`1010 | 1100`:对应位进行或运算,1|1=1, 0|1=1, 1|0=1, 0|0=0。结果为 `1110`。
第 9 题(单选题,2 分)
以下哪个位运算可以交换两个变量的值(无需临时变量)()
正确答案A
解析详情
使用三次异或可以交换两个变量的值而不需要临时变量:1. a = a ^ b; 2. b = a ^ b (此时b变为原a); 3. a = a ^ b (此时a变为原b)。
第 10 题(单选题,2 分)
如何正确定义一个长度为5的整型数组()
正确答案D
解析详情
在 C++ 中,定义固定长度数组的标准语法是 `类型 数组名[长度];`。例如 `int array[5];`。选项 C 虽然在某些环境下可行,但不是标准的固定长度数组定义方式。
第 11 题(单选题,2 分)
以下程序使用枚举法(穷举法)求解满足条件的三位数,横线处应该填入的是()
#include <iostream>
using namespace std;
int main() {
int count = 0;
for (int i = 100; i <= 999; i++) {
int a = i / 100;
int c = i % 10;
if (a * a + b * b == c * c) {
count++;
}
}
cout << count << endl;
return 0;
}正确答案B
解析详情
提取三位数的十位数 `b`:`(i / 10) % 10`。先通过除以 10 舍弃个位,再对 10 取模获取当前的末位(即原十位)。
第 12 题(单选题,2 分)
以下程序模拟了一个简单的小球反弹过程,横线处应该填入的是()
#include <iostream>
using namespace std;
int main() {
int height = 10;
int distance = 0;
for (int i = 1; i <= 5; i++) { // 模拟5次落地
height /= 2;
distance += height;
}
cout << distance << endl;
return 0;
}正确答案B
解析详情
模拟小球下落,每次落地后高度减半并累加到总路程。代码中 `height /= 2; distance += height;` 逻辑下,填入 `distance += height;` 符合该模拟题意(尽管物理模型可能有差异)。
第 13 题(单选题,2 分)
C++代码 string s = "GESP考试";,s占据的字节数是()
正确答案D
解析详情
`std::string` 中存储的中文字符占据的字节数取决于环境编码。UTF-8 下一个汉字通常占 3 字节,GBK 下占 2 字节。因此占据的字节数是不确定的。
第 14 题(单选题,2 分)
C++语句 string s="Gesp Test"; 执行s.rfind("e")以后,输出的是()
正确答案C
解析详情
`rfind` 函数从右向左查找字符第一次出现的位置(即最后一次出现的位置)。"Gesp Test" 中 'e' 出现在索引 1 和索引 6。`rfind` 返回 6。
第 15 题(单选题,2 分)
字符串"Gesp考试",字符数是()
正确答案C
解析详情
字符串 "Gesp考试" 由 4 个英文字符 ('G','e','s','p') 和 2 个中文字符 ('考','试') 组成,总字符数为 6。注意这里问的是“字符数”而非“字节数”。
判断题
第 1 题(判断题,2 分)
C++中 string 的 == 运算符比较的是字符串的内存地址,而非内容
正确答案错误
解析详情
在 C++ 中,`std::string` 的 `==` 运算符经过重载,比较的是字符串的内容是否相同,而不是内存地址(C 风格字符串比较地址需用 `==`,比较内容需用 `strcmp`)。
第 2 题(判断题,2 分)
string 的 substr(1, 3) 返回从下标1开始的3个字符的子串。
正确答案正确
解析详情
`substr(pos, len)` 返回从 `pos` 开始长度为 `len` 的子串。`substr(1, 3)` 即返回索引 1 开始的 3 个字符。
第 3 题(判断题,2 分)
x 是浮点数,(x >> 1) 等价于 x / 2
正确答案错误
解析详情
位移运算符 `>>` 和 `<<` 只能应用于整型数据(int, char, long 等),不能应用于浮点数(float, double)。
第 4 题(判断题,2 分)
string("hello") == "hello" 的比较结果为true。
正确答案正确
解析详情
`string("hello")` 创建了一个临时 string 对象,与字符串字面量 "hello" 比较时,会调用重载的 `==` 运算符比较内容。结果为 true。
第 5 题(判断题,2 分)
sort 可以直接用于排序 set 中的元素。
正确答案错误
解析详情
`std::sort` 要求容器支持随机访问迭代器(如 vector, deque)。`std::set` 的元素是有序存储的,且其迭代器是双向迭代器,不支持随机访问,不能使用 `std::sort`。
第 6 题(判断题,2 分)
(x & 1) == 0 可以判断整数 x 是否为偶数。
正确答案正确
解析详情
偶数的二进制最后一位是 0,奇数是 1。`x & 1` 提取最后一位,若结果为 0 则 x 是偶数。
第 7 题(判断题,2 分)
string 的 substr(2, 10) 在字符串长度不足时会抛出异常。
正确答案错误
解析详情
如果 `pos` 在字符串范围内,但 `len` 超过了剩余长度,`substr` 只会返回到字符串结尾的所有字符,而不会抛出异常。只有当 `pos > size()` 时才会抛出 `out_of_range` 异常。
第 8 题(判断题,2 分)
在数学纸面计算中,pow(2, 3) 的计算结果一定是8,但是在C++中,如果遇到数据类型是浮点数,那就不一定正确。
正确答案正确
解析详情
`pow` 函数返回浮点数,且浮点数在计算机中存在精度误差。例如 `pow(2, 3)` 可能会得到 `7.999999`,转为整型时可能变成 7。因此在处理需要精确整数的场合需谨慎。
第 9 题(判断题,2 分)
在C++中,枚举的底层类型可以是非整型(如 float 或 double)。
正确答案错误
解析详情
C++ 中枚举(enum)的底层类型必须是整型(如 char, int, long long)。不能是浮点型。
第 10 题(判断题,2 分)
函数声明 double f(); 返回 int 时,会自动转换为 double
正确答案正确
解析详情
如果函数声明返回 `double`,但内部 `return` 了一个 `int`,编译器会自动执行隐式类型转换,将 `int` 提升为 `double`。