2025年9月GESPC++三级真题解析(含视频)

视频讲解:GESP2025年9月三级C++真题讲解

一、单选题

第1题

解析:

答案C,a、b都为int,计算不出小数部分,10/3=3

第2题

解析:

答案C,

复制代码
(10!=10) || (5>=3)
false || true
true

第3题

解析:

答案D,arr[5]数组,最后一个元素的下标是4

第4题

解析:

答案B,

第5题

解析:

答案B,创建函数的格式如下

cpp 复制代码
返回值类型 函数名(参数列表) {
    // 函数体:实现具体功能的代码
    语句块;
    return 返回值; // 若返回值类型非void,需返回对应类型的值
}
例如创建 "实现加法函数"
int add(int a,int b) {
    return a+b;
}

第6题

解析:

答案B,

cpp 复制代码
int arr[4]={1,2,3}; // arr[0]=1   arr[1]=2   arr[2]=3
arr[3]=arr[0]+arr[2]; //arr[3]=1+3=4

第7题

解析:

答案B,

A选项,void表示无返回参数

B选项,通过函数引用传递,间接返回多个值

C选项,main()调用会导致无限循环

D选项,无法嵌套定义函数

第8题

解析:

答案D,coutinue导致count++一直没有执行

第9题

解析:

答案A,

第10题

解析:

答案C,

第11题

解析:

答案D,int的最大值是2147483647,反转后就是7463847412,7要改为1否则int存储不了,即为1463847412

第12题

解析:

答案C,假设arr[0]是最大值,之后在循环和后面所有数据做比较

第13题

解析:

答案D,

A选项,不只有值传递

B选项,形参调用完后,内存会自动释放

C选项,不声明void,也可以没返回值

第14题

解析:

答案C,

第一处:for循环,不能SIZE,会造成数组越界

第二处:cout<<arr[SIZE] 会造成数组越界

第15题

解析:

答案D,

A选项,char数组需要用strcpy

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
	string s1="abc";
	char s2[]="abc";
	strcpy(s2,"bcd");
	cout<<s2;
    return 0;
}

B选项,string获取长度用size或length,char数组要用strlen

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
	string s1="abc";
	char s2[]="abc";
	cout<<s1.length()<<" "<<s1.size()<<endl;
	cout<<strlen(s2);
    return 0;
}

C选项,string的长度就是动态变化的

D选项,string 和 char数组 不能用==判断相等

二、判断题

第1题

解析:

答案×,sizeof是获取数据类型所占内存大小,1是因为 'a'是char类型

第2题

解析:

答案√,

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int a;//全局变量
int main() {
	cout<<a;//0
}

第3题

解析:

答案√,会先do,在进行while判断,所以至少执行一次

第4题

解析:

答案√,

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
	int a=1;
	cout<<a++<<endl;//1
	cout<<++a;//3
}

第5题

解析:

答案×,是color类型

cpp 复制代码
#include <iostream>
using namespace std;
// 定义枚举类型Color
enum Color { RED, GREEN, BLUE };
int main() {
    // 枚举常量的类型是Color,而非int
    Color c = RED;  // 正确:RED是Color类型,可赋值给Color变量
    return 0;
}

第6题

解析:

答案×,

cpp 复制代码
#include <iostream>
using namespace std;
#define SQUARE(x) x*x;
int main() {
    cout<<SQUARE(2+3);// 2+3*2+3=11 
    return 0;
}

第7题

解析:

答案×,是0至127,对应ASCII表

第8题

解析:

答案×,当b是string类型,b=10会不合法

第9题

解析:

答案×,

cpp 复制代码
#include"file.h" 是从本地文件开始搜索,搜索不到,就查找C++库文件
#include<file.h> 是直接查找c++库文件

第10题

解析:

答案×,

cpp 复制代码
#include <iostream>
using namespace std;
// 变量定义(分配内存),作用域内仅一次
int a = 10; 
int main() {
    // extern 声明(仅表明变量在别处定义,可多次出现)
    extern int a; 
    // 若尝试"定义"多次,会报错
    int a = 20; // 错误:同一作用域内变量定义重复
    return 0;
}

三、编程题

第1题 [GESP202509 三级] 数组清零

题目描述

小 A 有一个由 n 个非负整数构成的数组 a=[a1​,a2​,...,an​]。他会对阵组 a 重复进行以下操作,直到数组 a 只包含 0。在一次操作中,小 A 会依次完成以下三个步骤:

  1. 在数组 a 中找到最大的整数,记其下标为 k。如果有多个最大值,那么选择其中下标最大的。
  2. 从数组 a 所有不为零的整数中找到最小的整数 aj。
  3. 将第一步找出的 ak 减去 aj。

例如,数组 a=[2,3,4] 需要 7 次操作变成 [0,0,0]:

