2025年12月GESPC++四级真题解析(含视频)

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 ≤

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; } 

第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 ​≤

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; } 

Read more

C++之模版详解(进阶)

C++之模版详解(进阶)

目录 1. 非类型模板参数 2. 类模板的特化 2.1 函数模板特化 2.2 类模版特化 3. 模板的分离编译 1. 非类型模板参数 模版参数有两种,一种叫类型模版参数,一种叫做非类型模版参数。今天我们来讲讲非类型模版参数。 template <int N> 中的 int N 就是典型的非类型模板参数。这里的 int 是参数的类型,而 N 是参数名,它接收的是一个具体的常量值,而非像普通类型模板参数(如 template <typename T>)那样接收一个 “类型”。 两者核心区别就是: * 类型模板参数:传递 “类型”(如 T

By Ne0inhk

C++中的策略模式进阶

1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_if * find(begin, end, value):查找第一个等于 value 的元素,返回迭代器(未找到返回 end)。 * find_if(begin, end, predicate):查找第一个满足谓词的元素。 * find_end(begin, end, sub_begin, sub_end):查找子序列最后一次出现的位置。 vector<int> nums = {1, 3, 5, 7, 9}; // 查找值为5的元素 auto it = find(nums.begin(

By Ne0inhk
C++ 智能指针完全指南:原理、用法与避坑实战(从 RAII 到循环引用)

C++ 智能指针完全指南:原理、用法与避坑实战(从 RAII 到循环引用)

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 智能指针的核心:RAII 设计思想 * 1.1 为什么需要智能指针? * 1.2 RAII:智能指针的设计灵魂 * 二. C++ 标准库智能指针:用法与场景 * 2.1 unique_ptr:独占式智能指针(推荐优先使用) * 2.2 shared_ptr:共享式智能指针(支持拷贝,重点了解) * 2.3 weak_ptr:弱引用智能指针(解决循环引用) * 2.3.1

By Ne0inhk
同名成员到底调用谁?C++ 隐藏规则你真的会吗?

同名成员到底调用谁?C++ 隐藏规则你真的会吗?

欢迎来到 s a y − f a l l 的文章 欢迎来到say-fall的文章 欢迎来到say−fall的文章 🌈say-fall:个人主页🚀专栏:《手把手教你学会C++》 | 《C语言从零开始到精通》 | 《数据结构与算法》 | 《小游戏与项目》💪格言:做好你自己,才能吸引更多人,与他们共赢,这才是最好的成长方式。 前言: 对于c++来说,有三大核心特性,是面向对象编程(OOP)的经典三要素:封装、继承、多态。这三个特性是 C++ 区别于纯面向过程语言(如 C)的核心,也是理解 C++ 面向对象思想的关键。之前利用类和对象的思想和STL中的适配器:queue和stack了解过封装,本篇文章就详细介绍一下继承这个特性 文章目录 * 前言: * 正文: * 一、

By Ne0inhk