GESP 客观题评测系统

试卷解析 · 理解每一步

2023-09-Level-3

2023-09-Level-3

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

单选题

第 1 题(单选题,2 分)

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

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

正确答案B

解析详情
答案 B计算机基础与软件分类
思路与推导
  1. App 是 Application 的缩写,指手机上安装的应用软件,如微信、支付宝等。操作系统是 iOS/Android,不属于 App。

第 2 题(单选题,2 分)

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

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

正确答案B

解析详情
答案 B流程图阅读
思路与推导
  1. 本题需要根据流程图中的变量初始值和循环逻辑推导最终输出。需结合图片确认具体流程,结果为 20。

第 3 题(单选题,2 分)

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

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

正确答案C

解析详情
答案 CASCII 编码
思路与推导
  1. 'A' 的 ASCII 码为 0x41(十进制 65)。'L' 是字母表第 12 个字母,ASCII 码 = 65 + 11 = 76,十六进制为 0x4C。

第 4 题(单选题,2 分)

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

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

正确答案B

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

第 5 题(单选题,2 分)

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

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

正确答案A

解析详情
答案 A数据类型与内存占用
思路与推导
  1. long long 类型占 8 字节,数组有 4 个元素,总占用 4 × 8 = 32 字节。

第 6 题(单选题,2 分)

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

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

正确答案A

解析详情
答案 A数组下标范围
思路与推导
  1. 数组大小为 3,合法下标为 0、1、2,最大下标为 2。

第 7 题(单选题,2 分)

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

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

正确答案B

解析详情
答案 B数组定义语法
思路与推导
  1. A 缺少大小且无初始化;C 下标 3.0 是浮点数,不合法;D 是 Java/C# 语法。B 中 {1, 2.0, '3'} 均可隐式转换为 double,语法正确。

第 8 题(单选题,2 分)

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

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

正确答案C

解析详情
答案 C进制概念与转换
思路与推导
  1. A 错,八进制和十六进制也能表示小数;B 错,60 进制(时钟)等在日常生活中也有应用;C 正确,二进制表示的位数不会比十进制更短;D 错,八进制每位最大数字是 7。

第 9 题(单选题,2 分)

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

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

正确答案C

解析详情
答案 CC++ 数组基础
思路与推导
  1. C 错误:数组下标越界在编译阶段通常不报错,属于运行时未定义行为。D 正确:越界访问可能恰好访问合法地址而不崩溃。

第 10 题(单选题,2 分)

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

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

正确答案A

解析详情
答案 A整数运算与溢出
思路与推导
  1. a + 1000 - 1000 在数学上恒等于 a。虽然中间可能溢出,但补码加减法的溢出行为使最终结果仍等于 a。B 选项:a * 2 可能溢出,且整数除法会截断奇数;C/D 不恒为 true。

第 11 题(单选题,2 分)

如果 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. 右移 1 位相当于整除 2。例如 a=2, b=3 时 (2>>1)==(3>>1) 为 true,但 a≠b。因此右移后比较不能正确判断相等。

第 12 题(单选题,2 分)

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

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

正确答案D

解析详情
答案 D字符范围判断
思路与推导
  1. C++ 中不能连写 'A' <= a <= 'Z',这种写法实际是先计算 'A' <= a 得到 0 或 1,再与 'Z' 比较。正确写法是 ('A' <= a) && (a <= 'Z')。A 选项 a-'A' <= 26 没有排除小于 'A' 的字符。

第 13 题(单选题,2 分)

在下列代码的横线处填写(),可以使得输出是“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位运算打包与拆包
思路与推导
  1. 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。

第 14 题(单选题,2 分)

在下列代码的横线处填写(),可以使得输出是“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变量初始化与累积运算
思路与推导
  1. res 初始化为 0。若用 +=,结果为 15(非 120);若用 *=,0 乘任何数仍为 0。赋值只保留最后一个元素。因此三个选项都不能产生 120,答案为 D。

第 15 题(单选题,2 分)

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

#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. 程序通过类似筛法的方式计算 1~9 每个数的欧拉函数值 φ(n)。φ(1)=1, φ(2)=1, φ(3)=2, φ(4)=2, φ(5)=4, φ(6)=2, φ(7)=6, φ(8)=4, φ(9)=6,总和 = 28。

判断题

第 1 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误二进制与十进制转换
思路与推导
  1. 101.101(二进制) = 4+1+0.5+0.125 = 5.625(十进制),不是 5.005。

第 2 题(判断题,2 分)

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

正确答案正确

解析详情
答案 正确位运算符优先级
思路与推导
  1. 位运算符有明确优先级(~ > << >> > & > ^ > |),混合使用时容易出错,建议加括号。

第 3 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误ASCII 编码
思路与推导
  1. 字符 '3' 的 ASCII 码是 51,而 int 常量 3 的值就是 3,两者不相同。

第 4 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误数组越界检查
思路与推导
  1. 数组下标越界属于运行时未定义行为,编译器通常不检查下标合法性,不会产生编译错误。

第 5 题(判断题,2 分)

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

正确答案正确

解析详情
答案 正确左移运算特性
思路与推导
  1. int 是有限位数(通常 32 位)。每次左移在低位补 0 并丢弃高位,多次左移后所有非零位溢出,结果必然为 0。

第 6 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误数组内存布局
思路与推导
  1. 数组在内存中连续存放,下标越大地址越高,因此下标顺序与内存位置顺序一致,不是无关。

第 7 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误数组定义规则
思路与推导
  1. 如果定义时同时初始化(如 int a[] = {1,2,3};),编译器可推断大小,[] 内可以为空。

第 8 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误数学证明与枚举法
思路与推导
  1. 枚举法只能验证有限个偶数,无法穷尽所有大于 2 的偶数,因此不能用于证明哥德巴赫猜想。

第 9 题(判断题,2 分)

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

正确答案正确

解析详情
答案 正确十六进制字面量
思路与推导
  1. 0xff = 15×16 + 15 = 255,与十进制 255 相等。

第 10 题(判断题,2 分)

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

正确答案正确

解析详情
答案 正确位与运算判断奇偶
思路与推导
  1. (a & 1) == 0 表示 a 的二进制最低位为 0,即 a 是偶数。这是判断奇偶的经典位运算方法。