GESP认证C++编程真题解析 | 202409 四级

news/2026/1/18 0:07:49/文章来源:https://www.cnblogs.com/guolianggsta/p/19497423

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


单选题

第1题

在C++中,( )正确定义了一个返回整数值并接受两个整数参数的函数。

A.int add(int a, int b) { return a + b; }

B.void add(int a, int b) { return a + b; }

C. int add(a, b) { return a + b; }

D. void add(int a, int b) { return a - b; )

【答案】:A

【解析】

函数的定义中,返回值类型写在函数名之前,参数表需要指定参数的类型。

第2题

在C++中,形参与实参的关系描述正确的是( )。

A.形参在函数调用时指定,实参在函数定义时传递

B.形参在函数定义时指定,实参在函数调用时传递

C.形参和实参可以互换

D.形参和实参必须是完全相同的类型,不能有任何差异。

【答案】:B

【解析】

形参在函数定义时指定,实参在函数调用时传递,B正确。调用时,实参可以隐式转换成形参的类型(如果符合隐式转换的规则),D错误。

第3题

运行以下代码,屏幕上将输出( )。

#include <iostream>
using namespace std;int var = 100;
void function() {int var = 200;cout << var << " ";cout << ::var << " ";
}int main() {cout << var << " ";function();var += 100;cout << var << " ";
}

A.100 200 100 200

B.100 200 100 300

C.100 200 200 200

D.100 200 200 300

【答案】:A

【解析】

程序中有两个变量var,一个是全局变量,一个是 function 函数中定义的局部变量。程序共输出4个数,main 函数中访问的 var 是全局变量,所以输出的第一个数是100,最后一个数是200;function 函数产生第二与第三个输出,默认访问的是局部变量,所以第二个输出是200。::是域作用符,它前面没有写具体的命名空间,默认指的是全局命名空间,所以::var 访问的是全局变量var,值为100。

第4题

运行下面代码,屏幕上输出是( )。

int arr[3] = {24,9,7};
int* p = arr;
p++;
cout << *p << endl;

A.24

B.9

C.7

D.7

【答案】:B

【解析】

第二行定义指针p,指向数组 arr 下标为0的元素24,执行厅p++后p指向下一个元素9。

第5题

运行下面代码片段的结果是( )。

int x = 20;
int y = 24;
int* p = &x;
int* q = &y;
p = q;

A.将 x 赋值为24

B.将 y 赋值为20

C.将 q 指向 x 的地址

D.将 p 指向 y 的地址

【答案】:D

【解析】

指针p指向x,q指向y,p = q就是让p指向q指向的地方,也就是让p指向y的地址。操作并不改变x与与y的值。

第6题

在C++中,( )正确定义一个名为student 的结构体,其中包含一个name 字符数组和一个age 整数?

A.struct student { char name[20]; int age; };

B.student struct { char name[20]; int age; };

C.student struct { string name; int age; };

D.struct student { char[20] name; int age; };

【答案】:A

【解析】

结构体关键字 struct,大括号中定义结构体成员。

第7题

在C++中,( )正确声明了一个3行4列的二维数组。

A.int arr[3, 4];

B.int arr[3][4];

C.int arr[4][3];

D.int arr(3, 4);

【答案】:B

【解析】

声明二维数组,语法为“元素类型 数组名[行数][列数];”

第8题

一个二维数组定义为 int arr[3][4]; (假设一个int变量占4个字节),则 int arr[0] 占用( )个字节的内存。

A.3

B.4

C.12

D.16

【答案】:D

【解析】

intarr[0]相当于4个元素的一维数组,占用4 * 4=16个字节。

第9题

下面代码采用递推算法来实现整数的阶乘( ),则横线上应填写( )。

