GESP 客观题评测系统

2023-06-Level-3

2023-06-Level-3

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

单选题(每题 2 分)

1 题(单选题

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

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

正确答案D

解析详情

【答案】D 【考点】计算机基础与开发环境 【解析】高级语言编写的源代码需要经过编译器的编译,转化为机器可以理解并执行的目标代码或可执行文件。 【易错点】混淆编辑、调试与编译的功能。

2 题(单选题

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

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

正确答案D

解析详情

【答案】D 【考点】进制转换 【解析】二进制 11.01 转换:整数部分 1*2^1 + 1*2^0 = 3,小数部分 0*2^-1 + 1*2^-2 = 0 + 0.25 = 0.25。合计为 3.25。 【易错点】小数位权重计算错误。

3 题(单选题

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

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

正确答案A

解析详情

【答案】A 【考点】ASCII 编码 【解析】'A' 是 0x41,'F' 是第 6 个大写字母。十六进制计算:0x41 + (6 - 1) = 0x46。 【易错点】字母顺序偏移量计算错误。

4 题(单选题

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

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

正确答案D

解析详情

【答案】D 【考点】C++ 运算符 【解析】C++ 中没有 ** 运算符。乘方运算通常使用 cmath 库中的 pow 函数。 【易错点】误认为 C++ 有像 Python 一样的乘方运算符 **。

5 题(单选题

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

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

正确答案C

解析详情

【答案】C 【考点】字符串与字符数组 【解析】字符串 "Hello" 包含 5 个可见字符,末尾会自动添加一个空字符 '\0'。因此数组长度为 5 + 1 = 6。 【易错点】忽略字符串末尾的结束符 '\0'。

6 题(单选题

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

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

正确答案A

解析详情

【答案】A 【考点】内存空间计算 【解析】double 类型通常占用 8 字节。数组有 3 个元素,总大小为 3 * 8 = 24 字节。 【易错点】错误记忆 double 类型所占字节数。

7 题(单选题

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

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

正确答案B

解析详情

【答案】B 【考点】数组定义语法 【解析】数组大小必须是整型常量。字符常量 '3' 在底层以其 ASCII 码(整数)存储,因此合法。A 缺少左括号;C 3.0 是浮点数;D 语法错误。 【易错点】不清楚字符常量可以用作数组大小。

8 题(单选题

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

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

正确答案B

解析详情

【答案】B 【考点】进制基础知识 【解析】任何十进制数都可以转换为二进制。基数是否为 2 的整数次幂仅影响转换的简便程度,不影响转换的可行性。 【易错点】误解进制转换的通用性。

9 题(单选题

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

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

正确答案C

解析详情

【答案】C 【考点】数组定义要求 【解析】在定义数组且不进行初始化时,所有类型的数组都需要在 [] 内指定常量。如果进行了初始化,编译器可以根据初始值自动推断大小,此时 [] 内可为空。C 选项说法绝对化。 【易错点】混淆数组定义与初始化的规则。

10 题(单选题

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

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

正确答案D

解析详情

【答案】D 【考点】位运算性质 【解析】异或运算具有自反性:x ^ y ^ y = x。对同一个数连续异或两次,一定会变回原值。 【易错点】忽略移位运算可能导致的溢出或信息丢失。

11 题(单选题

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

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

正确答案C

解析详情

【答案】C 【考点】异或运算判断相等 【解析】异或运算中,两个相等的数异或结果为 0。因此 (a ^ b) == 0 是判断 a == b 的有效方式。 【易错点】误认为除法或位与/位或也能完全等价于相等判断。

12 题(单选题

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

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

正确答案A

解析详情

【答案】A 【考点】位运算对齐 【解析】4 的倍数在二进制中低两位均为 0。~3 的二进制低两位为 0,高位全为 1。a & (~3) 正好将 a 的低两位清零,得到小于等于 a 且是 4 的倍数的最大整数。 【易错点】对位运算实现取整或对齐的逻辑不熟悉。

13 题(单选题

在下列代码的横线处填写( ),可以使得输出是“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 【考点】异或交换变量 【解析】三行异或可以交换两变量: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”。

#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 【考点】最小值查找逻辑 【解析】代码中 min 被初始化为 0。数组中所有元素均大于 0,因此 min > array[i] 永远不成立,min 会一直保持为 0。要找最小值,通常应将 min 初始化为数组首元素或极大值。 【易错点】忽略初始化对后续比较逻辑的影响。

15 题(单选题

在下列代码的横线处填写( ),可以使得输出不是“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 【考点】位运算与累加 【解析】数组元素是 2 的幂。累加(+)、按位或(|)、按位异或(^)结果均为 31。但按位与(&)在 res 初始为 0 时结果始终为 0。 【易错点】不理解不同位运算在处理 2 的幂时的特殊性。

判断题(每题 2 分)

1 题(判断题

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

正确答案错误

解析详情

【答案】错误 【考点】算法描述方式 【解析】算法可以用自然语言、伪代码、流程图或编程语言描述。自然语言只要逻辑清晰,也是可行的。 【易错点】误以为算法只能用严格的代码或数学语言描述。

2 题(判断题

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

正确答案错误

解析详情

【答案】错误 【考点】域名结构知识 【解析】在域名 gesp.ccf.org.cn 中,顶级域名是位于最右侧的部分,即 cn。 【易错点】弄错顶级域名在域名字符串中的位置。

3 题(判断题

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

正确答案错误

解析详情

【答案】错误 【考点】数据编码 【解析】除了原码、反码、补码,还有移码等其他编码方式。此外字符、图像等数据也有各自的编码方案。 【易错点】将整数的常用编码视为所有数据的唯一编码方式。

4 题(判断题

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

正确答案错误

解析详情

【答案】错误 【考点】数组下标范围 【解析】C++ 数组下标从 0 开始,到 n-1 结束。不包括下标 n。 【易错点】习惯于 1 开始计数或混淆闭区间边界。

5 题(判断题

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

正确答案正确

解析详情

【答案】正确 【考点】字符常量 【解析】字符常量 '\0' 是字符串结束符,其 ASCII 码值为 0;而字符常量 '0' 是字符零,其 ASCII 码值为 48。两者在内存存储和含义上均不相同。 【易错点】混淆字符常量 '\0' 与字符 '0'。

6 题(判断题

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

正确答案正确

解析详情

【答案】正确 【考点】数组下标类型 【解析】字符在 C++ 中实质上是整数(ASCII 码),因此可以作为数组下标使用。 【易错点】误以为下标必须是显式的整数字面量或整型变量。

7 题(判断题

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

正确答案正确

解析详情

【答案】正确 【考点】静态数组性质 【解析】标准 C++ 中的静态数组在编译时或定义时确定大小,之后不能在程序运行过程中改变容量。 【易错点】混淆静态数组与动态容器(如 vector)的区别。

8 题(判断题

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

正确答案错误

解析详情

【答案】错误 【考点】编译器与运行效率 【解析】编译器会自动将十进制字面量转换为二进制。源代码使用什么进制书写不影响生成的机器码效率,主要是为了方便人类阅读。 【易错点】误认为书写格式直接影响运行效率。

9 题(判断题

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

正确答案错误

解析详情

【答案】错误 【考点】进制字面量比较 【解析】0xf 是十六进制表示,等同于十进制 15;015 是以 0 开头的八进制表示,等同于十进制 13。因此 0xf == 015 的值为 false。 【易错点】对 C++ 中不同进制前缀(0x 为十六进制,0 为八进制)的识别。

10 题(判断题

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

正确答案正确

解析详情

【答案】正确 【考点】按位或运算性质 【解析】3 的二进制是 11。如果 a | 11 == 11,说明 a 的所有为 1 的位都必须包含在 11 的为 1 的位中。因此 a 只能是 00, 01, 10, 11,即 0, 1, 2, 3。 【易错点】不理解位运算对数值范围的限制逻辑。