试卷解析 · 理解每一步
2026-03-Level-3
2026-03-Level-3
试卷解析总览,可直接查看每题答案与解析。
第 1 题(单选题,2 分)
如果字符变量 _1 的值是字符 1,那么 (int) _1 的值是? ()。
正确答案C
解析详情
在 C++ 中,字符变量是以 ASCII 码形式存储的。字符 '1' 的 ASCII 码值是 49。当进行 (int) 强制类型转换时,取出的就是其对应的 ASCII 码数值。
第 2 题(单选题,2 分)
a,b是整型变量,各自有互不相同的初始值。下列程序实现了什么效果()。
a = a ^ b;
b = a ^ b;
a = a ^ b;正确答案B
解析详情
利用异或运算的性质(a^a=0, a^0=a)可以实现不使用临时变量交换两个数。第一步 a=a^b;第二步 b=a^b=(a^b)^b=a;第三步 a=a^b=(a^b)^a=b。最终 a, b 的值互换。
第 3 题(单选题,2 分)
关于下列正确的程序段,说法正确的是()。
char str1[] = "Hello";
char str2[] = {'H', 'e', 'l', 'l', '0'};cout << str1 << endl;
cout << str2 << endl;这段程序将输出不同的结果。正确答案C
解析详情
str1 使用字符串字面量初始化,包含末尾的空字符 '\0',数组长度为 6;str2 显式列出字符初始化,且最后一个字符是 '0'(数字零)而非 'o'(小写字母 o),且没有空字符,长度为 5。两者在长度和内容上均不相等。
第 4 题(单选题,2 分)
关于以下程序段,说法正确的是()。
int x=10;
cout<<(x++) + (++x)<<endl;正确答案B
解析详情
在多数现代 C++ 编译器中,按照从左向右求值:x++ 返回 10,然后 x 变为 11;接着 ++x 将 x 从 11 变为 12 并返回 12。结果为 10 + 12 = 22。尽管在 C++17 之前这是未定义行为,但在该考题语境下通常按此类逻辑计算。
第 5 题(单选题,2 分)
8 位二进制下,十进制数 -15 的补码是()。
正确答案D
解析详情
正数 15 的原码为 00001111。负数 -15 的补码计算方法是:先取反得 11110000,再加 1,得 11110001。即符号位保持 1,数值位按位取反加一。
第 6 题(单选题,2 分)
三进制数 2102 转换成十进制是:()。
正确答案B
解析详情
按权展开计算:2*3^3 + 1*3^2 + 0*3^1 + 2*3^0 = 2*27 + 1*9 + 0 + 2 = 54 + 9 + 2 = 65。因此三进制数 2102 对应的十进制数是 65。
第 7 题(单选题,2 分)
二进制数 10110101 是某数的 8 位补码,该数的十进制是()。
正确答案B
解析详情
补码最高位为 1,表示负数。求原码:补码减 1 得 10110100,取反(符号位除外)得 11001011。数值位 1001011 转换成十进制为 64+8+2+1=75,故结果为 -75。
第 8 题(单选题,2 分)
已知 unsigned char c = 0x0F; (十六进制 0F = 二进制 00001111),执行 c = c << 3; 后,c 的十进制值是:()。
正确答案D
解析详情
0x0F 对应十进制 15。左移 3 位相当于乘以 2 的 3 次方(即 8)。15 * 8 = 120。二进制来看,00001111 左移 3 位变为 01111000,即 64+32+16+8=120。
第 9 题(单选题,2 分)
补码的情况下,关于按位取反运算,用笔计算的情况下,以下说法错误的是:()
正确答案B
解析详情
按位取反公式为 ~x = -(x + 1)。因此 ~0 = -(0 + 1) = -1。选项 B 说 ~0 的结果是 0,显然是错误的。其他选项如 ~5 = -6, ~(-3) = 2 均符合该公式。
第 10 题(单选题,2 分)
执行以下 C++ 代码后,sub 的值是()。
string str = "GESP2026";
string sub = str.substr(4, 2);正确答案A
解析详情
`substr(pos, n)` 函数从索引 `pos` 开始截取长度为 `n` 的子串。"GESP2026" 中索引 4 处的字符是 '2'(G=0, E=1, S=2, P=3, 2=4),截取 2 个字符得到 "20"。
第 11 题(单选题,2 分)
执行以下代码后,输出结果是:()。
int arr[] = {5, 10, 15, 20, 25, 30};
int count = sizeof(arr) / sizeof(arr[0]);
cout << count;正确答案B
解析详情
`sizeof(arr)` 返回整个数组占用的总字节数,`sizeof(arr[0])` 返回单个元素占用的字节数。两者相除即得到数组元素的个数。数组中有 6 个元素,故结果为 6。
第 12 题(单选题,2 分)
执行以下代码后,输出结果是:()。
char s[10] = "abcde";
int a = sizeof(s) / sizeof(s[0]);
int b = strlen(s);
cout << a - b;正确答案B
解析详情
`sizeof(s)` 返回数组定义的总容量大小,即 10 字节。`strlen(s)` 返回字符串的实际长度,不含 '\0',即 "abcde" 的长度 5。因此 a-b = 10 - 5 = 5。
第 13 题(单选题,2 分)
以下问题中,最不适合用枚举法解决的是:()
正确答案C
解析详情
枚举法适用于在有限搜索空间内,通过逐一尝试所有可能情况来验证是否满足特定条件的场景。选项 C 是纯数值累加计算,有明确的求和公式(等差数列求和),不需要枚举验证,最不符合枚举思想。
第 14 题(单选题,2 分)
用枚举法解决“鸡兔同笼问题:头共35个,脚共94只,求鸡和兔的数量”,以下枚举逻辑最合理的是:()
正确答案A
解析详情
已知头共 35 个,则鸡的数量 x 的可能范围是 0 到 35。确定 x 后,兔的数量 y 自动确定为 35-x。只需枚举一个变量即可解决问题,时间复杂度最低。C 选项枚举范围过大且包含无关组合,效率较低。
第 15 题(单选题,2 分)
模拟“字符串加密”:规则为“每个字符 ASCII 码 + 3,若超过 z (122) 则从 a 重新开始”,以下代码中正确的条件判断是:()
for (int i = 0; i < str.length(); i++) {
// 需补充条件:
___
else {
str[i] += 3;
}
}if (str[i] > 122) str[i] = str[i] + 3 - 26;if (str[i] > 122) str[i] = str[i] - 26;if (str[i] + 3 > 122) str[i] = str[i] - 23;if (str[i] + 3 > 'z') str[i] = 'a' + (str[i] + 3 - 'z') - 1;正确答案D
解析详情
根据规则,需判断增加 3 后的字符是否超过 'z'。若超过,需循环回到字母表开头。D 选项 `str[i] + 3 > 'z'` 判断正确,且计算逻辑 `'a' + (位移量) - 1` 正确模拟了环状替换。
判断题
第 1 题(判断题,2 分)
定义 int arr[5] = {1,2,3};,则 arr[3] 的值为 0,arr[5] 是合法下标。
正确答案错误
解析详情
部分初始化数组时,未指定的元素(如 arr[3])会被初始化为 0。但大小为 5 的数组合法下标范围是 0 到 4,arr[5] 属于越界访问,是不合法的。
第 2 题(判断题,2 分)
定义 double arr[10];未手动初始化时,数组中所有元素的默认值为0.0。
正确答案错误
解析详情
在函数内部定义的局部非静态数组,若不进行显式初始化,其内容是未定义的(包含随机垃圾值)。只有全局数组或静态数组才会默认初始化为 0。
第 3 题(判断题,2 分)
定义 int arr[] = {1,2,3};,则 sizeof(arr) 的结果为 12(int 占 4 字节)。
正确答案正确
解析详情
编译器会根据初始化列表确定数组长度为 3。3 个 int 类型的元素共占用 3 * 4 = 12 字节。
第 4 题(判断题,2 分)
下面的流程图是用来求 的和。请判断:这个流程图的逻辑正确还是错误?

