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++ 抽象类与多态原理深度解析:从纯虚函数到虚表机制(附高频面试题)

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 纯虚函数与抽象类:强制接口规范的“契约” * 1.1 纯虚函数:没有实现的 “接口声明” * 1.2 抽象类:包含纯虚函数的 “不可实例化类” * 二. 多态的底层原理:虚表指针与虚函数表 * 2.1 虚表指针(vfptr):对象中的 “导航器” * 2.2 多态的实现原理 * 2.3 虚函数表(vtable):存储虚函数地址的 “数组” * 2.4 动态绑定与静态绑定 * 三. 关键问题辨析与总结

By Ne0inhk
【C++】模拟实现 list:双向链表的构建与解析

【C++】模拟实现 list:双向链表的构建与解析

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟     如果你对 list 概念还存在疑惑,欢迎阅读我之前的深入了解:  🔥🔥🔥【C++】list 类深度解析:探索双向链表的奇妙世界 目录 一、引言🎉 二、list 类的功能需求分析👀 (一)存储元素数据📦 (二)元素访问与修改✍️ (三)元素数量相关操作📏 (四)迭代器支持🔍 (五)内存管理🧹 三、模拟实现的关键步骤和代码解析💻  (一)类的定义🎯 (二)构造函数实现🔨 (三)析构函数实现🚮 (四)获取元素数量和判断是否为空函数📏🤔 (五)添加和删除元素函数🎯 (六)迭代器相关函数🔍 四、总结😎 一、引言🎉 在 C++ 的编程宇宙中,

By Ne0inhk
【C++】继承

【C++】继承

目录 一. 概念 二. 基类和派生类对象赋值转换 三. 继承中的作用域 四. 派生类的默认成员函数 1. 构造函数 2. 拷贝构造 3. 赋值重载 4. 析构函数 五. 继承与友元 六. 继承与静态成员 七. 多继承、菱形继承、菱形虚拟继承 虚拟继承解决数据冗余和二义性的原理 八. 继承和组合 一. 概念 继承是类设计层次的复用 语法:Person是父类,也称作基类。Student是子类,也称作派生类 继承关系和访问限定符: 继承以后,保护和私有不一样了 1. 不可见:基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面,都不能去访问它。基类的私有成员在基类中还是能用,在基类外不能用 2. 如果基类成员不想在类外直接被访问,但需要在 派生类中能访问,

By Ne0inhk
【C++】C++新增特性解析:Lambda表达式、包装器与绑定的应用

【C++】C++新增特性解析:Lambda表达式、包装器与绑定的应用

C++语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C++相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C++内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与QueuePriority Queue与仿函数模板进阶-模板特化面向对象三大特性-继承机制面向对象三大特性-多态机制STL 树形结构容器二叉搜索树AVL树红黑树红黑树封装map/set哈希-开篇闭散列-模拟实现哈希哈希桶-模拟实现哈希哈希表封装 unordered_map 和 unordered_setC++11 新特性:序章右值引用、移动语义、万能引用实现完美转发可变参数模板与emplace系列 大家好,我是店小二。在这篇文章中,我们将深入探讨C++11的新特性——Lambda表达式、包装器与绑定的应用。如果在阅读过程中有不清楚的地方或发现任何错误,欢迎随时私信交流探讨。 🌈个人主页:是店小二呀 🌈C语言专栏:C语言 🌈C++专栏: C++ 🌈初阶数据结构专栏: 初阶数据结构

By Ne0inhk