GESP 客观题评测系统

2023-09-Level-3

2023-09-Level-3

试卷解析总览,可直接查看每题答案与解析。

单选题(每题 2 分)

1 题(单选题

人们所使用的手机上安装的App通常指的是()。

A.
一款操作系统
B.
一款应用软件
C.
一种通话设备
D.
以上都不对

正确答案B

解析详情

【答案】B

【考点】计算机基础与软件分类

【解析】 App 是 Application 的缩写,指手机上安装的应用软件,如微信、支付宝等。操作系统是 iOS/Android,不属于 App。

【易错点】 混淆"应用软件"和"操作系统"的概念。

2 题(单选题

下列流程图的输出结果是?()

Image
A.
60
B.
20
C.
5
D.
1

正确答案B

解析详情

【答案】B

【考点】流程图阅读

【解析】 本题需要根据流程图中的变量初始值和循环逻辑推导最终输出。需结合图片确认具体流程,结果为 20。

【易错点】 流程图中的判断条件和赋值步骤容易看错执行顺序。

3 题(单选题

已知大写字符 'A' 的 ASCII 编码的十六进制表示为 0x41,则字符 'L' 的 ASCII 编码的十六进制表示为()。

A.
4A
B.
4B
C.
4C
D.
52

正确答案C

解析详情

【答案】C

【考点】ASCII 编码

【解析】 'A' 的 ASCII 码为 0x41(十进制 65)。'L' 是字母表第 12 个字母,ASCII 码 = 65 + 11 = 76,十六进制为 0x4C。

【易错点】 字母偏移量计算出错,A 到 L 的偏移是 11 而非 12。

4 题(单选题

以下哪个不是C++语言中的运算符?()

A.
~
B.
~
C.
<
D.
<<

正确答案B

解析详情

【答案】B

【考点】C++ 运算符

【解析】 本题 A、B 选项在原文中因 OCR 识别问题显示重复。根据答案 B,选项 B 在原卷中应为一个非 C++ 运算符的符号。A(~)、C(<)、D(<<) 均为合法 C++ 运算符。

【易错点】 需结合原卷确认选项 B 的实际内容。

5 题(单选题

如果数组定义为 long long array[] = {3, 5, 7, 2};,则数组 array 占用的字节数为()。

A.
32
B.
16
C.
8
D.
4

正确答案A

解析详情

【答案】A

【考点】数据类型与内存占用

【解析】 long long 类型占 8 字节,数组有 4 个元素,总占用 4 × 8 = 32 字节。

【易错点】 混淆 long long(8 字节)与 int(4 字节)的大小。

6 题(单选题

一个数组定义为 double array[3];则可合理访问这个数组的元素的下标最大为()。

A.
2
B.
3
C.
23
D.
24

正确答案A

解析详情

【答案】A

【考点】数组下标范围

【解析】 数组大小为 3,合法下标为 0、1、2,最大下标为 2。

【易错点】 误认为下标最大值等于数组大小。

7 题(单选题

以下数组定义,符合C++语言语法的是()。

A.
double a[];
B.
double b[] = {1, 2.0, '3'};
C.
double c[3.0];
D.
double[] d = new double[3];

正确答案B

解析详情

【答案】B

【考点】数组定义语法

【解析】 A 缺少大小且无初始化;C 下标 3.0 是浮点数,不合法;D 是 Java/C# 语法。B 中 {1, 2.0, '3'} 均可隐式转换为 double,语法正确。

【易错点】 不清楚字符常量和整型可以隐式转换为 double。

8 题(单选题

下列关于进制的叙述,正确的是()。

A.
只有十进制和二进制能够用来表示小数,八进制和十六进制不可以。
B.
常用的进制包括二进制、八进制、十进制、十六进制,其他进制在日常生活中很少使用。
C.
对任意正整数,其二进制表示不会比它的十进制表示更短。
D.
正整数的八进制表示中,每一位可能出现的最大数字是8。

正确答案C

解析详情

【答案】C

【考点】进制概念与转换

【解析】 A 错,八进制和十六进制也能表示小数;B 错,60 进制(时钟)等在日常生活中也有应用;C 正确,二进制表示的位数不会比十进制更短;D 错,八进制每位最大数字是 7。

【易错点】 误认为 B 正确,忽略 60 进制等实际应用。

9 题(单选题

下列关于C++语言中数组的叙述,不正确的是()。

A.
可以定义 0 个元素的数组。
B.
不能定义 -1 个元素的数组。
C.
数组下标越界访问会产生编译错误。
D.
程序运行时发生数组下标的越界访问,程序依然可能正常结束。

正确答案C

解析详情

【答案】C

【考点】C++ 数组基础

【解析】 C 错误:数组下标越界在编译阶段通常不报错,属于运行时未定义行为。D 正确:越界访问可能恰好访问合法地址而不崩溃。

【易错点】 误认为编译器会检查数组越界。

10 题(单选题

如果 a 是 int 类型的变量,下列哪个表达式的值一定为 true?()

A.
a + 1000 - 1000 == a
B.
a * 2 / 2 == a
C.
(a & 1) == 1
D.
(a | 1) == a + 1

正确答案A

解析详情

【答案】A

【考点】整数运算与溢出

【解析】 a + 1000 - 1000 在数学上恒等于 a。虽然中间可能溢出,但补码加减法的溢出行为使最终结果仍等于 a。B 选项:a * 2 可能溢出,且整数除法会截断奇数;C/D 不恒为 true。

【易错点】 误认为 B 选项中的乘除互逆,忽略整数除法截断。

11 题(单选题

如果 a 和 b 均为 int 类型的变量,下列表达式不能正确判断“a 等于 b”的是()。

A.
((a >= b) && (a <= b))
B.
((a >> 1) == (b >> 1))
C.
((a + b) == (a + a))
D.
((a ^ b) == 0)

正确答案B

解析详情

【答案】B

【考点】相等判断的等价表达式

【解析】 右移 1 位相当于整除 2。例如 a=2, b=3 时 (2>>1)==(3>>1) 为 true,但 a≠b。因此右移后比较不能正确判断相等。

【易错点】 忽略右移(整除 2)会丢失最低位信息。

12 题(单选题

如果 a 为 char 类型的变量,下列哪个表达式可以正确判断“a是大写字母”?()

A.
a - 'A' <= 26
B.
'A' <= a <= 'Z'
C.
'A' <= 'a' <= 'Z'
D.
('A' <= a) && (a <= 'Z')

正确答案D

解析详情

【答案】D

【考点】字符范围判断

【解析】 C++ 中不能连写 'A' <= a <= 'Z',这种写法实际是先计算 'A' <= a 得到 0 或 1,再与 'Z' 比较。正确写法是 ('A' <= a) && (a <= 'Z')。A 选项 a-'A' <= 26 没有排除小于 'A' 的字符。

【易错点】 误认为连续比较表达式等价于数学中的区间判断。

13 题(单选题

在下列代码的横线处填写(),可以使得输出是“20 10”。

#include <iostream>
using namespace std;

int main() {
    int a = 10, b = 20;
    a = (a << 8) | b;
    // 在此处填入代码
    cout << a << " " << b << endl;
    return 0;
}
A.
a = a >> 8; b = a & 0xff
B.
b = a >> 8; a = a & 0xff;
C.
a = b; b = a & 0xff;
D.
b = a; a = b;

正确答案B

解析详情

【答案】B

【考点】位运算打包与拆包

【解析】 a = (10 << 8) | 20 将原 a(10) 存入高 8 位、原 b(20) 存入低 8 位。要输出 "20 10",需先取高 8 位给 b:b = a >> 8(得 10),再取低 8 位给 a:a = a & 0xff(得 20)。注意必须先提取 b 再修改 a。

【易错点】 先修改 a 导致高位信息丢失。

14 题(单选题

在下列代码的横线处填写(),可以使得输出是“120”。

#include <iostream>
using namespace std;

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    int res = 0;
    for (int i = 0; i < 5; i++)
        // 在此处填入代码
        cout << res << endl;
        return 0;
}
A.
res += array[i];
B.
res *= array[i]
C.
res = array[i]
D.
以上均不对。

正确答案D

解析详情

【答案】D

【考点】变量初始化与累积运算

【解析】 res 初始化为 0。若用 +=,结果为 15(非 120);若用 *=,0 乘任何数仍为 0。赋值只保留最后一个元素。因此三个选项都不能产生 120,答案为 D。

【易错点】 忽略 res=0 导致乘法累积始终为 0。

15 题(单选题

在下列代码的输出是()。

#include <iostream>
using namespace std;

int main() {
    int array[10];
    for (int i = 0; i < 10; i++)
        array[i] = i;
    for (int p = 2; p < 10; p++)
        if (array[p] == p)
            for (int n = p; n < 10; n += p)
                array[n] = array[n] / p * (p - 1);
    int res = 0;
    for (int n = 1; n < 10; n++)
        res += array[n];
    cout << res << endl;
    return 0;
}
A.
15
B.
28
C.
45
D.
55

正确答案B

解析详情

【答案】B

【考点】欧拉函数与筛法

【解析】 程序通过类似筛法的方式计算 1~9 每个数的欧拉函数值 φ(n)。φ(1)=1, φ(2)=1, φ(3)=2, φ(4)=2, φ(5)=4, φ(6)=2, φ(7)=6, φ(8)=4, φ(9)=6,总和 = 28。

【易错点】 不理解 array[n] = array[n] / p * (p-1) 是欧拉函数的筛法公式。

判断题(每题 2 分)

1 题(判断题

二进制数 101.101 在十进制下是 5.005。

正确答案错误

解析详情

【答案】错误

【考点】二进制与十进制转换

【解析】 101.101(二进制) = 4+1+0.5+0.125 = 5.625(十进制),不是 5.005。

【易错点】 直接将二进制数字当十进制数字读出。

2 题(判断题

在C++语言中,位运算符也有类似“先乘除、后加减”的优先级规则。因此,使用时应注意合理使用括号。

正确答案正确

解析详情

【答案】正确

【考点】位运算符优先级

【解析】 位运算符有明确优先级(~ > << >> > & > ^ > |),混合使用时容易出错,建议加括号。

【易错点】 误认为位运算符之间无优先级差异。

3 题(判断题

字符常量 '3' 的值和 int 类型常量 3 的值是相同的,只是占用的字节数不同。

正确答案错误

解析详情

【答案】错误

【考点】ASCII 编码

【解析】 字符 '3' 的 ASCII 码是 51,而 int 常量 3 的值就是 3,两者不相同。

【易错点】 混淆字符的 ASCII 码值与数字本身的值。

4 题(判断题

在 C++ 语言中,长度为 n 的数组,访问下标为 n 的元素会引起编译错误。

正确答案错误

解析详情

【答案】错误

【考点】数组越界检查

【解析】 数组下标越界属于运行时未定义行为,编译器通常不检查下标合法性,不会产生编译错误。

【易错点】 误认为编译器会对数组越界进行检查。

5 题(判断题

在C++语言中,所有 int 类型的值,经过若干次左移操作(<<)后,它们的值总会变为 0 。

正确答案正确

解析详情

【答案】正确

【考点】左移运算特性

【解析】 int 是有限位数(通常 32 位)。每次左移在低位补 0 并丢弃高位,多次左移后所有非零位溢出,结果必然为 0。

【易错点】 忽略有符号整数左移的未定义行为细节(本题从结果角度看仍成立)。

6 题(判断题

在C++语言中,数组下标的大小决定元素在逻辑上的先后顺序,与元素在内存中位置的先后顺序无关。

正确答案错误

解析详情

【答案】错误

【考点】数组内存布局

【解析】 数组在内存中连续存放,下标越大地址越高,因此下标顺序与内存位置顺序一致,不是无关。

【易错点】 误认为数组的逻辑顺序和物理顺序可以不同。

7 题(判断题

在C++语言中,定义数组时,[]中必须指定元素个数。

正确答案错误

解析详情

【答案】错误

【考点】数组定义规则

【解析】 如果定义时同时初始化(如 int a[] = {1,2,3};),编译器可推断大小,[] 内可以为空。

【易错点】 认为任何情况下都必须指定数组大小。

8 题(判断题

著名的哥德巴赫猜想:任一大于2的偶数都可写成两个素数之和。我们可以通过枚举法来证明它。

正确答案错误

解析详情

【答案】错误

【考点】数学证明与枚举法

【解析】 枚举法只能验证有限个偶数,无法穷尽所有大于 2 的偶数,因此不能用于证明哥德巴赫猜想。

【易错点】 混淆"验证"和"证明"的区别。

9 题(判断题

在C++语言中,表达式(0xff == 255)的值为 true。

正确答案正确

解析详情

【答案】正确

【考点】十六进制字面量

【解析】 0xff = 15×16 + 15 = 255,与十进制 255 相等。

【易错点】 十六进制转十进制计算错误。

10 题(判断题

如果 a 为 int 类型的变量,且表达式 (a & 1) == 0 的值为 true,则说明 a 是偶数。

正确答案正确

解析详情

【答案】正确

【考点】位与运算判断奇偶

【解析】 (a & 1) == 0 表示 a 的二进制最低位为 0,即 a 是偶数。这是判断奇偶的经典位运算方法。

【易错点】 混淆 & 1 为 0(偶数)和 & 1 为 1(奇数)。