2025 年 12 月 GESP C++ 四级真题解析
本文详细解析了 2025 年 12 月 GESP C++ 四级考试真题,涵盖单选题、判断题及两道编程题。内容涉及指针与地址运算、多维数组存储、排序稳定性判断、结构体与引用传递、函数默认参数等核心知识点。编程题包括基于滑动窗口的地形高度最大和计算,以及基于多条件排序的商品优先购买策略模拟,均提供了完整的 C++ 代码实现与逻辑说明。

本文详细解析了 2025 年 12 月 GESP C++ 四级考试真题,涵盖单选题、判断题及两道编程题。内容涉及指针与地址运算、多维数组存储、排序稳定性判断、结构体与引用传递、函数默认参数等核心知识点。编程题包括基于滑动窗口的地形高度最大和计算,以及基于多条件排序的商品优先购买策略模拟,均提供了完整的 C++ 代码实现与逻辑说明。


解析:
答案 C,创建指针 int *p。获取 x 变量的地址 &x。

解析:
答案 C,
int a = 5; // a 变量存储 5
int* p1 = &a; // 创建指针 p1 存储 变量 a 地址
int* p2 = p1; // 创建指针 p2 存储 指针 p1 的地址(即 p2 的地址也是 a 变量的地址)
*p2 = 10; // 指针 p2 的地址存储 10(即修改 a 变量为 10)

解析:
答案 B,下标从 0 开始,即 2 行 3 列为 a[2-1][3-1],也就是 a[1][2]。

解析:
答案 D,*(p+5) 就是 a[0][0] 往移动 5 个位置,即 a[1][1]。

解析:
答案 B,
i 循环为 0 1;j 循环为 0 1 2;k 循环:0 1。i+j+k 为偶数的情况有: i j k 0 0 0:a[0][0][0]=1 0 1 1:a[0][1][1]=4 0 2 0:a[0][2][0]=5 1 1 0:a[1][1][0]=9 1 0 1:a[1][0][1]=8 1 2 1:a[1][2][1]=12 累加和为:1+4+5+9+8+12=39。

解析:
答案 A,


解析:
答案 C,


解析:
答案 A,


解析:
答案 B,


解析:
答案 B,
A:不稳定,{3,'D'} 和 {3,'B'}的相对位置变了 C:可以判断,{3,'D'} 和 {3,'B'}相对位置已经改变了 D:不稳定,{3,'D'} 和 {3,'B'}的相对位置变了

解析:
答案 B,


解析:
答案 A,


解析:
答案 B,嵌套循环都为 n。

解析:
答案 D,


解析:
答案 B,


解析:
答案√,
int x = 5; // x 变量存储 5
int *p = &x; // 指针 p 指向 x 变量的地址
*p = *p + 3; // p 指针地址的值 = p 指针地址的值 + 3 = 5 + 3 = 8

解析:
答案×,
struct name_struct{
string first_name; // 姓氏
string last_name; // 名字
};
struct student{
name_struct name; // 姓名
int age;
};

解析:
答案√,
多维数组都是按照最高维度的顺序存储,例如 a[5][5][5]: a[0][0][0] → a[0][0][1] → a[0][0][2] → a[0][0][3] → a[0][0][4] a[0][1][0] → a[0][1][1] → a[0][1][2] → a[0][1][3] → a[0][1][4] ... a[1][0][0] → a[1][0][1] → ... → a[1][4][4]

解析:
答案√,引用传递会改变实参 a 的值。

解析:
答案×,
int arr[5] = {1,2,3,4,5};
int* p1 = arr; // p1 指向 arr[0] 的地址
int* p2 = arr+2; // p2 指向 arr[2] 的地址
cout<<p2<<endl; // 0x62fefc
cout<<p1<<endl; // 0x62fef4
// 输出了 2
// 地址差:0x62fefc - 0x62fef4 = 8
// 指针差:(地址数值差) / 单个元素的字节数 = 8/4=2
cout<<p2-p1;

解析:
答案√,时间复杂度描述的是算法执行时间随输入规模增长的量级,而非精确的执行次数,所以循环 n-1 次的时间复杂度是 O(n)。

解析:
答案√,选择、希尔、快速、堆排序不稳定,其他都是稳定。


解析:
答案×,是插入排序的思想。

解析:
答案×,会调用'return xy'的函数,只传递 5,y 就为默认值 10,即 510=50。

