CSP-J 2022基础知识答案与解析
1.以下哪种功能没有涉及 C++语言的面向对象特性支持:( )。
(2 分)
A.C++中调用 printf 函数
B.C++中调用用户定义的类成员函数
C.C++中构造一个 class 或 struct
D.C++中构造来源于同一基类的多个派生类
解析:printf是继承自C的,C是纯面向过程的
2.有 6 个元素,按照 6、5、4、3、2、1 的顺序进入栈 S,请问下列哪个出栈序列是非法的
( )。
(2 分)
A.5 4 3 6 1 2
B.4 5 3 1 2 6
C.3 4 6 5 2 1
D.2 3 4 1 5 6
栈先进后出,C选项3,4出栈,说明此时6,5都在栈中,这时不可能6先出,其他选项模拟即可
3.运行以下代码片段的行为是( )。
int x = 101;
int y = 201;
int *p = &x;
int *q = &y;
p = q;
(2 分)
A.将 x 的值赋为 201
B.将 y 的值赋为 101
C.将 q 指向 x 的地址
D.将 p 指向 y 的地址
考察指针和地址。 第三行 p 指向了 x, 第四行 q 指向了 y, 最后 p 改指 y。
4.链表和数组的区别包括( )。
(2 分)
A.数组不能排序,链表可以
B.链表比数组能存储更多的信息
C.数组大小固定,链表大小可动态调整
D.以上均正确
题不太严谨,但是这里给个解析:数组,如 int ar[10000]; ,他的大小永远都是10000,但是链表插入/删除掉一个元素时,他的大小会改变,所以C
5.对假设栈 S 和队列 Q 的初始状态为空。存在 e1~e6 六个互不相同的数据,每个数据按照进栈 S、出栈 S、进队列 Q、出队列 Q 的顺序操作,不同数据间的操作可能会交错。已知
栈 S 中依次有数据 e1、e2、e3、e4、e5 和 e6 进栈,队列 Q 依次有数据 e2、e4、e3、e6、e5 和 e1 出队列。则栈 S 的容量至少是( )个数据。
(2 分)
A.2
B.3
C.4
D.6
出栈、进队、出队连着的,因此直接视为出栈就行了,按照出栈序列,至少为3个
画出表达树,后序遍历即可
画出哈夫曼树, 看 d 所在的层数即可。
考察完全二叉树的线性数组表示法。根节点 i 的左右孩子分别是 2i 和 2i+1。也可以直接画出二叉树观察。
9.考虑由 N 个顶点构成的有向连通图,采用邻接矩阵的数据结构表示时,该矩阵中至少存在( )个非零元素。
A.N-1
B.N
C.N+1
D.
N 个节点连通, 至少需要 N-1条边
??? 想看的去这里
11.
以下哪组操作能完成在双向循环链表结点 p 之后插入结点 s 的效果(其中,next 域为结点的直接后继,prev 域为结点的直接前驱):( )。
(2 分)
A.p->next->prev=s; s->prev=p; p->next=s; s->next=p->next;
B.p->next->prev=s; p->next=s; s->prev=p; s->next=p->next;
C.s->prev=p; s->next=p->next; p->next=s; p->next->prev=s;
D.s->next=p->next; p->next->prev=s; s->prev=p; p->next=s;
A 选项最后一步错了,s->next 指向 s 自己了;B 选项最后一步还是 s->next 指向 s 自己了。C 选项最后一步还是将 s->next 指向自己了。
12.以下排序算法的常见实现中,哪个选项的说法是错误的:( )。
(2 分)
A.冒泡排序算法是稳定的
B.简单选择排序是稳定的
C.简单插入排序是稳定的
D.归并排序算法是稳定的
常识啊……记住就好了……
13.八进制数 32.1 对应的十进制数是( )。
(2 分)
A.24.125
B.24.250
C.26.125
D.26.250
整数部分:3*8+2=26,小数部分:1÷8=0.125,C
解析:自己一个一个枚举最后+1(又没说不能空串)
解析:阿克曼函数就是一个典型的递推,这是他的执行方式
我们来看一下
在两个else if都调用了自己
伪代码(?)
代码
好了,基础知识讲解完毕,其他请见下个帖子
原文地址:https://blog.csdn.net/Tjnk_bj/article/details/140846165
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!