2023 年 12 月认证 C++ 五级真题解析

一、单选题(每题 2 分,共 30 分)

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 是否素数 , 有关其时间复杂度的正确说 法是( )。
【答案】 B
【考纲知识点】数学知识点
【解析】本题考察数学知识,判断质数。 A 函数时间复杂度是 O(n/2) B 函数算 法是 O(sqrt(n)) ,大部分情况后者是优的,值更小。
     
9 、下 C++ 代码 于有序 list ⼆分查找 ,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值