GESP 客观题评测系统

试卷解析 · 理解每一步

2023-06-Level-3

2023-06-Level-3

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

单选题

第 1 题(单选题,2 分)

高级语言编写的程序需要经过以下()操作,可以生成在计算机上运行的可执行代码。

A.
编辑
B.
保存
C.
调试
D.
编译

正确答案D

解析详情
答案 D计算机基础与开发环境
思路与推导
  1. 高级语言编写的源代码需要经过编译器的编译,转化为机器可以理解并执行的目标代码或可执行文件。

第 2 题(单选题,2 分)

二进制数 11.01 在十进制下是()。

A.
3.01
B.
3.05
C.
3.125
D.
3.25

正确答案D

解析详情
答案 D进制转换
思路与推导
  1. 二进制 11.01 转换:整数部分 1*2^1 + 1*2^0 = 3,小数部分 0*2^-1 + 1*2^-2 = 0 + 0.25 = 0.25。合计为 3.25。

第 3 题(单选题,2 分)

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

A.
46
B.
47
C.
48
D.
49

正确答案A

解析详情
答案 AASCII 编码
思路与推导
  1. 'A' 是 0x41,'F' 是第 6 个大写字母。十六进制计算:0x41 + (6 - 1) = 0x46。

第 4 题(单选题,2 分)

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

A.
&
B.
&&
C.
*
D.
**

正确答案D

解析详情
答案 DC++ 运算符
思路与推导
  1. C++ 中没有 ** 运算符。乘方运算通常使用 cmath 库中的 pow 函数。

第 5 题(单选题,2 分)

如果字符串定义为 char str[] = "Hello";,则字符数组 str 的长度为()。

A.
0
B.
5
C.
6
D.
7

正确答案C

解析详情
答案 C字符串与字符数组
思路与推导
  1. 字符串 "Hello" 包含 5 个可见字符,末尾会自动添加一个空字符 '\0'。因此数组长度为 5 + 1 = 6。

第 6 题(单选题,2 分)

一个数组定义为 double array[3];,则这个数组占用内存的大小为()。

A.
24
B.
12
C.
6
D.
3

正确答案A

解析详情
答案 A内存空间计算
思路与推导
  1. double 类型通常占用 8 字节。数组有 3 个元素,总大小为 3 * 8 = 24 字节。

第 7 题(单选题,2 分)

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

A.
int a];
B.
int b['3');
C.
int c[3.0];
D.
int[3] d;

正确答案B

解析详情
答案 B数组定义语法
思路与推导
  1. 数组大小必须是整型常量。字符常量 '3' 在底层以其 ASCII 码(整数)存储,因此合法。A 缺少左括号;C 3.0 是浮点数;D 语法错误。

第 8 题(单选题,2 分)

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

A.
正整数的二进制表示中只会出现 0 和 1。
B.
10 不是 2 的整数次幂,所以十进制数无法转换为二进制数。
C.
从二进制转换为 8 进制时,可以很方便地由低到高将每 3 位二进制位转换为对应的一位 8 进制位。
D.
从二进制转换为 16 进制时,可以很方便地由低到高将每 4 位二进制位转换为对应的一位 16 进制位。

正确答案B

解析详情
答案 B进制基础知识
思路与推导
  1. 任何十进制数都可以转换为二进制。基数是否为 2 的整数次幂仅影响转换的简便程度,不影响转换的可行性。

第 9 题(单选题,2 分)

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

A.
数组必须先定义后使用。
B.
数组的所有元素在内存中是连续存放的。
C.
除了字符数组,在定义数组时“[]”内必须有常数。
D.
不能对数组赋值,但可以对数组的每个基础类型的元素赋值。

正确答案C

解析详情
答案 C数组定义要求
思路与推导
  1. 在定义数组且不进行初始化时,所有类型的数组都需要在 [] 内指定常量。如果进行了初始化,编译器可以根据初始值自动推断大小,此时 [] 内可为空。C 选项说法绝对化。

第 10 题(单选题,2 分)

一个 int 类型的值,做以下哪个操作,一定会变回原来的值?()

A.
左移 3 位,再右移 3 位。
B.
右移 3 位,再左移 3 位。
C.
按位或 7,再按位与 -8。
D.
按位异或 7,再按位异或 7。

正确答案D

解析详情
答案 D位运算性质
思路与推导
  1. 异或运算具有自反性:x ^ y ^ y = x。对同一个数连续异或两次,一定会变回原值。

第 11 题(单选题,2 分)

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

A.
((a / b) == 1)
B.
((a & b) == a)
C.
((a ^ b) == 0)
D.
((a | b) == b)

正确答案C

解析详情
答案 C异或运算判断相等
思路与推导
  1. 异或运算中,两个相等的数异或结果为 0。因此 (a ^ b) == 0 是判断 a == b 的有效方式。

第 12 题(单选题,2 分)

如果 a 为 int 类型的变量,下列哪个表达式可以正确求出满足 “小于等于 a 且是 4 的倍数” 的整数中最大的?()

A.
(a & (~3))
B.
((a << 2) >> 2)
C.
(a \land 3)
D.
((a - 1) | 3) + 1

正确答案A

解析详情
答案 A位运算对齐
思路与推导
  1. 4 的倍数在二进制中低两位均为 0。~3 的二进制低两位为 0,高位全为 1。a & (~3) 正好将 a 的低两位清零,得到小于等于 a 且是 4 的倍数的最大整数。

第 13 题(单选题,2 分)

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

