试卷解析 · 理解每一步
2025-12-Level-3
2025-12-Level-3
试卷解析总览,可直接查看每题答案与解析。
第 1 题(单选题,2 分)
请将二进制数,转换为等值的10进制数()
正确答案B
解析详情
二进制小数按位展开即可:
(1101.101)_2 = 1×2^3 + 1×2^2 + 0×2^1 + 1×2^0 + 1×2^-1 + 0×2^-2 + 1×2^-3。
整数部分是 8 + 4 + 1 = 13,小数部分是 1/2 + 1/8 = 0.625,所以结果是 13.625,选 B。
第 2 题(单选题,2 分)
以下关于标准 C++ 一维数组的描述,哪一项是错误的?()
正确答案C
解析详情
标准 C++ 中,普通一维数组的长度需要在编译期确定,不能等到运行时再决定。
A、B、D 都是数组的基本性质,只有 C 说法错误,所以选 C。
第 3 题(单选题,2 分)
下列代码段执行后,变量 sum 的值是()
{
int sum = 0;
for (int i = 1; i <= 10; i++) {
if (i % 3 == 8>>2)
continue;
sum += i;
}
}正确答案D
解析详情
代码中 `8>>2` 等于 2,所以条件是 `i % 3 == 2`,满足时跳过(continue)。i 从 1 到 10 中,i%3==2 的有 2, 5, 8。跳过后累加 1+3+4+6+7+9+10 = 40,选 D。
第 4 题(单选题,2 分)
执行以下程序段,输出值是()
int x = 5;
if (x == 3 >> 2) x = 8 >> 3;
cout << x << endl;正确答案B
解析详情
表达式 `3 >> 2` 的结果是 0,所以条件判断等价于 `x == 0`。
初始时 `x = 5`,条件不成立,因此不会执行赋值语句,最终输出仍为 5,选 B。
第 5 题(单选题,2 分)
已知字符串 ,下列程序运行的结果是()
cout << (int)(s.length() | 3) << endl;正确答案B
解析详情
字符串 `C++ Programming` 的长度是 15。
再看 `15 | 3`:15 的二进制是 1111,3 的二进制是 0011,按位或之后仍是 1111,也就是 15,所以输出 15,选 B。
第 6 题(单选题,2 分)
以下代码是一个程序的部分代码,能够正确执行,输出的结果是()
int arr[5] = {1, 2, 3, 4, 5};
int p = arr[1];
cout << (p + 2) << endl;正确答案D
解析详情
数组 `arr` 的下标从 0 开始,所以 `arr[1]` 的值是 2。
于是 `p = 2`,输出 `p + 2`,结果 is 4,选 D。
第 7 题(单选题,2 分)
以下关于 C++ 求最小值函数 min() 的描述,不正确的是()
正确答案D
解析详情
函数调用时必须满足参数列表要求。
`min(5)` 若没有匹配的一元重载,确实不能通过编译;`min()` 不传任何参数同样不能通过编译,更不可能默认返回 0。
因此“不正确的是” D。
第 8 题(单选题,2 分)
在一个特定的计算机系统中,假如 unsigned int 类型需要占用2个字节的存储空间(每个字节有8位),则 unsigned int 可以表示的数据范围是( )
正确答案A
解析详情
2 个字节共有 16 位,无符号整型可表示的范围是 0 到 2^16 - 1。
2^16 - 1 = 65535,所以范围是 0 ~ 65535,选 A。
第 9 题(单选题,2 分)
以下代码执行后,数组 arr 的内容是()
int arr[6] = {1, 2, 3, 4, 5, 6};
for (int i = 0; i < 6; i += 2) {
arr[i] = arr[i] + arr[i+1];
arr[i+1] = arr[i] - arr[i+1];
arr[i] = arr[i] - arr[i+1];
}正确答案A
解析详情
循环每次处理一对相邻元素,并用加减法完成交换。
初始数组是 `{1,2,3,4,5,6}`。
处理下标 0 和 1 后得到 `{2,1,3,4,5,6}`;处理下标 2 和 3 后得到 `{2,1,4,3,5,6}`;处理下标 4 和 5 后得到 `{2,1,4,3,6,5}`。
所以选 A。
第 10 题(单选题,2 分)
a & b | (c^d),其中 a = 3,b = 7,c = 15,d = 4,计算结果是( )
正确答案A
解析详情
先算括号和各子表达式:
`a & b = 3 & 7 = 3`,`c ^ d = 15 ^ 4 = 11`。
再算 `3 | 11 = 11`。题目问“计算结果是”,选项中只有“十进制 11”对应这个结果,所以选 A。
第 11 题(单选题,2 分)
整型变量 x 的初始值为 10,以下代码的输出结果是()
int t = x--;
t -= x;
cout << t << endl;正确答案C
解析详情
`t = x--` 先把 10 赋给 `t`,再让 `x` 变成 9。
接着执行 `t -= x`,即 `t = 10 - 9 = 1`,所以输出 1,选 C。
第 12 题(单选题,2 分)
根据下面的流程图,如果成绩 score 输入 60 ,输出的结果是()

