2023 年 12 月认证 C++ 七级真题解析
CCF 编程能力等级认证 ,英文名 Grade Examination of Software Programming ( 以
下简称 GESP ),由中国计算机学会发起并主办,是为青少年计算机和编程学习者提供学业
能力验证的平台。 GESP 覆盖中小学全学段,符合条件的青少年均可参加认证。 GESP 旨在
提升青少年计算机和编程教育水平,推广和普及青少年计算机和编程教育。
GESP 考察语言为图形化( Scratch )编程、 Python 编程及 C++ 编程,主要考察学生
掌握相关编程知识和操作能力 ,熟悉编程各项基础知识和理论框架 ,通过设定不同等级的考
试目标 ,让学生具备编程从简单的程序到复杂程序设计的编程能力 ,为后期专业化编程学习
打下良好基础。
本次为大家带来的是 2023 年 12 月份 C++ 七 级认证真题解析。
一、 单选题(每题 2分,共 30 分)
1、定义变量 double x,如果下 ⾯ 代码输 ⼊ 为 100 ,输出最接近 ( )。
题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
答案 B D B C D D B C B C D C B D B
A. 0
B. -5
C. -8
D. 8
【答案】 B
【解析 】 log10(x) 表示 10 的多少次方是 x, log2(x) 表示 2的多少次方是 x, 这里
的 x是输入的 100 ,所以, log10(100)=2 ,又因为 26=64 ,所以 log2(100) 是 6.
多,两者作差,约为 -4. 多,选 B。
2、 对于下 ⾯ 动态规划 ⽅ 法实现的函数 , 以下选项中最适合表达其状态转移函数
的为 ( )。
A.
B.
C.
D.
【答案】 D
【解析】首先看代码, s数组是前缀和数组, f数组是 dp 数组,初始化 f数组为
正无穷 , 只有 f[i][i]=0 ( 1<=i<=n ) 的值为 0, 接着进行了区间 dp , i和 j分别是区
间 dp 的两个端点, k是枚举的分界点, k的取值范围是 [i,j) ,所以选项 C错误,
根据第 15 行转移方程,发现后面的 s[j]-s[i-1] 是 a[i]+a[i+1]+ … +a[j] 的和,且与 k
无关 , 可以单独拎出来 , 所以转移方程为 f[i][j]=min(f[i][k]+f[k+1][j])+ k=i
j a(k) ,
选项 D 正确 。 选项 A,B 的错误点在于 f(i,j) 的初始值为正无穷 , 所以 f(i,j) 是不参与
转移方程的。
3、 下 ⾯ 代码可以 ⽤ 来求最长上升 ⼦ 序列 ( LIS ) 的长度 , 如果输 ⼊ 是 : 51735
9,则输出是 ( )。
A. 975119
B. 122344
C. 135799
D. 111111
【答案】 B
【解析】题目已经提示我们这是在求最长上升子序列, f数组的含义是以 i结尾
的最长上升子序列长度 , ans 是整个序列的最长上升子序列长度 , 代码中先依次
输出了 f[1],f[2], … ,f[n], 最后再输出 ans , 接着我们可以进行手算 , 17359序列 的
f值分别为 1,2,2,3,4,ans=4 ,所以正确答案为 B。
4、 C++ 语 ⾔ 中,下列关于关键字 static 的描述不正确的是 ( )。
A. 可以修饰类的成员函数。
B. 常量静态成员可以在类外进 ⾏ 初始化。
C. 若 a 是类 A 常量静态成员 ,则 a 的地址都可以访问且唯 ⼀ 。
D. 静态全局对象 ⼀ 定在 main 函数调 ⽤ 前完成初始化 ,执 ⾏ 完 main 函数后
被析构。
【答案】 C
【解析 】 static 是静态意思 , 可以修饰成员变量和成员方法 , static 修饰成员变量
表示该成员变量在内存中只存储一份 , 可以被共享访问 , 修改 。 选项 C中 a的地
址都可以访问是不对的,所以本题选 C。
5、 G 是 ⼀ 个 ⾮ 连通 ⽆ 向图,共有 28 条边,则该图 ⾄ 少有 ( )个顶点。
A. 6
B. 7
C. 8
D. 9
【答案】 D
【解析 】 注意到题目里说的是非连通无向图 , 那么在同样的点数 n下 , 为了有尽
量多的边 , 可以分为两张连通图 , 一张 n-1 个点的完全图 , 另一张只有单独一个
点,手算后可以发现, 8个点的完全图有 8*7/2=28 个点,正好满足题目要求,
所以总点数为 9个,选 D。
6、 哈希表长 31 , 按照下 ⾯ 的程序依次输 ⼊ 417 28 30 4, 则最后的 4存 ⼊ 哪个位
置? ( )
A. 3
B. 4
C. 5
D. 6
【答案】 D
【解析 】 题目提示我们这是哈希表 , 根据代码 , 发现是按照 %13 进行哈希并且在
发生冲突的情况下, 对应放到下一个位置,我们依次计算 17 28 30 4会放置在
什么位置, 17 放置在 4,28 放置在 2,30 本来放置在 4,但是发生冲突,最终放置
在 5,4 本来放置在 4,但是 4和 5都被占用了,所以最终放置在 6,选 D。
7、 某 ⼆ 叉树 T的先序遍历序列为 : {A BD FCEG H} , 中序遍历序列为 : {B FD A
G EH C} ,则下列说法中正确的是 ( )。
A. T的度为 1
B. T的 ⾼ 为 4
C. T有 4个叶节点
D. 以上说法都不对
【答案】 B
【解析 】 先序遍历是根左右 , 中序遍历是左根右 , 首先可以根据先序遍历和中序
遍历画出完整的树,如下图:
所以正确答案为 B。
8、 下 ⾯ 代码段可以求两个字符串 s1 和 s2 的最长公共 ⼦ 串( LCS ) ,下列相
关描述不正确的是( )。
A. 代码的时间复杂度为 0( n2)
B. 代码的空间复杂度为 0( n2)
C. 空间复杂度已经最优
D. 采用了动态规划求解
【答案】 C
【解析 】题目告诉我们代
2023 年 12 月 GESPC++7级试卷解析,2023年12月GESP认证C++等级考试7级真题试卷答案解析