2025年12月GESPC++四级真题解析(含视频)
视频讲解:GESP2025年12月四级C++真题讲解
一、单选题
第1题

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

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

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

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

解析:
答案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第6题

解析:
答案A,

第7题

解析:
答案C,

第8题

解析:
答案A,

第9题

解析:
答案B,

第10题

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

解析:
答案B,

第12题

解析:
答案A,

第13题

解析:
答案B,嵌套循环都为n
第14题

解析:
答案D,

第15题

解析:
答案B,

二、判断题
第1题

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

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

解析:
答案√,
多维数组都是按照最高维度的顺序存储,例如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] 第4题

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

解析:
答案×,
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;第6题

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

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

第8题

解析:
答案×,是插入排序的思想
第9题

解析:
答案×,会调用“ return x*y ”的函数,只传递5,y就为默认值10,即5*10=50
第10题

解析:
答案√,fin会根据空格和换行分别给a b c d变量赋值,即a=10 b=20 c=30 d=40
三、编程题
第1题 [GESP202512 四级] 建造
题目描述
小 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 ≤
,1 ≤ H, aij ≤
。
答案
#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; } 第2题 [GESP202512 四级] 优先购买
题目描述
小 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 ≤
,1 ≤ N ≤
,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; }