解析:
答案√,fin 会根据空格和换行分别给 a b c d 变量赋值,即 a=10 b=20 c=30 d=40。
小 A 有一张 M 行 N 列的地形图,其中第 i 行第 j 列的数字 aij 代表坐标 (i,j) 的海拔高度。
停机坪为一个 3×3 的区域,且内部所有 9 个点的最大高度和最小高度之差不超过 H。
小 A 想请你计算出,在所有适合建造停机坪的区域中,区域内部 9 个点海拔之和最大是多少。
第一行三个正整数 M,N,H,含义如题面所示。
之后 M 行,第 i 行包含 N 个整数 ai1,ai2,…,aiN,代表坐标 (i,j) 的高度。
数据保证总存在一个适合建造停机坪的区域。
输出一行,代表最大的海拔之和。
输入 #1
5 5 3
5 5 5 5 5
5 1 5 1 5
5 5 5 5 5
5 2 5 2 5
3 5 5 5 2
输出 #1
40
对于所有测试点,保证 1 ≤ M,N ≤ 10^3,1 ≤ H, aij ≤ 10^5。
#include <bits/stdc++.h>
using namespace std;
int a[1010][1010];
int main() {
// 1) 填充数据
// 1.1) 确定矩阵大小 m*n , 条件 h
int m,n,h;
cin>>m>>n>>h;
// 1.2) 填充二维数组
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
// 2) 枚举
// 2.1) 枚举出所有右顶点坐标
int ans=0;
for(int r_i=3;r_i<=m;r_i++){
for(int r_j=3;r_j<=n;r_j++){
// 2.2) 将 3*3 内的最大 最小找出来,计算总和
int maxx=INT_MIN,minn=INT_MAX,sum=0;
for(int i=r_i-2;i<=r_i;i++){
for(int j=r_j-2;j<=r_j;j++){
maxx = max(maxx,a[i][j]);
minn = min(minn,a[i][j]);
sum+=a[i][j];
}
}
// 2.3) 判断最大 - 最小 <= 条件
if( maxx-minn<=h ){
// 2.4) 满足:找最大'总和'
if( sum>ans ) ans=sum;
}
}
}
cout<<ans;
}
小 A 有 M 元预算。商店有 N 个商品,每个商品有商品名 S、价格 P 和优先级 V 三种属性,其中 V 为正整数,且 V 越小代表商品的优先级越高。
小 A 的购物策略为:
小 A 想知道能购买哪些商品。
第一行两个正整数 M,N,代表预算和商品数。
之后 N 行,每行一个商品,依次为 Si Pi Vi,代表第 i 个商品的商品名、价格、优先级。
数据保证不存在两个名字相同的商品。
按照字典序从小到大的顺序,输出所有购买商品的商品名。
输入 #1
20 4
apple 6 8
bus 15 1
cab 1 10
water 4 8
输出 #1
bus cab water
对于所有测试点,保证 1 ≤ |Si| ≤ 10,1 ≤ M,Pi ≤ 10^5,1 ≤ N ≤ 10^3,1 ≤ Vi ≤ 10。商品名仅由小写字母组成且不存在两个相同的商品名。
#include <bits/stdc++.h>
using namespace std;
struct goods{
string s;
int p,v;
}a[1010];
bool cmp(goods a,goods b){
if(a.v!=b.v) return a.v<b.v;
if(a.p!=b.p) return a.p<b.p;
return a.s<b.s;
}
bool cmp2(string a,string b){
return a<b;
}
int main() {
// 1) 填充数据
// 1.1) 确定预算 m 商品数量 n
int m,n;
cin>>m>>n;
// 1.2) 填充 n 个商品的信息
for(int i=1;i<=n;i++){
cin>>a[i].s>>a[i].p>>a[i].v;
}
// 2) 根据 3 规则排序
sort(a+1,a+n+1,cmp);
// 3) 模拟购买过程
string ans[1010];
int ans_size=0;
for(int i=1;i<=n;i++){
if(m>=a[i].p){
m-=a[i].p;
ans_size++;
ans[ans_size]=a[i].s;
if(m==0) break;
}
}
// 4) 根据购买好的商品排序
sort(ans+1,ans+ans_size+1,cmp2);
// 5) 输出结果
for(int i=1;i<=ans_size;i++) cout<<ans[i]<<endl;
}

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online