GESP 2025 年 12 月 C++ 七级认证真题与解析(单选题 1-7)
第 1 题:形参、实参与作用域
题目核心
哪一句话是对的?
正确答案
A
选项分析
A 选项(正确)
形参是函数定义时所指定的变量,它只在函数内部有效。
用代码说明:
void eat(int apple) { // apple 是形参
apple = apple + 1;
}
apple只住在eat这个函数作用域内。- 出了函数门,
apple就消失了。
B 选项(错误)
即使是常量引用,也可以修改它
❌ 错!
void f(const int& x) {
x = 5; // ❌ 不允许
}
const表示'贴了封条',不能改。
C 选项(错误)
实参和形参类型必须完全一致
❌ 不对
void f(double x) {}
int a = 3;
f(a); // ✅ int → double,可以自动转换
D 选项(错误)
指针形参赋值会影响实参
void f(int* p) {
p = nullptr; // ❌ 只改了 p,不影响外面
}
- 改的是'地址盒子'本身,不是盒子里的东西。
第 2 题:最长公共子序列 (LCS)
题目背景
有三本魔法书(序列):
s1 = 3 1 8 2 5 6 7 4
s2 = 1 5 1 8 6 4 7 5 6
s3 = 1 8 3 5 7 6 2 4
要找同时按顺序出现在三本书里的数字,但不要求连续。
正确答案
A {1, 8, 5, 6}
查找步骤
- 找 1:三个序列都有。
- 找 8:都在 1 后面。
- 找 5:也都在 8 后面。
- 找 6:也都在 5 后面。
👉 {1, 8, 5, 6} 成功!
注意:LCS 最重要的是顺序不能乱。
第 3 题:哈希表(线性探测)
规则
- 哈希表 = 停车场
- 哈希函数 = 推荐车位
- 冲突 = 车位被占
- 规则:被占了,就往后一个一个找空位;到头了,从头再来。
正确答案
D
这是典型的 线性探测法(Linear Probing)。
第 4 题:背包问题(0/1 背包)
题目背景
- 每个物品有重量和价值。
- 每个物品要么拿,要么不拿,不能拿两次。
正确答案
C
动态规划可以用滚动数组优化空间
其他选项分析
- A 贪心一定最优? ❌ 错!0/1 背包不能用贪心保证最优。
- B 是 P 问题? ❌ 错!0/1 背包是 NP-完全问题。
- D 子问题不能复用? ❌ 错!动态规划的灵魂就是复用子问题。
第 5 题:完全二叉树最少节点数
题目条件
- 深度 = 6(根是第 1 层)
- 完全二叉树
- 问:最少有多少节点
计算规则
- 前 5 层必须满。
- 第 6 层至少 1 个。
计算过程
1 + 2 + 4 + 8 + 16 = 31
31 + 1 = 32
正确答案
B 32
第 6 题:二叉树遍历判断
题目背景
判断哪一种遍历顺序不可能。
正确答案
D(中序遍历错了)
只要画出树、按规则走,就能发现 D 不符合中序:左 → 根 → 右。
第 7 题:二分查找变形
代码分析
int query(int n, int *a, int x) {
int l = 0, r = n;
while (l < r) {
int mid = l + (r - l) / 2;
if (a[mid] >= x) r = mid;
else l = mid + 1;
}
if (l == n) return -1;
return l;
}
int n = 10;
int x = 3;
int num[] = {1, 2, 2, 3, 3, 4, 5, 5, 6, 7};
功能说明
这是一个经典的 二分查找变形。
- 在有序数组中,找到第一个 ≥ x 的下标。
- 不是找 3 本身,而是找:第一个'≥ 3'的位置。
正确答案
B. 3
下标对应关系:
下标:0 1 2 3 4 5 6 7 8 9
数值:1 2 2 3 3 4 5 5 6 7
第一个 ≥ 3 的位置是下标 3。