正确答案正确
解析详情
流程图通过循环变量从 1 递增到 10,并在循环体中不断将当前值累加到总和变量中,循环条件和更新逻辑准确描述了 1 到 10 的累加过程。
第 5 题(判断题,2 分)
下面流程图的功能是计算 5 对 2 取余数,输出结果为 1。

正确答案正确
解析详情
求余数可以通过重复减法实现(5-2-2=1)。流程图模拟了这种逻辑,在 5 大于等于 2 时不断减 2,最终剩余的值即为余数 1。
第 6 题(判断题,2 分)
已知大写字符 A 的ASCII编码的十六进制表示为 0x41,计算字符 m 的ASCII编码的八进制表示为 155(八进制)。
正确答案正确
解析详情
'A' 是 65 (0x41),则 'Z' 是 90,'a' 是 97,'m' 是第 13 个小写字母,故其 ASCII 码为 97 + 12 = 109。109 转换为八进制:109 ÷ 8 = 13...5,13 ÷ 8 = 1...5,1 ÷ 8 = 0...1,逆序得到 155。结论正确。
第 7 题(判断题,2 分)
在 C++ 位运算中,各种不同的运算符有优先级的区分,使用括号能够解决优先级的问题。
正确答案正确
解析详情
位运算符(如 &、|、^、<<、>>)的优先级各不相同且通常低于算术运算符。在表达式中使用括号可以显式指定运算顺序,避免因优先级记忆不清导致的逻辑错误。
第 8 题(判断题,2 分)
由于在0~255范围内,char 类型和 int 类型可以互换,因此在这里 x 和 y 相等。
char x = '1';
int y = 1;正确答案错误
解析详情
字符变量 x 的值是字符 '1',其数值(ASCII 码)为 49。整型变量 y 的值是数值 1。虽然类型可以隐式转换,但它们的数值不相等。
第 9 题(判断题,2 分)
在C++语言中,表达式 `((0xf0 + 0x15) == 255)` 的值为 true。
正确答案错误
解析详情
在 C++ 中,`0xf0` 等于 240,`0x15` 等于 21,两者相加得到 261。因为 261 不等于 255,所以表达式 `((0xf0 + 0x15) == 255)` 的值为 false。
第 10 题(判断题,2 分)
如果 a 为 int 类型的变量,且 a 的二进制最低位为 0,则表达式 的值为 true。
正确答案正确
解析详情
(a & 3 & 1) 相当于 a & (3 & 1),即 a & 1。由于 a 的二进制最低位为 0,a & 1 的结果必为 0。因此表达式值为 true。