Analyse des réponses aux questions de l'examen du premier cycle CSP-J 2022

Questions du premier tour du CSP-J 2022

1. Questions à choix multiples (15 questions au total, 2 points pour chaque question, 30 points au total ; chaque question a et une seule option correcte)

  1. Laquelle des fonctionnalités suivantes n'implique pas la prise en charge des fonctionnalités orientées objet du langage C++ : ( ).
    A. Appel de la fonction printf en
    C++ B. Appel d'une fonction membre de classe définie par l'utilisateur
    en C++ C. Construction d'une classe ou d'un struct
    en C++ D. Construction de plusieurs classes dérivées à partir de la même classe de base en C++

Réponse : Choisissez A.
printf est une fonction qui peut être utilisée en langage C, tandis que la définition d'une classe ou d'une structure en C++, l'appel de fonctions membres à partir d'un objet et la construction d'une classe dérivée sont toutes des opérations qui ne peuvent être prises en charge que par les langages orientés objet.

  1. Il y a 6 éléments, entrez la pile S dans l'ordre de 6, 5, 4, 3, 2, 1. Laquelle des séquences pop-out suivantes est illégale
    ( ).
    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

Réponse : Choisissez C.
Le problème du problème de séquence d'empilement et d'éclatement est résolu comme suit : si la valeur a est extraite de la pile, alors les éléments poussés dans la pile avant a ont soit été extraits de la pile, soit sont disposés séquentiellement dans la pile.
Dans l'option C, lorsque 4 est sorti de la pile, les 6 et 5 qui ont été poussés dans la pile avant 4 doivent être dans la pile.La situation est : le bas de la pile -6-5. Donc, la prochaine étape n'est pas 6 pops, seulement 5 pops.

  1. Le comportement de l'exécution de l'extrait de code suivant est ( ).
    int x = 101;
    int y = 201;
    int *p = &x;
    int *q = &y;
    p = q;
    A. Attribuez la valeur de x à 201
    B. Attribuez la valeur de y à 101
    C. Attribuez q à x D. Pointez p sur l' adresse
    de y

Réponse : Choisissez D.
p est un pointeur vers x, qui est l'adresse de x. q est un pointeur vers y, qui est l'adresse de y. Affecter q à p signifie changer p d'un pointeur vers x en un pointeur vers y.

  1. La différence entre une liste chaînée et un tableau inclut ( ).
    A. Les tableaux ne peuvent pas être triés, mais les listes liées peuvent
    . B. Les listes liées peuvent stocker plus d'informations que les tableaux
    . C. La taille du tableau est fixe et la taille de la liste liée peut être ajustée dynamiquement
    .

Réponse : Choisissez C.
Option A : les tableaux et les listes chaînées peuvent être triés. Par exemple, le tri à bulles, il n'y a que l'opération d'échange d'éléments adjacents, qui peut être effectuée à la fois dans des tableaux et des listes chaînées.
Option B : les informations que les listes liées et les tableaux peuvent stocker dépendent de leur longueur, celle qui est la plus longue peut stocker plus d'informations.
L'option C est correcte. Une fois le tableau alloué, la longueur du tableau est fixée. La liste liée peut demander et libérer des nœuds, et la taille peut être ajustée dynamiquement.

  1. Supposons que l'état initial de la pile S et de la file d'attente Q soit vide. Il existe six données e1 à e6 mutuellement différentes, chaque donnée est exploitée dans l'ordre de la pile S, de la pop S, de la file d'attente Q et de la file d'attente Q, et les opérations entre différentes données peuvent être entrelacées. On sait que les données e1 , e2 , e3 , e4 , e5 et e6 sont poussées dans la pile en séquence dans la pile S, et les données e2 , e4 , e3 , e6 , e5 et e1 sont retirées en séquence dans la file d'attente Q. Alors la capacité de la pile S est d'au moins ( ) données.
    A. 2
    B. 3
    C. 4
    D. 6

Réponse : Choisissez B.
La pile est le dernier entré, le premier sorti et la file d'attente est le premier entré, le premier sorti.
L'ordre dans lequel la file d'attente est retirée de la file d'attente est l'ordre dans lequel la file d'attente est entrée. L'ordre dans lequel la file d'attente est entrée est l'ordre dans lequel la pile est dépilée. La question devient donc :
la séquence d'empilement connue est : e1, e2, e3, e4, e5, e6, et la séquence d'empilement est : e2, e4, e3, e6, e5, e1, quel est le processus d'empilement et d'éclatement ? Le nombre maximum d'éléments dans la pile.
Selon l'ordre d'empilement et d'éclatement, on peut savoir :