2,3,4\]→\[2,3,2\]→\[2,1,2\]→\[2,1,1\]→\[1,1,1\]→\[1,1,0\]→\[1,0,0\]→\[0,0,0

小 A 想知道,对于给定的数组 a,需要多少次操作才能使得 a 中的整数全部变成 0。可以证明,a 中整数必然可以在有限次操作后全部变成 0。你能帮他计算出答案吗?

输入格式

第一行,一个正整数 n,表示数组 a 的长度。

第二行,n 个非负整数 a1​,a2​,...,an​,表示数组 a 中的整数。

输出格式

一行,一个正整数,表示 a 中整数全部变成 0 所需要的操作次数。

输入输出样例

输入 #1

复制代码
3
2 3 4

输出 #1

复制代码
7

输入 #2

复制代码
5
1 3 2 2 5

输出 #2

复制代码
13

说明/提示

对于所有测试点,保证 1 ≤ n ≤ 100,0 ≤ ai ​≤ 100。

答案

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int main(){
	//1)填充数据
	//1.1)确定大小n
	int n;cin>>n; 
	//1.2)确定数组 
	int a[110]={};
	for(int i=1;i<=n;i++) cin>>a[i];
	//2)模拟"数组清零"
	int ans=0;
	while(true){
		int maxx=INT_MIN,max_i,minn=INT_MAX;
		for(int i=1;i<=n;i++){
			if(a[i]!=0){
				//2.1)找到最大值的下标 
				if(a[i]>=maxx){
					maxx=a[i];
					max_i=i;
				}
				//2.2)找到最小值
				if(a[i]<minn) minn=a[i];
			}
		}
		//2.3)判断是否找到最大值 
		if(maxx==INT_MIN) break;
		//2.4)修改a[max_i]=a[max_i]-minn;
		a[max_i]=a[max_i]-minn;
		ans++;
	} 
	cout<<ans;
}

第2题 [GESP202509 三级] 日历制作

题目描述

小 A 想制作 2025 年每个月的日历。他希望你能编写一个程序,按照格式输出给定月份的日历。

具体来说,第一行需要输出 MON TUE WED THU FRI SAT SUN,分别表示星期一到星期日。接下来若干行中依次输出这个月所包含的日期,日期的个位需要和对应星期几的缩写最后一个字母对齐。例如,2025 年 9 月 1 日是星期一,在输出九月的日历时,1 号的个位 1 就需要与星期一 MON 的最后一个字母 N 对齐。九月的日历输出效果如下:

复制代码
MON TUE WED THU FRI SAT SUN
  1   2   3   4   5   6   7
  8   9  10  11  12  13  14
 15  16  17  18  19  20  21
 22  23  24  25  26  27  28
 29  30

你能帮助小 A 完成日历的制作吗?

输入格式

一行,一个正整数 m,表示需要按照格式输出 2025 年 m 月的日历。

输出格式

输出包含若干行,表示 2025 年 m 月的日历。

输入输出样例

输入 #1

复制代码
9

输出 #1

复制代码
MON TUE WED THU FRI SAT SUN
  1   2   3   4   5   6   7
  8   9  10  11  12  13  14
 15  16  17  18  19  20  21
 22  23  24  25  26  27  28
 29  30

输入 #2

复制代码
6

输出 #2

复制代码
MON TUE WED THU FRI SAT SUN
                          1
  2   3   4   5   6   7   8
  9  10  11  12  13  14  15
 16  17  18  19  20  21  22
 23  24  25  26  27  28  29
 30

说明/提示

对于所有测试点,保证 1 ≤ m ≤ 12。

答案

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int main(){
	//1)确定月份m
	int m;cin>>m;
	//2)数组标记 月份  空格
	int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	int kong[13]={0,2,5,5,1,3,6,1,4,0,2,5,0};
	//3)输出 顶部英文
	cout<<"MON TUE WED THU FRI SAT SUN"<<endl;
	//4)输出空格
	for(int i=1;i<=kong[m];i++){
		cout<<"    ";
	} 
	//5)输出数字
	for(int i=1;i<=days[m];i++){
		printf("%3d ",i);
		if( (kong[m]+i)%7==0 ) cout<<endl;
	} 
}
相关推荐
努力学习的小廉1 小时前
我爱学算法之—— BFS之FLoodFill算法
算法·宽度优先
喵了几个咪1 小时前
Golang微服务框架kratos实现Socket.IO服务
开发语言·微服务·golang
q***42051 小时前
PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案
开发语言·redis·php
天选之女wow1 小时前
【Hard——Day8】65.有效数字、68.文本左右对齐、76.最小覆盖子串
linux·运维·redis·算法·leetcode
AI大模型学徒2 小时前
NLP基础(八)_马尔可夫模型
算法·机器学习·自然语言处理·nlp·概率论·马尔可夫模型
前端小L2 小时前
图论专题(十八):“逆向”拓扑排序——寻找图中的「最终安全状态」
数据结构·算法·安全·深度优先·图论·宽度优先
前端小L2 小时前
图论专题(十七):从“判定”到“构造”——生成一份完美的「课程表 II」
算法·矩阵·深度优先·图论·宽度优先
qq_433554542 小时前
C++ 稀疏表
开发语言·c++·算法
Bona Sun2 小时前
单片机手搓掌上游戏机(十二)—esp8266运行gameboy模拟器之编译上传
c语言·c++·单片机·游戏机