2023年GESP12月认证C++五级试卷解析
一、
单选题(每题
2
分,共
30
分)
题号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
答案
C
C
D
A
B
A
C
B
D
B
D
B
B
C
B
1
、下面
C++
代码用于求斐波那契数列,该数列第
1
、
2
项为
1
,以后各项均是前两项之和。下面有关说法错误的是
( )
。
A.
fiboA
( )
⽤
递归
⽅
式,
fiboB
()
循环
⽅
式
B.
fiboA
( )
更加符合斐波那契数列的数学定义,直观易于理解,
⽽
fiboB
()
需要将数学定义转换为计算机程序实现
C.
fiboA
( )
不仅仅更加符合数学定义,直观易于理解,且因代码量较少执
⾏
效率更
⾼
D.
fiboB
( )
虽然代码量有所增加,但其执
⾏
效率更
⾼
【答案】
C
【考纲知识点】算法知识点
【解析】
fiboA
是很好理解的,但是执行效率不高,有的计算是重复的,导致效率低。
2
、下
⾯
C++
代码以递归
⽅
式实现合并排序 ,并假设
merge (int T[], int R[], int s, int m, int t)
函数将有序(同样排序规则) 的
T[
s..m
]
和
T[m+1..t]
归并到
R[
s..t
]
中 。横线处应填上代码是
( )
。
A.
mergeSort
(
SList
, T2, s,
m,len
),
mergeSort
(
SList
, T2,
m,t,len
)
B.
mergeSort
(
SList
, T2, s, m-1,len),
mergeSort
(
SList
, T2, m+1,t,len)
C.
mergeSort
(
SList
, T2, s,
m,len
),
mergeSort
(
SList
, T2, m+1,t,len)
D.
mergeSort
(
SList
, T2, s, m-1,len),
mergeSort
(
SList
, T2, m-1,t,len)
【答案】
C
【考纲知识点】算法知识点
【解析】本题考察归并排序。归并排序需要先将排序序列一分为二,左边的元素的区间是
[
s,m
],
右边元素区间是
[m+1,t]
,然后递归排序两个子序列后,将有序的子序列合并。
3
、阅读下
⾯
的
C++
代码 ,执
⾏
后其输出是
( )
。
A. 1->120<===>2->120
B. 1->120<===>1->120
C. 1->120<===>1->2->3->4->5->120
D. 1->120<===>2->3->4->5->6->120
【答案】
D
【考纲知识点】算法知识点
【解析】本题考察递归算法。输出
fracA
函数,是先输出
1
,再输出
5
的阶乘,
120
;
23
行代码,执行
fracB
函数,此时
stepCount
从
2
开始计数,依次输出
2/3/4/5/6
,再输出
5
的阶乘
120
。
4
、下
⾯
的
C++
⽤
于对
lstA
排序,使得偶数在前奇数在后,横线处应填
⼊
( )
。
A.
isEven
(
lstA
[j]) && !
isEven
(
lstA
[j+1])
B. !
isEven
(
lstA
[j]) &&
isEven
(
lstA
[j+1])
C.
lstA
[j] >
lstA
[j+1]
D.
lstA
[j] <
lstA
[j+1]
【答案】
A
【考纲知识点】排序算法知识点
【解析】本题考察排序算法。前一个数字,下标是
j
的数字是偶数,后面的数字下标是
j+1
的是奇数,按照要求,偶数在奇数的后面,要交换。
A
符合题意条件。
5
、下
⾯
的
C++
代码用于将字符串保存到带头节点的双向链表中,并对重复的串计数,然后将最新访问的串的节点放在链头便于查找。横线处应填
⼊
代码是( )。
A. if(
pHead
) {p->next =
pHead
->next,
pHead
->next->
prev
= p;}
B. if(
pHead
->next){p->next =
pHead
->next,
pHead
->next->
prev
= p;}
C. p->next =
pHead
->next,
pHead
->next->
prev
= p;
D.
触发异常 ,不能对空指针进
⾏
操作。
【答案】
B
【考纲知识点】指针知识点
【解析】本题考察双链表知识点。每个节点需要
2
个指针,指向前驱节点和后继节点。按照要求,新的节点要求插入到链表头部。头节点和新插入的节点都需要修改。
B
选项能够完成新节点的插入。
6
、有关下
⾯
C++
代码说法正确的是( )。
A.
如果
x
⼩
于
10
,
rc
值也不会超过
20
B. foo
可能
⽆
限递归
C. foo
可以求出
x
和
y
的最
⼤
公共质因
⼦
D. foo
能够求出
x
和
y
的最
⼩
公倍数
【答案】
A
【考纲知识点】数学知识点
【解析】本题考察数学算法,求最大公约数。这是典型的最大公约数写法的变形。排除法选
A
。
7
、下
⾯
的
C++
代码实现对
list
的快速排序,有关说法,错误的是( )。
A.
qSort
(less) +
qSort
(greater) + (vector<int>)pivot
B. (vector<int>)pivot + (
qSort
(less) +
qSort
(greater))
C. (
qSort
(less) + (vector<int>)pivot +
qSort
(greater))
D.
qSort
(less) + pivot +
qSort
(greater)
【答案】
C
【考纲知识点】排序算法知识点
【解析】本题考察快速排序。
Less
数组保存的是小于等于
pivot
,然后加上
pivot
元素,再加上大于等于
pivot
的数组。
8
、下面
C++
代码中的
isPrimeA
( )
和
isPrimeB
( )
都
⽤
于判断参数
N
是否素数,有关其时间复杂度的正确说 法是( )。
A.
isPrimeA
( )
的最坏时间复杂度是
0
(
),
isPrimeB
( )
的最坏时间复杂度是
0(
logN
)
,
isPrimeA
()
优于
isPrimeB
()
B.
isPrimeA
()
的最坏时间复杂度是
0
(
),
isPrimeB
( )
的最坏时间复杂度是
0
(
N
),
isPrimeB
()
绝
⼤
多数情况下优于
isPrimeA
()
C.
isPrimeA
()
的最坏时间复杂度是
0(N
)
,
isPrimeB
2023年GESP12月认证C++五级试卷解析,2023年12月GESP认证C++五级真题试卷答案解析