GESP:2023年12月 C++六级 真题及解析

四季读书网 5 0
GESP:2023年12月 C++六级 真题及解析
老师已为大家备好电子打印版,需要完整电子版文件的朋友,可以拉到文末查看。
GESP:2023年12月 C++六级 真题及解析-第1张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第2张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第3张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第4张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第5张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第6张图片-四季读书网

【答案解析】

1.解释:答案选D。

详细解析如下——

选项A,说法正确。在C++的面向对象泛型语境中,一切皆可被当作对象处理,基本类型字面量(如整数5)也可以通过模板、auto 推导适配对象语义,该表述符合C++的泛型对象观,表述正确。

选项B,说法正确。这是C++类的基础特性:允许用户自定义类类型,并且通过类实例化对象,是基础正确用法。

选项C,说法正确。C++中函数本身是可对象化的实体:函数可以被指针指向,可以作为 std::function 的包装对象,函数本身也属于全局/命名空间作用域的实体,在C++的对象体系中,函数也属于一等公民/可被当作对象处理,表述正确。

选项D,说法错误。标准C++语法不允许在自定义函数中嵌套定义新函数

,仅允许嵌套定义类/结构体,不允许嵌套定义函数。如果要在函数内部实现可调用逻辑,只能使用 lambda 表达式( lambda 是匿名函数对象,并非嵌套定义具名函数),因此选项D的描述本身不符合C++语法规则,是错误选项。

2.解释:答案选C。

详细解析如下——

选项A:C++语法支持在一个类的内部嵌套定义另一个类,该描述符合C++的语法规则,说法正确。

选项B:定义在另一个类内部的类被称为内部类(嵌套类),承载这个内部类的外层类被称为外部类(外围类),该描述是嵌套类的标准定义,说法正确。

选项C:嵌套类的作用域被限制在外部类的内部,不能脱离外部类直接随意访问,必须通过外部类的作用域限定符来访问,同时还要受嵌套类所在访问控制区域的权限约束,该说法错误。

选项D:本题中 Point 是定义在 Rectangle 类内部的嵌套类,属于内部类,在符合访问权限的前提下,可以通过外部类 Rectangle 的作用域访问,写法为 Rectangle::Point ,该描述正确。

因此错误的说法是选项C。

3.解释:答案选C。

详细解析见下图——

GESP:2023年12月 C++六级 真题及解析-第7张图片-四季读书网
相关知识点的复习与拓展:

虽然 objCounter 是静态变量,classB.objCounter 语法上 C++ 允许,编译器不会报错,只是阅读习惯上更推荐用 newClass::objCounter 。

4.解释:官方答案选D,但本题存在巨大争议。

详细解析见下图——

GESP:2023年12月 C++六级 真题及解析-第8张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第9张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第10张图片-四季读书网

5.解释:答案选B。

详细解析见下图——

GESP:2023年12月 C++六级 真题及解析-第11张图片-四季读书网

相关知识点的复习与拓展:

截至考试当年12月,有关二叉树深度优先搜索的三种遍历方式,可以参考下图帮助记忆——

GESP:2023年12月 C++六级 真题及解析-第12张图片-四季读书网

6.解释:答案选B。

详细解析如下——

我们来逐一分析这段C++代码:

结构定义分析:这个链表结点 LinkNode 中,定义了两个指针:

◆LinkList* next:指向后一个结点

◆LinkList* prev:指向前一个结点

选项判断:

A. 单向链表:单向链表只需要 next 后继指针,不需要前驱指针 prev,因此错误。

B. 双向链表:双向链表的每个结点同时保存后继 next 和前驱 prev 指针,符合这段代码的定义,该选项正确。

C. 循环链表:C. 循环链表:循环链表是将链表首尾相连形成闭环,这段代码两个指针都被置为 NULL ,并未回指头节点自身,也没有形成首尾相接的环。所以,它只是双向链表,不是双向循环链表——循环链表要求头节点的 prev 指向尾节点、尾节点的 next 指向头节点(空表时通常指向自身)。因此错误。

D. 指针链表:这不是标准的数据结构分类术语,是干扰选项,错误。

7.解释:答案选B。

详细解析如下图所示——

GESP:2023年12月 C++六级 真题及解析-第13张图片-四季读书网

相关知识点的复习与拓展:

截至考试当年12月,根据题干要求可构建的哈夫曼树的其中一种结构,如下图所示——