正确答案B
解析详情
根据流程图的判断顺序,`score = 60` 时不会进入“优秀”分支,但会进入“及格”分支,因此最终输出“及格”。
所以选 B。
第 13 题(单选题,2 分)
以下代码运行后,sum 的结果是()
int arr[5] = {2, 4, 6, 8, 10};
int sum = 0;
for (int i = 0; i < 5; i++) {
switch (arr[i] % (1|2)) {
case 0: sum += 1; break;
case 1: sum += 2; break;
case 2: sum += 3; break;
}
}正确答案B
解析详情
先算 `1 | 2 = 3`,所以程序实际在看每个元素对 3 取模后的结果。
数组元素依次是 2、4、6、8、10,对 3 取模得到 2、1、0、2、1。
对应加分分别是 3、2、1、3、2,总和是 11,所以选 B。
第 14 题(单选题,2 分)
以下关于 C++ 中 abs() 函数的描述,正确的是 ( )
正确答案A
解析详情
`abs()` 在 `<cstdlib>` 或 `<cmath>` 中可用于求整数绝对值。B 选项 abs 不是四舍五入函数;C 选项参数个数错误;D 选项 abs 不会截断小数部分。
第 15 题(单选题,2 分)
如果字符串 s 的值是 GESP,以下代码 s 的最后结果是()
for (int i = 0; i < s.length(); i++) {
s[i] = toupper(s[i] + i);
}正确答案D
解析详情
字符串初始为 `GESP`。
第 0 位:`'G' + 0` 仍是 `G`;第 1 位:`'E' + 1 = 'F'`;第 2 位:`'S' + 2 = 'U'`;第 3 位:`'P' + 3 = 'S'`。
再经过 `toupper` 后仍分别是大写,所以最终得到 `GFUS`,选 D。
判断题
第 1 题(判断题,2 分)
在 C++ 中,数组名不能改变,数组名不能被赋值。
正确答案正确
解析详情
数组名代表数组首元素地址这一固定位置,不能像普通变量那样重新赋值。
第 2 题(判断题,2 分)
整型变量 a 的值为 3,浮点数变量 b 的值为 3.5,在 C++ 编译环境下,经过 a *= b 计算后,a 的值变为 10.5,此时如果输出 a,将输出 10.5。
正确答案错误
解析详情
`a *= b` 即 `a = a * b = 3 * 3.5 = 10.5`,但 a 是 int 类型,结果会截断为 10,不是 10.5。
第 3 题(判断题,2 分)
strcmp(str1, str2) 返回 0 表示 str1 大于 str2,返回正数表示两者相等。
正确答案错误
解析详情
`strcmp` 返回 0 表示相等,返回正数表示 str1 > str2,返回负数表示 str1 < str2。题目说反了。
第 4 题(判断题,2 分)
以下代码输出结果为 8。
int a = 5, b = 3;
int c = a++ + ++b;
cout << c << endl;正确答案错误
解析详情
`a++` 先取 a 的值 5 参与运算,`++b` 先将 b 加 1 变为 4 再取值。因此 `c = 5 + 4 = 9`,不是 8。
第 5 题(判断题,2 分)
位运算符 &、|、^、~ 的优先级高于算术运算符 +、-、*、/。
正确答案错误
解析详情
在 C++ 中,算术运算符(+、-、*、/)的优先级高于位运算符(&、|、^)。只有 ~ 优先级高于算术运算符。
第 6 题(判断题,2 分)
在C++中,int a[] = {1, 2, 3, 4, 5}; 可以定义一个包含5个元素的整型数组。
正确答案正确
解析详情
使用初始化列表 {1,2,3,4,5} 时编译器自动推断数组长度为 5,[] 内可以省略大小。
第 7 题(判断题,2 分)
C++ 表达式 z = a > b ? x : y 等同于:
if (a > b) {
z = x;
} else {
z = y;
}以下代码执行后,输出将会是 2。
int main() {
int arr[5] = {1, 2, 3, 4, 5};
cout << arr[3 > 2 ? 1 : 2] << endl;
return 0;
}正确答案正确
解析详情
`3 > 2` 为 true,三目运算符取第一个值 1,因此访问 arr[1] = 2,输出确实是 2。
第 8 题(判断题,2 分)
在 C++ 中,++ 和 -- 运算符只能用于整型变量,不能用于浮点数变量。
正确答案错误
解析详情
C++ 中 `++` 和 `--` 对浮点型变量同样适用,如 `double x = 1.5; x++;` 后 x 变为 2.5。
第 9 题(判断题,2 分)
给定一个正整数 a,当需要计算 -a 的补码时,有这样一个计算技巧:将 a 的二进制形式从右往左扫描,遇到第一个 1 之后,将找到的第一个 1 左边的所有位都取反,能得到 -a 的补码。
正确答案正确
解析详情
这是求补码的快捷方法:从右向左找到第一个 1,保留该位及右边所有位不变,将左边所有位取反,即得到 -a 的补码。
第 10 题(判断题,2 分)
以下代码中,Hello 将被输出 5 次。
for (int i = 0; i < 5; i++);
{
cout << "Hello" << endl;
}正确答案错误
解析详情
`for` 语句末尾多了一个分号,导致循环体为空语句。后面花括号中的代码不在循环内,只执行 1 次。