2023 年 12 月认证 C++ 五级真题解析
CCF 编程能力等级认证 ,英文名 Grade Examination of Software Programming ( 以
下简称 GESP ),由中国计算机学会发起并主办 ,是为青少年计算机和编程学习者提供学业
能力验证的平台。 GESP 覆盖中小学全学段,符合条件的青少年均可参加认证。 GESP 旨在
提升青少年计算机和编程教育水平,推广和普及青少年计算机和编程教育。
GESP 考察语言为图形化( Scratch )编程、 Python 编程及 C++ 编程,主要考察学生
掌握相关编程知识和操作能力 ,熟悉编程各项基础知识和理论框架 ,通过设定不同等级的考
试目标 ,让学生具备编程从简单的程序到复杂程序设计的编程能力 ,为后期专业化编程学习
打下良好基础。
本次为大家带来的是 2023 年 12 月份 C++ 五 级认证真题解析。
一、 单选题(每题 2分,共 30 分)
1、 下面 C++ 代码用于求斐波那契数列 , 该数列第 1 、 2项为 1, 以后各项均是
前两项之和。下面有关说法错误的是 ( )。
题号 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
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行代码 ,执 行 frac B函数 ,此 时 stepCoun t从 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
【
2023 年 12 月 GESPC++五级试卷解析,2023年12月GESP认证C++等级考试五级真题试卷答案解析