GESP:2023年12月 C++六级 真题及解析-第14张图片-四季读书网

8.解释:答案选D。

详细解析如下图所示——

GESP:2023年12月 C++六级 真题及解析-第15张图片-四季读书网

9.解释:答案选B。

详细解析如下图所示——

GESP:2023年12月 C++六级 真题及解析-第16张图片-四季读书网

10.解释:答案选D。

详细解析如下——

我们逐一分析每个选项:

● 选项A:完全二叉树的节点按层序编号连续,节点的父子位置可以通过数组下标直接计算得到,非常适合用 list (顺序存储结构)存储,该说法正确。

● 选项B:一般二叉树也可以用 list 存储,只需要按照完全二叉树的编号规则映射位置,空出的不存在的节点位置用 None 占位即可实现,只是这种方式会产生空间浪费,但该存储方式是可行的,该说法正确。

● 选项C:满二叉树是特殊的完全二叉树,所有层的节点都填满,节点编号完全连续,完全可以用 list 高效存储,该说法正确。

● 选项D:通用的普通树结构,节点间的父子关系没有规整的连续编号规律,如果强行用 list 顺序存储,需要填充大量空节点来维护节点间的逻辑关系,会造成极大的空间浪费,且不存在通用的下标映射规则,因此并不是所有树都可以用 list 存储,该说法错误。

因此题目要求选出错误的描述,对应选项为D。

相关知识点的复习与拓展:

截至考试当年12月,同样是 list ,在C++和Python中属于完全不同的结构,需要严格区别,其对比下图所示——

GESP:2023年12月 C++六级 真题及解析-第17张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第18张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第19张图片-四季读书网

11.解释:答案选A。

详细解析如下图所示——

GESP:2023年12月 C++六级 真题及解析-第20张图片-四季读书网

12.解释:答案选A。

详细解析如下图所示——

GESP:2023年12月 C++六级 真题及解析-第21张图片-四季读书网
相关知识点的复习与拓展:

截止考试当年12月,C++ 默认 cout 输出 bool 值,显示的是 1/0 ;加上  std::boolalpha ,就会输出英文的  true/false 。

需要头文件:#include<iostream> 。

代码示例如下——

#include<iostream>using namespace std;intmain(){    bool a = true;    bool b = false;    cout << "默认:" << a << " " << b << endl; // 默认输出:1 0    cout << boolalpha;  // 开启:bool输出 true/false    cout << "开启boolalpha:" << a << " " << b << endl; // true false    cout << noboolalpha; // 关闭,恢复成 1/0    cout << "关闭后:" << a << " " << b << endl; // 1 0    return 0;}

13.解释:答案选B。

本题考察计算机基础知识。通信卫星可以转发无线电信号,实现通信地球站间或地球站与航天器间的无线电通信,因此具有信号中继作用,选项B正确。

14.解释:答案选C。

详细解析如下图所示——
GESP:2023年12月 C++六级 真题及解析-第22张图片-四季读书网

15.解释:答案选B。

详细解析如下——

冒泡排序属于交换类排序算法,其核心思想是通过相邻元素之间的比较和交换,逐步将最大或最小元素"冒泡"到序列末尾,最终实现整体有序。在选项中:

A. 希尔排序:属于插入类排序,是插入排序的改进版本,通过分组插入逐步缩小增量,不属于交换类。

B. 快速排序:属于交换类排序算法,其核心思想是通过基准元素划分序列,递归地对左右子序列进行排序,过程中涉及大量元素交换,与冒泡排序同属交换类。

C. 堆排序:属于选择类排序算法,通过堆结构选择最大或最小元素并交换到末尾,不属于交换类。

D. 插入排序:属于插入类排序算法,通过逐步构建有序序列实现排序,与冒泡排序原理不同。

因此,与冒泡排序同属交换类排序算法的是快速排序。选项B正确。

相关知识点的复习与拓展:

截至考试当年12月,有关十大经典排序算法的特点对比,可以参考下图帮助记忆——

GESP:2023年12月 C++六级 真题及解析-第23张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第24张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第25张图片-四季读书网

【答案解析】

1.解释:正确。

详细解析如下——

在面向对象思想里,方法就是对象的行为;在 C++ 的类(class)中,类内定义的成员函数,对应面向对象概念中的方法,用来描述类/对象可以执行的操作。

成员函数可以在类体内直接定义,也可以在类内声明、类外用 类名:: 作用域解析符来定义。两种写法都属于该类的方法,不影响其作为"方法"的本质。

