GESP 客观题评测系统
2025-12-Level-3
2025-12-Level-3
试卷解析总览,可直接查看每题答案与解析。
第 1 题(单选题)
请将二进制数,转换为等值的10进制数()
正确答案B
解析详情
【答案】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。
【易错点】 小数部分不是按 10 进制位权计算,而是按 2 的负次幂计算。
第 2 题(单选题)
以下关于标准 C++ 一维数组的描述,哪一项是错误的?()
正确答案C
解析详情
【答案】C
【考点】数组基础;标准 C++ 语法
【解析】 标准 C++ 中,普通一维数组的长度需要在编译期确定,不能等到运行时再决定。 A、B、D 都是数组的基本性质,只有 C 说法错误,所以选 C。
【易错点】 不要把某些编译器对变长数组的扩展当成标准 C++ 语法。
第 3 题(单选题)
下列代码段执行后,变量 sum 的值是()
{
int sum = 0;
for (int i = 1; i <= 10; i++) {
if (i % 3 == 8>>2)
continue;
sum += i;
}
}正确答案D
解析详情
【答案】D
【考点】for 循环;continue;位移运算
【解析】 代码中 `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。
【易错点】 `8>>2` 是位移运算而非大于号比较,结果为 2 不是布尔值。
第 4 题(单选题)
执行以下程序段,输出值是()
int x = 5;
if (x == 3 >> 2) x = 8 >> 3;
cout << x << endl;正确答案B
解析详情
【答案】B
【考点】位移运算;关系运算;程序执行顺序
【解析】 表达式 `3 >> 2` 的结果是 0,所以条件判断等价于 `x == 0`。 初始时 `x = 5`,条件不成立,因此不会执行赋值语句,最终输出仍为 5,选 B。
【易错点】 位移运算会先算出数值结果,再参与比较,不能把 `3 >> 2` 看成 3 和 2 的普通比较。
第 5 题(单选题)
已知字符串,下列程序运行的结果是()
cout << (int)(s.length() | 3) << endl;正确答案B
解析详情
【答案】B
【考点】字符串长度;按位或运算
【解析】 字符串 `C++ Programming` 的长度是 15。 再看 `15 | 3`:15 的二进制是 1111,3 的二进制是 0011,按位或之后仍是 1111,也就是 15,所以输出 15,选 B。
【易错点】 `|` 是按位或,不是逻辑或,也不是把两个数拼起来。
第 6 题(单选题)
以下代码是一个程序的部分代码,能够正确执行,输出的结果是()
int arr[5] = {1, 2, 3, 4, 5};
int p = arr[1];
cout << (p + 2) << endl;正确答案D
解析详情
【答案】D
【考点】数组访问;变量赋值;表达式计算
【解析】 数组 `arr` 的下标从 0 开始,所以 `arr[1]` 的值是 2。 于是 `p = 2`,输出 `p + 2`,结果 is 4,选 D。
【易错点】 最容易错在把数组下标从 1 开始算。
第 7 题(单选题)
以下关于 C++ 求最小值函数 min() 的描述,不正确的是()
正确答案D
解析详情
【答案】D
【考点】函数调用;参数个数;函数返回值
【解析】 函数调用时必须满足参数列表要求。 `min(5)` 若没有匹配的一元重载,确实不能通过编译;`min()` 不传任何参数同样不能通过编译,更不可能默认返回 0。 因此“不正确的是” D。
【易错点】 函数是否能调用,关键看是否存在匹配的参数列表,而不是想当然地补默认值。
第 8 题(单选题)
在一个特定的计算机系统中,假如 unsigned int 类型需要占用2个字节的存储空间(每个字节有8位),则 unsigned int 可以表示的数据范围是( )
正确答案A
解析详情
【答案】A
【考点】无符号整数范围;二进制位数
【解析】 2 个字节共有 16 位,无符号整型可表示的范围是 0 到 2^16 - 1。 2^16 - 1 = 65535,所以范围是 0 ~ 65535,选 A。
【易错点】 无符号类型没有负数端点,上界要写成 2^n - 1。
第 9 题(单选题)
以下代码执行后,数组 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
解析详情
【答案】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 题(单选题)
a & b | (c^d),其中 a = 3,b = 7,c = 15,d = 4,计算结果是( )
正确答案A
解析详情
【答案】A
【考点】位运算;按位与;按位或;按位异或
【解析】 先算括号和各子表达式: `a & b = 3 & 7 = 3`,`c ^ d = 15 ^ 4 = 11`。 再算 `3 | 11 = 11`。题目问“计算结果是”,选项中只有“十进制 11”对应这个结果,所以选 A。
【易错点】 题目里的“11”要分清是数值本身,还是某种进制下的写法。
第 11 题(单选题)
整型变量 x 的初始值为 10,以下代码的输出结果是()
int t = x--;
t -= x;
cout << t << endl;正确答案C
解析详情
【答案】C
【考点】后置自减;复合赋值;表达式求值
【解析】 `t = x--` 先把 10 赋给 `t`,再让 `x` 变成 9。 接着执行 `t -= x`,即 `t = 10 - 9 = 1`,所以输出 1,选 C。
【易错点】 后置自减是“先取值,再减 1”,不要和前置自减混淆。
第 12 题(单选题)
根据下面的流程图,如果成绩 score 输入 60 ,输出的结果是()

正确答案B
解析详情
【答案】B
【考点】流程图;条件判断;分支执行
【解析】 根据流程图的判断顺序,`score = 60` 时不会进入“优秀”分支,但会进入“及格”分支,因此最终输出“及格”。 所以选 B。
【易错点】 流程图题要沿着判定箭头逐步走,不要只看几个关键词就直接选。
第 13 题(单选题)
以下代码运行后,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
解析详情
【答案】B
【考点】switch 语句;按位或;取模运算
【解析】 先算 `1 | 2 = 3`,所以程序实际在看每个元素对 3 取模后的结果。 数组元素依次是 2、4、6、8、10,对 3 取模得到 2、1、0、2、1。 对应加分分别是 3、2、1、3、2,总和是 11,所以选 B。
【易错点】 不要把 `1|2` 误看成逻辑表达式,它的结果是整数 3。
第 14 题(单选题)
以下关于 C++ 中 abs() 函数的描述,正确的是 ( )
正确答案A
解析详情
【答案】A
【考点】标准库函数;绝对值;函数参数
【解析】 `abs()` 在 `<cstdlib>` 或 `<cmath>` 中可用于求整数绝对值。B 选项 abs 不是四舍五入函数;C 选项参数个数错误;D 选项 abs 不会截断小数部分。
【易错点】 混淆 abs()、fabs()、round() 等不同数学函数的作用。
第 15 题(单选题)
如果字符串 s 的值是 GESP,以下代码 s 的最后结果是()
for (int i = 0; i < s.length(); i++) {
s[i] = toupper(s[i] + i);
}正确答案D
解析详情
【答案】D
【考点】字符编码;字符串遍历;toupper
【解析】 字符串初始为 `GESP`。 第 0 位:`'G' + 0` 仍是 `G`;第 1 位:`'E' + 1 = 'F'`;第 2 位:`'S' + 2 = 'U'`;第 3 位:`'P' + 3 = 'S'`。 再经过 `toupper` 后仍分别是大写,所以最终得到 `GFUS`,选 D。
【易错点】 字符参与加法时本质是在按字符编码做运算。
判断题(每题 2 分)
第 1 题(判断题)
在 C++ 中,数组名不能改变,数组名不能被赋值。
正确答案正确
解析详情
【答案】正确
【考点】数组名;C++ 基础语法
【解析】 数组名代表数组首元素地址这一固定位置,不能像普通变量那样重新赋值。
【易错点】 不要把数组名和指针变量混淆,指针可以重新赋值但数组名不行。
第 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 题(判断题)
strcmp(str1, str2) 返回 0 表示 str1 大于 str2,返回正数表示两者相等。
正确答案错误
解析详情
【答案】错误
【考点】字符串比较;strcmp 返回值
【解析】 `strcmp` 返回 0 表示相等,返回正数表示 str1 > str2,返回负数表示 str1 < str2。题目说反了。
【易错点】 记住返回 0 是相等,可以类比减法结果的正负零。
第 4 题(判断题)
以下代码输出结果为 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 题(判断题)
位运算符 &、|、^、~ 的优先级高于算术运算符 +、-、*、/。
正确答案错误
解析详情
【答案】错误
【考点】运算符优先级;算术运算;位运算
【解析】 在 C++ 中,算术运算符(+、-、*、/)的优先级高于位运算符(&、|、^)。只有 ~ 优先级高于算术运算符。
【易错点】 不要混淆按位取反 ~ 和其他位运算符的优先级。
第 6 题(判断题)
在C++中,int a[] = {1, 2, 3, 4, 5}; 可以定义一个包含5个元素的整型数组。
正确答案正确
解析详情
【答案】正确
【考点】数组初始化;C++ 基础语法
【解析】 使用初始化列表 {1,2,3,4,5} 时编译器自动推断数组长度为 5,[] 内可以省略大小。
【易错点】 省略大小只在有初始化列表时合法,空 [] 无初始化会报错。
第 7 题(判断题)
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;
}正确答案正确
解析详情
【答案】正确
【考点】条件运算符;下标访问;if-else 等价转换
【解析】 `3 > 2` 为 true,三目运算符取第一个值 1,因此访问 arr[1] = 2,输出确实是 2。
【易错点】 注意三目运算符的结果作为数组下标时,要先算出条件再确定下标。
第 8 题(判断题)
在 C++ 中,++ 和 -- 运算符只能用于整型变量,不能用于浮点数变量。
正确答案错误
解析详情
【答案】错误
【考点】自增自减运算;浮点类型
【解析】 C++ 中 `++` 和 `--` 对浮点型变量同样适用,如 `double x = 1.5; x++;` 后 x 变为 2.5。
【易错点】 误认为自增自减只能用于整型,实际上 float/double 也支持。
第 9 题(判断题)
给定一个正整数 a,当需要计算 -a 的补码时,有这样一个计算技巧:将 a 的二进制形式从右往左扫描,遇到第一个 1 之后,将找到的第一个 1 左边的所有位都取反,能得到 -a 的补码。
正确答案正确
解析详情
【答案】正确
【考点】补码;二进制取反规则
【解析】 这是求补码的快捷方法:从右向左找到第一个 1,保留该位及右边所有位不变,将左边所有位取反,即得到 -a 的补码。
【易错点】 不要把这个方法和'取反加 1'搞混,两者结果一样但操作步骤不同。
第 10 题(判断题)
以下代码中,Hello 将被输出 5 次。
for (int i = 0; i < 5; i++);
{
cout << "Hello" << endl;
}正确答案错误
解析详情
【答案】错误
【考点】for 循环;空语句;程序块
【解析】 `for` 语句末尾多了一个分号,导致循环体为空语句。后面花括号中的代码不在循环内,只执行 1 次。
【易错点】 for 后面误加分号是常见错误,会导致循环体为空。