欢迎光临
我们一直在努力

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

  视频讲解:GESP2025年6月四级C++真题讲解

一、单选题

第1题

解析:

答案A,只有A选项是正确的创建指针语法

第2题

解析:

答案D,函数传递多维数组,只有第一个维度可以忽略,其他维度都需显示指定

第3题

解析:

答案D,new int[12] 是存放在堆,堆数据需手动释放

第4题

解析:

答案B,greet没有在main之前声明函数

#include<bits/stdc++.h>
using namespace std;
int main() {
greet();
return 0;
}
void greet() {
cout << "Hello!" << endl;
}

第5题

解析:

答案C,函数有3种传递(值传递、引用传递、指针传递),只有值传递无法改变实参

#include <bits/stdc++.h>
using namespace std;
// 1. 传值传递:无法交换实参
void swap1(int a, int b) {
int temp = a;
a = b;
b = temp;
}
// 2. 指针传递:通过地址交换实参
void swap2(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 3. 引用传递:通过别名交换实参(C++特有)
void swap3(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int main() {
int x = 10, y = 20;
// 传值传递测试
swap1(x, y);
cout << "传值后:" << x << " " << y << endl; // 10 20(未交换)
// 指针传递测试
swap2(&x, &y);
cout << "指针传递后:" << x << " " << y << endl; // 20 10(已交换)
// 引用传递测试
swap3(x, y);
cout << "引用传递后:" << x << " " << y << endl; // 10 20(再次交换)
return 0;
}

第6题

解析:

答案B,以下代码为例

#include <iostream>
using namespace std;
// 函数定义:返回 int 类型,接收两个 int 参数
int add(int a, int b) {//形参a b
return a + b; // 返回两数之和
}
int main() {
int x = 3, y = 5;
int result = add(x, y); // 函数调用:传入实参 x、y,接收返回值
cout << "和为:" << result << endl; // 输出:8
return 0;
}

第7题

解析:

答案C

print1函数内有value,使用局部value(50)
print1 内 ::value 表示全局变量,即100
print2函数内无value,使用全局value(100)

第8题

解析:

答案B,这就是插入排序的过程

动画模拟:https://easylink.cc/nlsdzn

第9题

解析:

答案C,插入排序适合“ 数据量小,接近有序 ”,C最近贴近

第10题

解析:

答案B,A是分治算法,C是枚举算法,D是贪心算法

第11题

解析:

答案B,嵌套循环,每个循环次数都是n,两层就是n*n

第12题

解析:

答案D,递归函数的时间复杂度同时都是指数级别,只有D选项

以下是函数递归过程:https://gitmind.cn/app/docs/m3crzgaf

第13题

解析:

答案C,和gelilne(cin , line) 效果差不多,只不过cin改成了 ifstream  in("data.txt");

#include <bits/stdc++.h>
using namespace std;
int main() {
//cin的getline
string line1;
getline(cin,line1);

//ifstream 的 getline
ifstream in("data.txt");
string line2;
getline(in,line2);
}

第14题

解析:

答案B,就是为了预判错误,并作出相应的解决

#include<bits/stdc++.h>
using namespace std;

// 故意抛出不同类型异常的函数
void throwDifferentExceptions(int type) {
switch (type) {
case 1:
throw 100; // 抛出 int 类型异常
case 2:
throw "Division by zero"; // 抛出 const char* 类型异常
case 3:
throw string("Custom string exception"); // 抛出 string 类型异常
case 4:
throw 3.14159; // 抛出 double 类型异常
default:
cout << "No exception thrown" << endl;
}
}

int main() {
// 遍历测试4种不同类型的异常
for (int i = 1; i <= 4; i++) {
cout << "=== 测试抛出第 " << i << " 种类型异常 ===" << endl;
try {
throwDifferentExceptions(i);
}
catch (…) { // 兜底,捕获剩余所有未匹配的异常
cout << "捕获到其他类型异常" << endl;
}
}
return 0;
}

第15题

解析:

答案B

二、判断题

第1题

解析:

答案√,接收参数的变量名忽略不写,编译器不会报错

第2题

解析:

答案×,函数值传递,不会改变实参a

第3题

解析:

答案×,结构体可以嵌套定义

第4题

解析:

答案√,引用传递可以改变实参

第5题

解析:

答案×,可以忽略,忽略时默认填充0,即数组为{  {1,2,0} , {3,0,0}  }

第6题

解析:

答案×,i从0开始,导致错误

第7题

解析:

答案√,两层循环始终循环约n次

#include <bits/stdc++.h>
using namespace std;
// 选择排序函数(升序)
void selectionSort(vector<int>& arr) {
int n = arr.size();
// 外层循环:控制已排序区的边界(i是未排序区的第一个元素下标)
for (int i = 0; i < n – 1; ++i) {
// 1. 初始化最小值下标为未排序区第一个元素
int minIndex = i;

// 2. 内层循环:在未排序区找最小值的下标
for (int j = i + 1; j < n; ++j) {
if (arr[j] < arr[minIndex]) {
minIndex = j; // 更新最小值下标
}
}

// 3. 交换:将最小值放到未排序区的第一个位置
if (minIndex != i) { // 优化:如果最小值已经在当前位置,无需交换
swap(arr[i], arr[minIndex]);
}
}
}

int main() {
// 测试用例
vector<int> arr = {64, 25, 12, 22, 11};
// 执行选择排序
selectionSort(arr);
return 0;
}

第8题

解析:

答案√,这就是选择排序的过程

第9题

解析:

答案×,导致运行错误,而不会编译错误

#include<bits/stdc++.h>
using namespace std;
// 故意抛出不同类型异常的函数
void throwDifferentExceptions(int type) {
throw "error"; // 抛出 string 类型异常
}

int main() {
try {
throwDifferentExceptions(1);
}
catch (int a ) { //
cout << "捕获到string异常" << endl;
}

return 0;
}

第10题

解析:

答案√,这就写入文件的语法

三、编程题

第1题 [GESP202506 四级] 画布裁剪

题目描述

小 A 在高为 h 宽为 w 的矩形画布上绘制了一幅画。由于画布边缘留白太多,小 A 想适当地裁剪画布,只保留画的主体。具体来说,画布可以视为 h 行 w 列的字符矩阵,其中的字符均为 ASCII 码位于 33∼126 之间的可见字符,小 A 只保留画布中由第 x1​ 行到第 x2​ 行、第 y1​ 列到第 y2​ 列构成的子矩阵。

小 A 将画布交给了你,你能帮他完成画布的裁剪吗?

输入格式

第一行,两个正整数 h,w,分别表示画布的行数与列数。

第二行,四个正整数 x1​,x2​,y1​,y2​,表示保留的行列边界。

接下来 h 行,每行一个长度为 w 的字符串,表示画布内容。

输出格式

输出共 x2​−x1​+1 行,每行一个长度为 y2​−y1​+1 的字符串,表示裁剪后的画布。

输入输出样例

输入 #1

3 5
2 2 2 4
…..
.>_<.
…..

输出 #1

>_<

输入 #2

5 5
1 2 3 4
AbCdE
fGhIk
LmNoP
qRsTu
VwXyZ

输出 #2

Cd
hI

说明/提示

对于所有测试点,保证 1 ≤ h,w ≤ 100,1 ≤ x1 ​≤ x2 ​≤ h,1 ≤ y1 ​≤ y2 ​≤ w。

答案

#include<bits/stdc++.h>
using namespace std;
int main() {
//1)确定大小h*w
int h,w;
cin>>h>>w;
//2)确定范围x1 x2 y1 y2
int x1,x2,y1,y2;
cin>>x1>>x2>>y1>>y2;
//3)填充二维数组
char a[110][110];
for(int i=1;i<=h;i++){
for(int j=1;j<=w;j++){
cin>>a[i][j];
}
}
//4)输出范围内的数据
for(int i=x1;i<=x2;i++){
for(int j=y1;j<=y2;j++){
cout<<a[i][j];
}
cout<<endl;
}

}

第2题 [GESP202506 四级] 排序

题目描述

体育课上有 n 名同学排成一队,从前往后数第 i 位同学的身高为 hi​,体重为 wi​。目前排成的队伍看起来参差不齐,老师希望同学们能按照身高从高到低的顺序排队,如果身高相同则按照体重从重到轻排序。在调整队伍时,每次只能交换相邻两位同学的位置。老师想知道,最少需要多少次交换操作,才能将队伍调整成目标顺序。

输入格式

第一行,一个正整数 n,表示队伍人数。

接下来 n 行,每行两个正整数 hi​ 和 wi​,分别表示第 i 位同学的身高和体重。

输出格式

输出一行,一个整数,表示最少需要的交换次数。

输入输出样例

输入 #1

5
1 60
3 70
2 80
4 55
4 50

输出 #1

8

输入 #2

5
4 0
4 0
2 0
3 0
1 0

输出 #2

1

说明/提示

对于所有测试点,保证 1 ≤ n ≤ 3000,0 ≤ hi​,wi ​≤ 10^{9}

答案

#include<iostream>

赞(0)
未经允许不得转载:171主机测评 » 2025年6月GESPC++四级真题解析(含视频)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址