题干表述正确。

2.解释:正确。

详细解析如下图所示——
GESP:2023年12月 C++六级 真题及解析-第26张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第27张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第28张图片-四季读书网

3.解释:正确。

详细解析如下图所示——
GESP:2023年12月 C++六级 真题及解析-第29张图片-四季读书网

4.解释:正确。

详细解析如下图所示——
GESP:2023年12月 C++六级 真题及解析-第30张图片-四季读书网

5.解释:错误。

详细解析如下图所示——
GESP:2023年12月 C++六级 真题及解析-第31张图片-四季读书网

6.解释:错误。

详细解析如下图所示——
GESP:2023年12月 C++六级 真题及解析-第32张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第33张图片-四季读书网

7.解释:正确。

详细解析如下图所示——
GESP:2023年12月 C++六级 真题及解析-第34张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第35张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第36张图片-四季读书网

8.解释:正确。

详细解析如下图所示——
GESP:2023年12月 C++六级 真题及解析-第37张图片-四季读书网

9.解释:正确。

详细解析如下图所示——
GESP:2023年12月 C++六级 真题及解析-第38张图片-四季读书网

10.解释:正确。

详细解析如下图所示——
GESP:2023年12月 C++六级 真题及解析-第39张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第40张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第41张图片-四季读书网

2023年12月 C++六级 闯关游戏

#include<bits/stdc++.h>using namespace std;intmain(){    // 关闭cin与stdio同步,加速cin输入速度    ios::sync_with_stdio(false);    // 解绑cin与cout,避免cout刷新拖慢cin读取    cin.tie(nullptr);    int N, M;    cin >> N >> M;                       // N 关,每关 M 个通道    vector<int> a(M);    for (int i = 0; i < M; i++) cin >> a[i];   // 第 i 个通道可前进 a[i] 关    vector<longlong> b(N);    for (int i = 0; i < N; i++) cin >> b[i];   // 离开第 i 关可获得的分数    // dp[x]:从第 x 关出发并最终通关,能获得的最大总分    // 注意:包含离开第 x 关时得到的 b[x]    vector<longlong> dp(N);    // 因为所有 a[i] > 0,只会从小编号关走向大编号关    // 所以从 N-1 倒推到 0,保证 dp[x + a[i]] 已经计算好    for (int x = N - 1; x >= 0; x--) {        long long best = LLONG_MIN;      // 枚举当前关选择哪个通道最优        for (int i = 0; i < M; i++) {            int y = x + a[i];            // 选择第 i 个通道后到达的关卡            // 如果 y >= N,说明这一跳直接通关,后面没有分数,记为 0            // 否则后面还能继续获得 dp[y]            long long nxt = (y >= N) ? 0 : dp[y];            best = max(best, nxt);        }        // 离开第 x 关先拿 b[x],再加上后续最优得分        dp[x] = b[x] + best;    }    // 游戏从第 0 关开始    cout << dp[0] << '\n';    return 0;}

代码思路——

GESP:2023年12月 C++六级 真题及解析-第42张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第43张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第44张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第45张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第46张图片-四季读书网

2023年12月 C++六级 工作沟通