fonctionner La situation dans la pile (le côté gauche est le bas de la pile) séquence pop
e1 pousse la pile e1
e2 pousse la pile e1,e2
e2 fait éclater la pile e1 e2
poussée e3 e1,e3 e2
poussée e4 e1, e3, e4 e2
pop e4 e1,e3 e2,e4
pop e3 e1 e2, e4, e3
poussée e5 e1,e5 e2, e4, e3
poussée e6 e1, e5, e6 e2, e4, e3
pop e6 e1,e5 e2, e4, e3, e6
e5 fait éclater la pile e1 e2, e4, e3, e6, e5
e1 fait apparaître la pile e2, e4, e3, e6, e5, e1

Selon le tableau ci-dessus, le nombre maximum d'éléments dans la pile est de 3.

  1. L'expression de préfixe pour l'expression a+(bc)*d est ( ), où + , - , * sont des opérateurs.
    A. *+a-bcd
    B. +a*-bcd
    C. abc-d*+
    D. abc-+d

Réponse : Choisissez B.
Expression infixée à expression préfixée. Calculez d'abord bc, puis changez en -bc. Alors X*d (X est bc) devient *Xd. Remplacez l'expression de préfixe de X par *-bcd. Enfin, c'est a+X (X est (bc)*d), qui devient +aX, et l'expression préfixe de X est substituée en +a*-bcd.

  1. Supposons que la fréquence de l'alphabet {a, b, c, d, e} dans la chaîne est de 10 %, 15 %, 30 %, 16 %, 29 % respectivement. Si le codage de Huffman est utilisé pour coder des lettres de longueur variable, la longueur de codage de la lettre d est de ( ) bits.
    A. 1
    B. 2
    C. 2 ou 3
    D. 3

Réponse : Choisissez B
pour examiner les arbres de Huffman et le codage de Huffman. La méthode de construction d'un arbre de Huffman consiste à sélectionner à chaque fois deux nœuds avec les plus petits poids et à ajouter les nœuds parents pour former un arbre.
Il y a un total de 5 nœuds initialement, et les poids de chaque nœud sont : a : 10, b : 15, c : 30, d : 16, e : 29
pour sélectionner les deux nœuds a et b avec les plus petits poids, Soit nœud f soit les parents de a et b, avec un poids de 25.
Sélectionnez les deux nœuds f et d avec les plus petits poids, et laissez le nœud g être les parents de f et d, avec un poids de 41.
Sélectionnez les deux nœuds c et e avec les plus petits poids, et laissez le nœud h être les parents de c et e avec un poids de 59.
Sélectionnez les deux nœuds g et h avec les plus petits poids, et laissez le nœud i être les parents de g et h avec un poids de 100.
L'arborescence résultante est illustrée dans la figure ci-dessous.
Dans l'arbre de Huffman, à partir du nœud racine, un bit supplémentaire est codé pour chaque couche vers le bas. Selon l'arbre de Huffman construit, le code de d est de deux bits.

i:100
g:41
h:59
c:30
e:29
f:25
d:16
a:10
b:15
  1. 一棵有 n 个结点的完全二叉树用数组进行存储与表示,已知根结点存储在数组的第 1 个位置。若存储在数组第9个位置的结点存在兄弟结点和两个子结点,则它的兄弟结点和右子结点的位置分别是( )。
    A. 8 、 18
    B. 10 、 18
    C. 8 、 19
    D. 10 、 19

答:选C
二叉树的顺序存储结构中,第i结点的左孩子的下标为2*i,右孩子的下标为2*i+1,双亲的下
标为i/2。
因此第9位置结点一定是第4结点的右孩子(左孩子下标都是偶数,右孩子下标都是奇数)。
该结点的兄弟结点是4的左孩子,在数组中的下标应该比9少1,为8。
9的右孩子的下标为9*2+1=19。

  1. 考虑由N个顶点构成的有向连通图,采用邻接矩阵的数据结构表示时,该矩阵中至少存在( )个非零元素。
    A. N-1
    B. N
    C. N+1
    D. N^2