int factorial(int n) {int result = 1;for (int i=2; i<=n; i++) {_________________________ // 在此处填入代码}return result;
}

A.result *= i;

B.result += i;

C.result *= result;

D.result += result;

【答案】:A

【解析】

1! = 1, n! = (n-1)! * n。

第10题

在排序算法中,稳定性指的是( )。

A.排序后数据不会丢失

B.排序后相同元素的相对顺序保持不变

C.排序后数据不会被修改

D.排序后数据的时间复杂度不变

【答案】:B

【解析】

排序的稳定性指的是:排序后相同元素的相对顺序保持不变。

第11题

下面代码实现了冒泡排序函数,则横线上应填写( )。

// 交换数组arr的第i个元素和第j个元素
void swap(vector &arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;
}
int bubble_sort(vector &arr) {for (int i=arr.size()-1; i>0; i--) {bool flag = false;  // 标志位_________________________ { // 在此处填入代码if (arr[j] > arr[j+1]) {swap(arr, j+1, j);flag = true;}}if (!flag) break;  // 此轮“冒泡”未交换任何元素}
}

A.for (int j=0; j<arr.size()-1; j++)

B.for (int j=arr.size()-1; j>0; j--)

C.for (int j=0; j<i; j++)

D.for (int j=i-1; j<=0; j--)

【答案】:C

【解析】

本程序中冒泡排序将大的元素交换至数组右边,最多共n-1轮冒泡。

第12题

上一题算法的时间复杂度为( )。

A.\(O(n^2)\)

B.\(O(2^n)\)

C.\(O(1)\)

D.\(O(n)\)

【答案】:A

【解析】

冒泡排序的时间复杂度是\(O(n^2)\)

第13题

下面代码实现了插入排序函数(升序),则横线上应填写( )。

void insertion_sort(vector &nums) {for (int i=1; i<nums.size(); i++) {int base = nums[i], j = i - 1;___________________________ { // 在此处填入代码nums[j+1] = nums[j];j--;}nums[j+1]=base;}
}

A.while (j>=0 && nums[j]>base)

B.while (j>0 && nums[j]>base)

C.while (j>=0 && nums[j]<base)

D.while (j>0 && nums[j]<base)

【答案】:A

【解析】

插入排序的原理是从第二个元素开始,不断将当前元素插入左侧有序部分。

第14题

小杨用文件重定向实现在 log.txt 文件中输出日志,则下面横线上应填写( )。

#include <iostream>
#include <fstring>
#include <string>
using namespace std;int main() {ofstream log_file("log.txt");streambuf* original_cout = cout.rdbuf();cout.rdbuf(log_file.rdbuf());__________________________________ // 在此处填入代码cout.rdbuf(original_cout);  // 恢复原始的标准输出缓冲区return 0;
}

A.cout << "This output will go to the log file." << endl;

B.log_file << "This output will go to the log file." << endl;

C.cout >> "This output will go to the log file." << endl;

D.log_file >> `"This output will go to the log file." << endl;

【答案】:A

【解析】

程序将标准输出重定向到一个文件log.txt。所以空白处应该用cout,输出的内容会输出到 log.txt中。然后,恢复标准输出缓冲区。

第15题

运行下面的代码,屏幕上将输出( )。

#include <iosteam>
using namespace std;int divide(int a, int b) {if (b==0) {throw runtime_error("division by zero error");}return a / b;
}int main() {int x = 10;int y = 0;  // 设为0会导致除零错误try {int result = divide(x, y);cout << "result: " << result << endl;} catch (const runtime_error& e) {cout << "caught an exception: " << e.what() << endl;}return 0;
}

A.division by zero error result: caught an exception:

B.result: caught an exception: division by zero error

C.caught an exception: division by zero error

D.division by zero error caught an exception: division by zero error

【答案】:C

【解析】

divide函数中抛出异常,try 块中的 cout 语句不再执行。异常由main函数中的catch 捕获。

判断题

第16题

代码int a=10; int*p = &a;可以正确定义指针和初始化指针。

A.正确

B.错误

【答案】:A

【解析】

指针p指向变量a。

第17题

在C++中,引用传递允许函数修改传递给它的参数的值。

A.正确

B.错误

【答案】:A

【解析】

参数以引用方式传递,修改形参同时会修改实参。

第18题

指针的大小与其所指向的变量的数据类型的大小相同。

A.正确

B.错误

【答案】:B

【解析】

指针的大小由系统与编译器决定,32位系统中指针通常为4个字节,64位系统中指针通常为8个字节。

第19题

二维数组的行的大小的必须在定义时确定,列的大小可以动态变化。

A.正确

B.错误

【答案】:B

【解析】

二维数组的列的大小的必须在定义时确定,行的大小在定义时可以暂时省略。

第20题

递推算法通过逐步求解当前状态和前一个或几个状态之间的关系来解决问题。

A.正确

B.错误

【答案】:A

【解析】

递推算法的定义,属于简单的动规

第21题

选择排序是稳定的排序算法。

A.正确

B.错误

【答案】:B

【解析】

排序的稳定性指的是:排序后相同元素的相对顺序保持不变。常见的稳定的排序方法有:直接插入排序、冒泡排序、归并排序(鬼子头上插了一直🐔)。

第22题

插入排序的时间复杂度总是比冒泡排序低。

A.正确

B.错误

【答案】:B

【解析】

两种排序方法的最坏与平均时间复杂度都是\(O(n^2)\)

第23题

在C++中,如果没有捕获到异常(没有匹配的catch块),程序会继续执行而不会终止。

A.正确

B.错误

【答案】:B

【解析】

在C++中,异常会沿调用栈向上传播,直到找到一个匹配的 catch 块。如果没有找到匹配的catch 块,程序会终止执行。

第24题

以下代码用递推法求斐波那契数列的第n项,时间复杂度为指数级。

int fibonacci(int n) {if (n==0) return 0;if (n==1) return 1;int f0 = 0;  // F(0)int f1 = 1;  // F(1)int current;for (int i=2; i<=n; i++) {current = f0 + f1;  // F(n) = F(n-1) + F(n-2)f0 = f1;f1 = current;}return current;
}

A.正确

B.错误

【答案】:B

【解析】

递推法求斐波那契数列第n项的时间复杂度是 \(O(n)\) 的,即线性时间复杂度。

第25题

执行下面C++代码后,输出的是20。

int point(int* p) {return *p * 2;
}int main() {int a = 10;int* p = &a;*p = point(p);cout << *p << endl;
}

A.正确

B.错误

【答案】:B

【解析】

p指向变量 a, point 函数的返回值是p指向的变量的2倍,也也就是20。*p=20; 的执行效果是变量a赋值为20。最终输出a的值为20。

编程题

B4040 黑白方块

【题目来源】

洛谷:[B4040 GESP202409 四级] 黑白方块 - 洛谷

【题目描述】

小杨有一个\(n\)\(m\) 列的网格图,其中每个格子要么是白色,要么是黑色。小杨想知道网格图中是否存在一个满足如下条件的子矩形:子矩形由\(4\)\(4\)列组成;子矩形的第\(1\)行和第\(4\)行只包含白色格子;对于子矩形的第\(2\)行和第\(3\)行,只有第\(1\)个和第\(4\)个格子是白色的,2其余格子都是黑色的;请你编写程序帮助小杨判断。

【输入】

第一行包含一个正整数\(t\),代表测试用例组数。接下来是\(t\)组测试用例。对于每组测试用例,一共\(n+1\)行。第一行包含两个正整数\(n\)\(m\),含义如题面所示。之后\(n\)行,每行一个长度为\(m\)\(01\)串,代表网格图第 \(i\) 行格子的颜色,如果为\(0\),则对应格子为白色,否则为黑色。

【输出】

对于每组测试用例,如果存在,输出Yes,否则输出No。

【输入样例】

3
1 4 
0110
5 5
00000
01100
01100
00001
01100
5 5
00000
01100
01110
00001
01100

【输出样例】

No
Yes
No

【算法标签】

《洛谷 B4040 黑白方块》 #模拟# #枚举# #GESP# #2024#

【代码详解】

#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int w[N][N];  // 存储输入矩阵
int n, m;     // 矩阵的行数和列数
int match[4][4];  // 要匹配的模式// 检查以(xa,ya)为左上角的4x4子矩阵是否匹配模式
bool check(int xa, int ya) {for (int i = 0; i < 4; i++) {for (int j = 0; j < 4; j++) {if (w[xa+i][ya+j] != match[i][j]) {return false;  // 有任何不匹配就返回false}}}return true;  // 全部匹配返回true
}int main()
{int t;  // 测试用例数量cin >> t;// 初始化匹配模式match// 先全部初始化为0memset(match, 0, sizeof(match));// 设置特定位置为1for (int i = 1; i < 3; i++) {  // i=1,2match[1][i] = 1;  // 第1行第1,2列match[2][i] = 1;  // 第2行第1,2列}/*match模式:0 0 0 00 1 1 00 1 1 00 0 0 0也就是一个2x2的1在4x4矩阵的中央*/while (t--) {  // 处理每个测试用例cin >> n >> m;  // 输入矩阵大小// 读取矩阵for (int i = 1; i <= n; i++) {string s;cin >> s;for (int j = 1; j <= m; j++) {w[i][j] = s[j-1] - '0';  // 字符转数字}}int fl = 0;  // 标志位,0表示未找到,1表示找到// 遍历所有可能的4x4子矩阵for (int i = 1; i <= n-3; i++) {       // 行起始位置for (int j = 1; j <= m-3; j++) {   // 列起始位置if (check(i, j)) {             // 检查是否匹配fl = 1;                    // 找到匹配// 注意:这里没有break,会继续检查所有位置}}}if (fl) cout << "Yes" << endl;  // 找到了匹配的子矩阵else cout << "No" << endl;   // 没有找到}return 0;
}

【运行结果】

3
1 4
0110
No
5 5
00000
01100
01100
00001
01100
Yes
5 5
00000
01100
01110
00001
01100
No

B4041 区间排序

【题目来源】

洛谷:[B4041 GESP202409 四级] 区间排序 - 洛谷

【题目描述】

小杨有一个包含\(n\)个正整数的序列\(a\)

小杨计划对序列进行多次升序排序,每次升序排序小杨会选择一个区间\([1,r](l\le r)\)并对区间内所有数字\(a_l,a_{l+1},\dots,a_r\),进行升序排序。每次升序排序会在上一次升序排序的结果上进行。小杨想请你计算出多次升序排序后的序列。

【输入】

第一行包含一个正整数\(n\),含义如题面所示。第二行包含 \(n\) 个正整数,代表序列\(a_1,a_2,\dots,a_n\)。第三行包含一个正整数\(q\),代表排序次数。之后\(q\) 行,每行包含两个正整数\(l_i,r_i\),代表将区间\([l_i,r_i]\)内所有数字进行升序排序。

【输出】

输出一行包含\(n\) 个正整数,代表多次升序排序后的序列。

【输入样例】

5
3 4 5 2 1
3
4 5 
3 4
1 3

【输出样例】

1 3 4 5 2

【算法标签】

《洛谷 B4041 区间排序》 #模拟# #排序# #GESP# #2024#

【代码详解】

#include <bits/stdc++.h>
using namespace std;int a[105];  // 存储数组元素
int n, q;    // n: 数组长度, q: 操作次数int main()
{// 输入数组长度cin >> n;// 输入数组元素for (int i = 1; i <= n; i++){cin >> a[i];}// 输入操作次数cin >> q;// 处理每个区间排序操作for (int i = 1; i <= q; i++){int l, r;  // 区间左边界和右边界cin >> l >> r;// 对区间[l, r]进行排序sort(a + l, a + r + 1);}// 输出最终数组for (int i = 1; i <= n; i++){cout << a[i] << " ";}return 0;
}

【运行结果】

5
3 4 5 2 1
3
4 5
3 4
1 3
1 3 4 5 2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1175190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wan2.2部署方案:高可用视频生成服务的容灾设计

Wan2.2部署方案&#xff1a;高可用视频生成服务的容灾设计 1. 背景与挑战&#xff1a;构建稳定可靠的视频生成服务 随着AIGC技术在内容创作领域的深入应用&#xff0c;文本到视频&#xff08;Text-to-Video&#xff09;生成模型正逐步从实验性工具演变为实际生产环境中的关键…

全网最全10个AI论文平台,MBA高效写作必备!

全网最全10个AI论文平台&#xff0c;MBA高效写作必备&#xff01; AI 工具如何助力 MBA 学生高效完成论文写作 在当前快节奏的学术环境中&#xff0c;MBA 学生面临着日益繁重的论文写作任务。传统的写作方式不仅耗时耗力&#xff0c;还容易因格式、逻辑或内容重复等问题影响最终…

SPI数据帧结构详解:为何c++spidev0.0 read读出255

为什么你的 SPI 读出来总是 255&#xff1f;深入剖析 Linux 下spidev的真实工作原理你有没有遇到过这样的情况&#xff1a;在树莓派或嵌入式设备上用 C 调用/dev/spidev0.0&#xff0c;调了read()函数&#xff0c;结果返回的值永远是255&#xff08;即 0xFF&#xff09;&#x…

基于Modbus的RS485通信系统学习

深入理解工业通信基石&#xff1a;Modbus RTU over RS485 的实战解析在现代工业自动化系统中&#xff0c;设备之间的稳定通信是实现数据采集、远程控制和智能决策的基础。尽管以太网与无线技术日益普及&#xff0c;但在现场层&#xff08;Field Level&#xff09;&#xff0c;R…

大数据技术领域发展与Spark的性能优化

大数据技术领域发展与Spark的性能优化一、大数据技术领域发展方向 随着AI时代的到来,大数据技术领域逐渐退居二线,再也没有了前些年的重视程度。博主近期结合从业多年经验,对大数据技术领域的技术演进路线做下梳理。…

[sublime text] add sublime text to context menu 右键菜单中“Open with Sublime Text”

Google Gemini生成 Adding Sublime Text to your right-click (context) menu makes opening files and folders much faster. The process differs depending on whether you are using Windows or macOS.For Windows…

机遇,颓废,醒悟,挫折?奋进!

前言 2026.1.17 尽早写吧,虽然不知道学习 OI 的生涯能持续到何时,至少早些写能够多留下一些记忆。 机遇 小学四年级时,xyd 在区里各个小学四到六年级招人,要求是期末考成绩大于等于 380 分(满分 400)。我所在班里…

体验大模型图像处理:云端免配置方案,按需付费不浪费

体验大模型图像处理&#xff1a;云端免配置方案&#xff0c;按需付费不浪费 你是不是也遇到过这样的情况&#xff1a;作为产品经理&#xff0c;想快速验证一个AI功能能不能用在自家APP里&#xff0c;比如给用户加个“一键抠图换背景”的酷炫功能。可一问研发团队&#xff0c;对…

彼得林奇如何应对市场恐慌

彼得林奇如何应对市场恐慌 关键词&#xff1a;彼得林奇、市场恐慌、投资策略、风险管理、股票市场 摘要&#xff1a;本文深入探讨了投资大师彼得林奇应对市场恐慌的方法和策略。通过对彼得林奇投资理念和实践的分析&#xff0c;阐述了他在市场恐慌环境下如何保持冷静、做出明智…

如何在 Odoo 19 中为自定义模块添加章节和备注

如何在 Odoo 19 中为自定义模块添加章节和备注 在 Odoo 中&#xff0c;One2many 字段支持添加章节&#xff08;Section&#xff09; 和备注&#xff08;Note&#xff09;&#xff0c;这两类元素可帮助用户将相关记录分组到有意义的类别中&#xff0c;其中备注还能用于在特定记录…

广告学考研白热化突围:AI证书成上岸关键加分项

广告学考研赛道愈发拥挤&#xff0c;不仅有着63.2%的高复试淘汰率&#xff0c;跨考生占比更超六成&#xff0c;传统备考已难破“高分难上岸”困局。在此背景下&#xff0c;一张高价值AI证书&#xff0c;成为广告学考生打破同质化竞争、精准突围的核心抓手。如今广告学已升级为融…

如何在 Odoo 19 中创建日历视图

如何在 Odoo 19 中创建日历视图 在 Odoo 19 中&#xff0c;日历视图是管理和可视化基于时间数据的强大界面&#xff0c;常用于约会、截止日期、任务、会议等日程安排场景。它提供了直观的图形化布局&#xff0c;可按日、周、月展示记录&#xff0c;在项目、销售、CRM 等模块中尤…

Java毕设项目推荐-基于springboot的旅行指南行程规划、景点推荐系统的设计与实现【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【计算机毕业设计案例】基于springboot的旅行指南个性化行程推荐系统的设计与实现(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

科大讯飞秋招笔试真题 - 字符拼接 字典序最小的字符串拼接 圆心覆盖

字符拼接 题目描述 给定两个由可见字符和空格组成的字符串s和t&#xff0c;其中字符串t的长度为偶数. 请将t的后半部分嫁按到s的未尾&#xff0c;并输出嫁接后的s以及t 的前半部分。 本题字符串的字符集为 ASCIl 码在 32 到 126 之间的字符&#xff0c;即大小写字母、数字、标点…

基于SpringBoot的KPL赛事综合管理系统的设计与实现

KPL赛事综合管理系统课题背景 电子竞技产业近年来发展迅猛&#xff0c;尤其是移动电竞领域&#xff0c;王者荣耀职业联赛&#xff08;KPL&#xff09;作为国内顶级移动电竞赛事&#xff0c;其规模与影响力持续扩大。随着赛事体系日趋复杂&#xff0c;传统人工管理模式已难以应对…

新闻学学生留学信息差避坑指南:掌握这些,学习留学两不误

新闻学留学的核心竞争力在于把控信息差&#xff0c;其受地域媒体环境、行业认证等因素影响极深&#xff0c;易陷入高投入低回报困境。本文从选校、申请、学业、就业四大环节&#xff0c;拆解核心陷阱&#xff0c;助力平衡学术与职业发展。一、选校避坑&#xff1a;跳出排名&…

基于python的搜索引擎设计与实现

搜索引擎设计与实现的课题背景 在当今信息爆炸的时代&#xff0c;搜索引擎已成为人们获取信息的重要工具。随着互联网数据的快速增长&#xff0c;如何高效地检索、排序和呈现信息成为计算机科学领域的重要研究方向。Python作为一种高效、灵活的编程语言&#xff0c;因其丰富的库…

基于SpringBoot的车辆违章信息管理系统的设计与实现

车辆违章信息管理系统的背景与意义 随着城市化进程加快和机动车保有量激增&#xff0c;交通违章现象日益频发&#xff0c;传统人工管理模式在数据处理效率、信息共享和执法透明度等方面面临严峻挑战。据公安部统计&#xff0c;2022年全国机动车保有量达4.17亿辆&#xff0c;同比…

基于Bilibili青少年模式使用情况的数据分析系统设计与实现开题报告

基于Bilibili青少年模式使用情况的数据分析系统设计与实现开题报告 一、研究背景与意义 &#xff08;一&#xff09;研究背景 随着数字技术的深度渗透&#xff0c;青少年已成为互联网消费的核心群体。截至2025年&#xff0c;我国青少年网民规模突破2.8亿&#xff0c;日均上网时…