#include<iostream>#include<vector>#include<algorithm>using namespace std;// 最大员工数量,题目中 N <= 300,开 305 足够const int MAXN = 305;// 邻接表,存储树的结构(无向边,方便 BFS 遍历)vector<int> adj[MAXN];// 记录每个节点的直接父节点(领导),根节点 0 的父节点设为 -1int parent_node[MAXN];// 记录每个节点在树中的深度(根节点深度为 0)int depth[MAXN];// BFS 遍历时标记节点是否已经访问过bool visited[MAXN];/** * 使用 BFS(广度优先搜索)预处理树结构 * @param root 树的根节点,本题中固定为 0 号员工(老板) */voidbfs(int root){    vector<int> q;          // 用 vector 模拟队列    q.push_back(root);    visited[root] = true;    parent_node[root] = -1; // 老板没有上级    depth[root] = 0;        // 老板处于第 0 层    int head = 0;    while (head < q.size()) {        int u = q[head++];  // 取出队首元素        // 遍历当前节点的所有邻居(包括下属和上级)        for (int v : adj[u]) {            if (!visited[v]) {                visited[v] = true;                parent_node[v] = u;      // 记录 v 的直接领导是 u                depth[v] = depth[u] + 1; // v 的深度比 u 大 1                q.push_back(v);          // 将 v 加入队列            }        }    }}/** * 求解两个节点的最近公共祖先 (LCA, Lowest Common Ancestor) * @param u 节点 u * @param v 节点 v * @return u 和 v 的最近公共祖先节点编号 */intget_lca(int u, int v){    // 1. 将较深的节点向上移动,直到两个节点处于同一深度    while (depth[u] > depth[v]) u = parent_node[u];    while (depth[v] > depth[u]) v = parent_node[v];    // 2. 两个节点同时向上移动,直到它们相遇    while (u != v) {        u = parent_node[u];        v = parent_node[v];    }    // 相遇的节点即为最近公共祖先    return u;}intmain(){    // 关闭cin与stdio同步,加速cin输入速度    ios::sync_with_stdio(false);    // 解绑cin与cout,避免cout刷新拖慢cin读取    cin.tie(nullptr);    int N;    if (!(cin >> N)) return 0;    // 读取 N-1 个父节点信息    // 题目第二行给出的是 f_1, f_2, ..., f_{N-1},分别对应 1 到 N-1 号员工的直接领导    for (int i = 1; i <= N - 1; ++i) {        int f;        cin >> f;        adj[f].push_back(i); // 建立从领导指向下属的有向边        adj[i].push_back(f); // 建立无向边,方便 BFS 从根节点遍历整棵树    }    // 预处理树结构,计算每个节点的深度和父节点    bfs(0);    int Q;    cin >> Q; // 读取合作场次数量    while (Q--) {        int m;        cin >> m; // 读取当前场次参与合作的员工数量        vector<int> employees(m);        for (int i = 0; i < m; ++i) {            cin >> employees[i]; // 读取参与合作的员工编号        }        // 求所有参与员工的 LCA(最近公共祖先)        // 思路:先求前两个员工的 LCA,再用这个 LCA 和第三个员工求 LCA,依次类推        int common_ancestor = employees[0];        for (int i = 1; i < m; ++i) {            common_ancestor = get_lca(common_ancestor, employees[i]);        }        // 此时 common_ancestor 是所有参与员工的最近公共祖先        // 能管理所有参与员工的人,必然位于从 common_ancestor 到根节点(0)的路径上        // 题目要求:如果有多个满足条件的员工,找出编号最大的那个        int ans = -1;        int curr = common_ancestor;        // 沿着父节点一路向上遍历,直到根节点(parent_node 为 -1 时停止)        while (curr != -1) {            ans = max(ans, curr); // 更新路径上的最大编号            curr = parent_node[curr];        }        // 输出当前场次的主持人选        cout << ans << "\n";    }    return 0;}

代码思路——

GESP:2023年12月 C++六级 真题及解析-第47张图片-四季读书网
GESP:2023年12月 C++六级 真题及解析-第48张图片-四季读书网

课程体系——

GESP:2023年12月 C++六级 真题及解析-第49张图片-四季读书网
需要无水印PDF格式文件,
或者课程体系咨询,
欢迎扫描下面二维码添加好友垂询。
GESP:2023年12月 C++六级 真题及解析-第50张图片-四季读书网

GESP:2023年12月 C++六级 真题及解析-第51张图片-四季读书网

▍ 声明:本文整理自网络,如有侵权,请联系删除。

本公号刊载此文,是出于合法合理地分享和传播信息,扩大大受众范围,促进学术交流,推动共同进步之目的。公众号持有人郑重声明,本文的发布,将严格遵守相关规定和法律法规,不侵犯任意潜在作者的权益,不改变引用原文(若有)的意图和内容。若有来源标注错误或侵犯了您的合法权益,请随时与我们联系协商,联系(QQ):993225721,我们将及时更正、删除。文章若有幸得到转载,首先,公众号持有人感谢转载人为读者阅读提供了有价值的信息和知识,希望文章能够在被转载的平台上得到更广泛的传播和交流;其次,转载人应充分考虑到转载动作本身所可能带来的相应的风险和责任,包括但不限于侵犯知识产权、侵犯他人权益等行为所引起的法律责任,确保本文的合法传播和使用。同时,本人也极其愿意在转载过程中尽力配合转载人了解、关注、规避、消除相关的潜在风险。若转载人有相任何关疑虑,同样欢迎随时与我们联系协商,联系(QQ):993225721。

喜欢您关注我们哦——

抱歉,评论功能暂时关闭!