目录
单项选择题:
第1题
在 C++中,下面哪个关键字用于声明一个变量,其值不能被修改?()
A.unsigned
B.const
C.static
D.mutable
【参考答案】B
【知识点】关键字
【解析】
unsigned:无符号变量,默认是非负数
const:恒定变量,无法被修改
static:静态局部变量,类似于全局变量
mutable:可变的变量。mutable也是为了突破const的限制而设置的。被mutable修饰的变量(mutable只能用于修饰类的非静态数据成员),将永远处于可变的状态
第2题
八进制数12345670(8进制)和07654321(8进制)的和为()。
A.222222218
B.211111118
C.221111118
D.222222118
【参考答案】D
【知识点】八进制计算
【解析】逢8进1,对齐计算就好了。
第3题
阅读下述代码,请问修改 data 的 value 成员以存储3.14,正确的方式是()。
union Data{
int num;
float value;
char symbol;
};
union Data data;
A.data.value = 3.14;
B.value.data=3.14;
C.data->value = 3.14;
D.value->data = 3.14;
【参考答案】A
【知识点】联合体
【解析】union是联合体,它内部只能有一个变量起作用,用法和struct类似,所以答案选A,其中CD选项的“->”用于指针。
第4题
假设有一个链表的节点定义如下:
struct Node{
int data;
Node* next;
};
现在有一个指向链表头部的指针:Node* head,如果想要在链表中插入一个新节点。其成员 data 的值为42,并使新节点成为链表的第一个节点,下面哪个操作是正确的?()
A. Node* newNode = new Node; newNode -> data = 42; newNode -> next = head; head = newNode;
B.Node* newNode = new Node; head -> data = 42; newNode -> next = head; head = newNode;
C.Node* newNode = new Node; newNode -> data = 42;head -> next = newNode;
D.Node* newNode = new Node; newNode -> data = 42;newNode->next = head;
【参考答案】A
【知识点】链表的插入
【解析】
向链表头部中插入数据newNode的流程是:
1. 初始化待插入数据newNode:Node* newNode = new Node;newNode -> data = 42;
2. 将newNode的next指针指向:head:newNode -> next = head;
3. 将head指针指向newNode:head = newNode;
第5题
根节点的高度为1,一棵拥有 2023 个节点的三又树高度至少为()。
A.6
B.7
C.8
D.9
【参考答案】C
【知识点】树的结构
【解析】满三叉树的节点数为 ,2023个节点介于7层到8层之间,所以最少需要8层二叉树,所以至少8层
第6题
小明在某一天中依次有七个空闲时间段,他想要选出至少一个空闲时间段来练习唱歌,但他希望任意两个练习的时间段之间都有至少两个空闲的时间段让他体息,则小明一共有()种选择时间段的方案。
A.31
B.18
C.21
D.33
【参考答案】B
【知识点】排列组合
【解析】只选一个练习时间段的有7种,选2个练习时间段的有10种,选3个联系时间段的有1 种,故总数为18 种
第7题
以下关于高精度运算的说法错误的是().
A.高精度计算主要是用来处理大整数或需要保多位小数的运算。
B.大整数除以小整数的处理的步骤可以是,将被除数和除数对齐,从左到右逐位尝试将
除数乘以某个数,通过减法得到新的被除数,并累加商。
C.高精度乘法的运算时间只与参与运算的两个整数中长度较长者的位数有关。
D.高精度加法运算的关键在于逐位相加并处理进位。
【参考答案】C
【知识点】高精度计算
【解析】高精度乘法的运算时间与两个整数的位数的乘积有关,而不仅仅是较长者的位数。位数的增加会导致乘法的复杂度呈指数级增长,需要更多的计算步骤和时间。
第8题
8.后缀表达式“6 2 3 + - 3 8 2 / + * 2 ^ 3 +”对应的中缀表达式是()。
A.((6 - (2 + 3)) * (3 + 8 / 2)) ^ 2 + 3
B.6 - 2 + 3 * 3 + 8 / 2 ^ 2 + 3
C.(6 - (2 + 3)) * ((3 + 8 / 2) ^ 2) + 3
D.6 - ((2 + 3) * (3 + 8 / 2)) ^ 2 + 3
【参考答案】A
【知识点】后缀表达式与中缀表达式
【解析】
根据后缀表达式到中缀表达式的转换规则,我们可以逆序遍历后缀表达式并使用栈来构建中缀表达式。遇到数字时,直接将其入栈;遇到运算符时,从栈中弹出相应数量的操作数,并按照运算符和操作数之间的优先级进行括号添加,然后将结果再次入栈。
对于给定的后缀表达式 6 2 3 + - 3 8 2 / + * 2 ^ 3 + ,我们可以通过上述方法得到中缀表达式为:
因此,选项 A. ((6 - (2 + 3)) * (3 + 8 / 2)) ^ 2 + 3 是正确的答案。
第9题
数101010(2进制)和166(8进制)的和为 ()。
A.101100002
B.2368
C.15810
D.A016
【参考答案】D
【知识点】进制转换
【解析】
将二进制数
转换为十进制得到 $42$,将八进制数
转换为十进制得到118。
将十进制数42和118相加得到160。
现在我们将160转换为十六进制,得到
第10题
假设有一组字符(a,b,c,d,e,f),对应的频率分别为 5%、9%、12%、13%、16%、45%。请问以下哪个选项是字符 a,b,c,d,e,f分别对应的一组哈夫曼编码? ()
A.1111, 1110, 101, 100, 110, 0
B.1010,1001,1000,011, 010,00
C.000,001,010,011, 10, 11
D.1010,1011,110,111, 00,01
【参考答案】A
【知识点】哈夫曼编码
【解析】
根据哈夫曼编码的生成过程,我们可以按照如下步骤得到字符 a,b,c,d,e,f分别对应的哈夫曼编码:
1.将所有字符按照出现频率从小到大排序,得到字符序列 {a,b,c,d,e,f}
2.取出频率最小的两个字符 a和 $b$,构建一棵二叉树,并将其根节点的频率设置为 a和 b 的频率之和(即 5%+9%=14%)。
3.将原序列中的a和b删除,并将新生成的节点插入到序列中,得到新的字符序列{c,d,e,f,ab}。
重复步骤 2和 3,直到得到一棵包含所有字符的二叉树。
对于每条从根节点到叶子节点的路径,用 0表示向左走,用 1表示向右走,得到对应字符的哈夫曼编码a(1111),b(1110),c(101),d(100),e(110),f(0)
第11题
给定一棵二叉树,其前序遍历结果为: ABDECFG,中序遍历结果为: DEBACFG。请问这树的正确后序遍历结果是什么?()
A.EDBFGCA
B.EDGBCFA
C.DEBGFCA
D.DBEGFCA
【参考答案】A
【知识点】二叉树的遍历
【解析】根据前序遍历和中序遍历画出二叉树,根据求得的二叉树,生成后序遍历。
第12题
考虑一个有向无环图,该图包含 4 条有向边:(1,2),(1,3),(2,4)和(3,4)。以下哪个选项是这个有向无环图的一个有效的拓扑排序?()
A.4, 2, 3, 1
B.1, 2, 3, 4
C.1, 2, 4, 3
D.2, 1, 3, 4
【参考答案】B
【知识点】有向图的拓扑序
【解析】
拓扑排序是有向无环图中对顶点进行排序的一种方法,使得所有的有向边从排在前面的顶点指向排在后面的顶点。根据提供的有向边 (1,2),(1,3),(2,4),(3,4),我们可以确定拓扑排序的正确选项。
根据拓扑排序的定义,我们需要先排列没有前置依赖的顶点。根据上述关系,只有顶点 1没有前置依赖,所以它必须是拓扑排序的第一个顶点。
接下来,根据关系 (1,2)和 (1,3),顶点 2 和 3 是直接依赖于顶点 1的,它们应该在 1 后面。
最后,根据关系 (2,4) 和 (3,4),顶点 4 是直接依赖于顶点 2 和 3的,所以它们也应该在 2 和 3 后面。
所以有效的拓扑排序应该为 1,2,3,4 或者 1,3,2,4
第13题
在计算机中,以下哪个选项描述的数据存储容量最小? ()
A.字节(byte)
B.比特(bit)
C.字(word)
D.千字节 (kilobyte)
【参考答案】B
【知识点】计算机储存单位
【解析】
比特bit是计算机中最基本的单位,用来表示二进制数据的单个位,可以取0或1两个值。比特是计算机中最小的存储单位。
字节byte是计算机中常用的数据存储单位,它由8个比特组成,可以用来表示一个字符或8个二进制位。字节是相对于比特来说更常用的单位。
字word通常指计算机中一个机器字的大小,表示计算机一次能够处理的二进制位数,其大小由机器的架构决定。
千字节kilobyte是计算机中常用的数据存储容量单位,等于1024字节,用来表示较小的数据量。
第14题
一个班级有10个男生和12个女生。如果要选出一个3人的小组,并且小组中必须至少包含1个女生,那么有多少种可能的组合? ()
A.1420
B.1770
C.1540
D.2200
【参考答案】A
【知识点】排列组合
【解析】
要选出一个 3 人的小组,并且小组中必须至少包含 1个女生。
我们可以按照以下几种情况进行计算:
情况一:选取 1 个女生和 2个男生。
选择女生的方式有 12 种,选择男生的方式有
总共的组合方式为 12 * 45 = 540 种。
情况二:选取 2 个女生和 1个男生。
选择女生的方式有
选择男生的方式有 10种。
总共的组合方式为 66 * 10 = 660 种。
情况三:选取 3个女生。
选择女生的方式有
总共的组合方式为220种。
综上所述,总共的可能的组合方式为 540 + 660 + 220 = 1420 种
第15题
以下哪个不是操作系统?()
A.Linux
B.Windows
C.Android
D.HTML
【参考答案】D
【知识点】操作系统
【解析】
HTML(超文本标记语言)是一种用于创建网页的标记语言,它并不是操作系统。HTML主要用于描述网页的结构和内容,而不是提供操作系统所需的核心功能,如管理资源、调度任务和控制硬件等。
Linux、Windows 和 Android都是常见的操作系统。
Linux 是一种开源的操作系统,被广泛应用于服务器和嵌入式设备等领域。
Windows 是由微软公司开发的操作系统,用于个人电脑和服务器等。
Android是由谷歌开发的移动设备操作系统,用于智能手机、平板电脑等移动设备。