2021 年 3 月 和 2020 年 9 月 计算机二级 C 语言 错题整理
某二叉树的中序序列为 DCBAEFG,后序序列为 DCBGFEA,则该二叉树的深度为
A. 5
B. 4
C. 3
D. 2
先序:根 - 左子树 - 右子树
中序:左子树 - 根 - 右子树
后序:左子树 - 右子树 - 根
先中后序是根据根遍历的位置来算的。
程序运行后的输出结果为:
1
2
3
4
5
6
7
8
9#include <stdio.h>
#include <string.h>
void main()
{
char str[20]={"One*World","One*Dream!"};
*p=str[1];
printf("%d,",strlen(p));
printf("%s\n",p);
}A.
9
,One*Dream!
B.
10
,One*Dream!
C.
9
,One*World
D.
10
,One*World
初始化的时候只能初始化为一个值,所以实际上 str
数组内的值为 One*Dream!
。
- 有三个关系 R,S 和 T 如下图所示,关系T违反了哪一类完整性约束()
A. 实体完整性约束
B. 参照完整性约束
C. 用户定义的完整性约束
D. 以上三项
实体完整性:若属性 A 是基本关系 R 的主属性,则 A 不能取空值。
检查和违约处理:
检查主码值是否唯一,如果不唯一则拒绝插入或修改。
检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。
这里面 A 的值为 1,很显然不是空值。
- 参照完整性:若属性 F 是基本关系 R 的外码,它与基本关系 S 的主码 K 相对应,则对于 R 中每个元组在 F 上的值要么为空值,要么等于 S 中某个元组的主码值。
很显然这里面是不满足值相等的。
- 用户定义的完整性:比如唯一性、能否取空值等。
下面描述中正确的是
A. 好的软件设计应是高内聚低耦合
B. 内聚性和耦合性无关
C. 内聚性是指多个模块间相互连接的紧密程度
D. 耦合性是指一个模块内部各部分彼此结合的紧密程度
内聚性是指一个模块内部各部分彼此结合的紧密程度,耦合性是指多个模块间相互连接的紧密程度。
打个比方,内聚性就好像是一个家庭的团结友好程度,耦合性则是多个家庭之间的关联程度。
一个家庭里面肯定是越和睦越好,但是多个家庭之间肯定要互相有一点防备的,不然一户人家出事了,其他家跟着“连坐”,这是对整个社区是不利的。
程序里面也一样,一个模块之间的紧密度越高,程序的稳定性肯定是越好,但是模块之间应该只能有必要的关联,否则一旦一个模块出现了 bug 要修改,其他模块也必须要跟着修改,反而大大增加了工作量。低耦合也可以确保后序增加新功能的时候,尽量少地重构,也方便复用。所以常说一个好的程序是“高内聚、低耦合”。
下列叙述中错误的是
A. 在带链队列中,队头指针和队尾指针都是在动态变化的
B. 在带链栈中,栈顶指针和栈底指针都是在动态变化的
C. 在带链栈中,栈顶指针是在动态变化的,但栈底指针是不变的
D. 在带链队列中,队头指针和队尾指针可以指向同一个位置
带链栈(Linked Stack):带链栈是一种使用链表实现的栈结构。它通常包含一个指向链表顶部的指针,称为栈顶指针。栈的基本操作包括入栈(push)和出栈(pop)。在入栈操作中,新元素被添加到链表的头部,并更新栈顶指针指向该新元素;在出栈操作中,栈顶元素被移除,并更新栈顶指针指向下一个元素。因此,栈顶指针是在动态变化的,但栈底指针并不是常常存在或者不一定需要,因为栈底指针通常不被直接引用或改变。
带链队列(Linked Queue):带链队列是一种使用链表实现的队列结构。它包含指向队列头部和尾部的指针,分别称为队头指针和队尾指针。队列的基本操作包括入队(enqueue)和出队(dequeue)。在入队操作中,新元素被添加到链表的尾部,并更新队尾指针指向该新元素;在出队操作中,队头元素被移除,并更新队头指针指向下一个元素。队头指针和队尾指针都是在动态变化的。在特殊情况下,队头指针和队尾指针可以指向同一个位置,表示队列中只有一个元素。
程序运行后的输出结果是
1
2
3
4int main(){
int i=0;
i=~i;
printf("%d\n", i);}A.
0
B.
1
C.
8
D.
-1
C 语言中,
~
是按位取反操作符,也就是将所有的0
换成1
。但要注意符号位也由0
变成1
,因此结果是-1
。