答:选A。
有向连通图,分为强连通图、单向连通图、弱连通图。若把有向边都当做无向边,如果这个无向图是连通图,那么这个图是弱连通图。
n个顶点的无向图,最少有n-1条边。那么这个有向图中最少有n-1条边,就可以构成弱连通图。有向图中每条边在邻接矩阵中就是一个元素,占一个位置,因此至少存在n-1个非零元素。

  1. 以下对数据结构的表述不恰当的一项为:( )。
    A. 图的深度优先遍历算法常使用的数据结构为栈。
    B. 栈的访问原则为后进先出,队列的访问原则是先进先出。
    C. 队列常常被用于广度优先搜索算法。
    D. 栈与队列存在本质不同,无法用栈实现队列。

答:选D
选项A:图的深度优先遍历算法经常用递归来完成,而递归实际是利用了C++中的函数递归调用栈,本质上是使用了栈的结构。实际上,如果直接使用栈,也可以完成图的深度优先遍历。
选项B、C都是正确的表述。
选项D中,栈与队列本质上都是功能受限的线性表,本质是相同的。用栈实现队列,虽然平时不会这样做,这样做也没什么意义,但还是可以实现的。
设栈s1与s2来实现一个队列的功能:
入队:元素入栈s1
出队:如果栈s2不为空,那么栈s2出栈。如果s2为空,那么把s1中的所有元素出栈并入栈到s2,而后s2出栈。

  1. 以下哪组操作能完成在双向循环链表结点 p 之后插入结点 s 的效果(其中, next 域为结点的直接后继, prev 域为结点的直接前驱):( )。
    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;

答:选D。
观察选项可知,四个选项为这四个语句的不同排列:
s->prev=p;
s->next=p->next;
p->next=s;
p->next->prev=s;
这里发生变化,又可能给其它量赋值的就是p->next。
使p->next发生变化的语句为:p->next=s;
而s->next=p->next;与p->next->prev=s;中用到的都应该是变化前的p->next,指向的是原来p的下一个结点。
所以p->next=s;应该放在最后,选D。

  1. 以下排序算法的常见实现中,哪个选项的说法是错误的:( )。
    A. 冒泡排序算法是稳定的
    B. 简单选择排序是稳定的
    C. 简单插入排序是稳定的
    D. 归并排序算法是稳定的

答:选B
考察排序的稳定性。选择排序是不稳定的,冒泡、插入、归并都是稳定的。

  1. 八进制数 32.1 对应的十进制数是( )。
    A. 24.125
    B. 24.250
    C. 26.125
    D. 26.250

答:选C
进制转换问题,八进制转十进制的方法为:按位权展开。
整数部分: 3 ∗ 8 1 + 2 ∗ 8 0 = 26 3*8^1+2*8^0=26 381+280=26
小数部分: 1 ∗ 8 − 1 = 0.125 1*8^{-1}=0.125 181=0.125
因此八进制32.1为十进制26.125,选C。

  1. 一个字符串中任意个连续的字符组成的子序列称为该字符串的子串,则字符串 abcab 有
    ( )个内容互不相同的子串。
    A. 12
    B. 13
    C. 14
    D. 15

答:选A。
abcab的不相同子串有:
长为1的子串:a,b,c
长为2的子串:ab,bc,ca
长为3的子串:abc,bca,cab
长为4的子串:abca,bcab
长为5的子串:abcab
共有12个。

  1. 以下对递归方法的描述中,正确的是:( )
    A. 递归是允许使用多组参数调用函数的编程技术
    B. 递归是通过调用自身来求解问题的编程技术
    C. 递归是面向对象和数据而不是功能和逻辑的编程语言模型
    D. 递归是将用某种高级语言转换为机器代码的编程技术

答:选B。
选项A:不清楚什么叫“多组参数调用函数”,任意一个带参函数,都可以用多组参数来调用。
选项B:论述正确。
选项C:面向对象编程(或者说“类”)是面向对象和数据而不是功能和逻辑的编程语言模型。
选项D:编译是将用某种高级语言转换为机器代码的编程技术

二、阅读程序

阅读程序(1) 第16-21题
阅读程序(2) 第22-27题
阅读程序(3) 第28-34题

三、完善程序

完善程序(1) 第35-39题
完善程序(2) 第40-44题

おすすめ

転載: blog.csdn.net/lq1990717/article/details/126971665