#include <iostream>
using namespace std;
int main() {
    int a = 12, b = 24;
    ___; // 在此处填入代码
    a = a ^ b;
    b = a ^ b;
    cout << a << " " << b << endl;
    return 0;
}
A.
a = a ^ b
B.
b = a ^ b
C.
a = a + b
D.
b = a + b

正确答案B

解析详情
答案 B异或交换变量
思路与推导
  1. 三行异或可以交换两变量:a=a^b; b=a^b; a=a^b;。本题已知后两行,第一行应为 a=a^b。但观察输出要求是 24 12,而初始 a=12, b=24。后两行执行后,b变为最初的a(12),a变为执行横线后的a与初始b的异或。若横线为 a=a^b,则完成交换。注意 B 选项虽然写 b=a^b 但配合后两行逻辑也能达成目标值(分析具体过程)。正确逻辑是 B。

第 14 题(单选题,2 分)

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

#include <iostream>
using namespace std;

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

正确答案D

解析详情
答案 D最小值查找逻辑
思路与推导
  1. 代码中 min 被初始化为 0。数组中所有元素均大于 0,因此 min > array[i] 永远不成立,min 会一直保持为 0。要找最小值,通常应将 min 初始化为数组首元素或极大值。

第 15 题(单选题,2 分)

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

#include <iostream>
using namespace std;
int main() {
    int array[5] = {1, 2, 4, 8, 16};
    int res = 0;
    for (int i = 0; i < 5; i++)
        // 在此处填写代码
    cout << res << endl;
    return 0;
}
A.
res = res + array[i]
B.
res = res & array[i]
C.
res = res | array[i]
D.
res = res ^ array[i]

正确答案B

解析详情
答案 B位运算与累加
思路与推导
  1. 数组元素是 2 的幂。累加(+)、按位或(|)、按位异或(^)结果均为 31。但按位与(&)在 res 初始为 0 时结果始终为 0。

判断题

第 1 题(判断题,2 分)

一个算法可以用不同的形式来描述,但要求描述比较规范,因此不能用自然语言描述。

正确答案错误

解析详情
答案 错误算法描述方式
思路与推导
  1. 算法可以用自然语言、伪代码、流程图或编程语言描述。自然语言只要逻辑清晰,也是可行的。

第 2 题(判断题,2 分)

域名是由一串用点分隔的名字来标识互联网上一个计算机或计算机组的名称,CCF编程能力等级认证官方网站的域名是 gesp.ccf.org.cn,其中顶级域名是 gesp。

正确答案错误

解析详情
答案 错误域名结构知识
思路与推导
  1. 在域名 gesp.ccf.org.cn 中,顶级域名是位于最右侧的部分,即 cn。

第 3 题(判断题,2 分)

数据编码方式只有原码、反码、补码三种。

正确答案错误

解析详情
答案 错误数据编码
思路与推导
  1. 除了原码、反码、补码,还有移码等其他编码方式。此外字符、图像等数据也有各自的编码方案。

第 4 题(判断题,2 分)

在 C++语言中,长度为 n 的数组,合理的下标范围是从 0 到 n,包括 0 和 n。

正确答案错误

解析详情
答案 错误数组下标范围
思路与推导
  1. C++ 数组下标从 0 开始,到 n-1 结束。不包括下标 n。

第 5 题(判断题,2 分)

字符常量'\0'常用来表示字符串结束,它和字符常量'0'是不同的。

正确答案正确

解析详情
答案 正确字符常量
思路与推导
  1. 字符常量 '\0' 是字符串结束符,其 ASCII 码值为 0;而字符常量 '0' 是字符零,其 ASCII 码值为 48。两者在内存存储和含义上均不相同。

第 6 题(判断题,2 分)

在 C++语言中,可以使用字符(如'0')作为数组下标。

正确答案正确

解析详情
答案 正确数组下标类型
思路与推导
  1. 字符在 C++ 中实质上是整数(ASCII 码),因此可以作为数组下标使用。

第 7 题(判断题,2 分)

在 C++ 语言中,数组被定义时,它的大小就确定了。

正确答案正确

解析详情
答案 正确静态数组性质
思路与推导
  1. 标准 C++ 中的静态数组在编译时或定义时确定大小,之后不能在程序运行过程中改变容量。

第 8 题(判断题,2 分)

计算机中存储的数据都是二进制形式。因此,在使用 C++ 语言编写程序时,将所有十进制数改写为相同数值的二进制数,会使得程序运行效率更高。

正确答案错误

解析详情
答案 错误编译器与运行效率
思路与推导
  1. 编译器会自动将十进制字面量转换为二进制。源代码使用什么进制书写不影响生成的机器码效率,主要是为了方便人类阅读。

第 9 题(判断题,2 分)

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

正确答案错误

解析详情
答案 错误进制字面量比较
思路与推导
  1. 0xf 是十六进制表示,等同于十进制 15;015 是以 0 开头的八进制表示,等同于十进制 13。因此 0xf == 015 的值为 false。

第 10 题(判断题,2 分)

如果 a 为 int 类型的变量,且表达式((a | 3) == 3) 的值为 true,则说明 a 在从 0 到 3 之间(可能为 0、可能为 3)。

正确答案正确

解析详情
答案 正确按位或运算性质
思路与推导
  1. 3 的二进制是 11。如果 a | 11 == 11,说明 a 的所有为 1 的位都必须包含在 11 的为 1 的位中。因此 a 只能是 00, 01, 10, 11,即 0, 1, 2, 3。