一、单选题
第 1 题

2025 年 9 月 GESP C++ 三级考试真题解析,涵盖单选题、判断题及编程题。内容包括基础语法、数组操作、函数调用、枚举类型及文件包含等知识点分析。编程题涉及数组清零模拟与日历格式化输出,提供完整 C++ 代码实现与解题思路。


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

解析:
答案 C,
(10!=10) || (5>=3) false || true true

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

解析:
答案 B,


解析:
答案 B,创建函数的格式如下
返回值类型 函数名 (参数列表) { // 函数体:实现具体功能的代码 语句块; return 返回值; // 若返回值类型非 void,需返回对应类型的值 }
例如创建'实现加法函数'int add(int a,int b) { return a+b; }

解析:
答案 B,
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

解析:
答案 B,
A 选项,void 表示无返回参数

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

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

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


解析:
答案 D,continue 导致 count++一直没有执行

解析:
答案 A,

解析:
答案 C,


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

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

解析:
答案 D,
A 选项,不只有值传递

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

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


解析:
答案 C,
第一处:for 循环,不能 SIZE,会造成数组越界
第二处:cout<<arr[SIZE] 会造成数组越界

解析:
答案 D,
A 选项,char 数组需要用 strcpy
#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
#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 数组不能用==判断相等

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

解析:
答案√,
#include<bits/stdc++.h> using namespace std; int a;//全局变量 int main() { cout<<a;//0 }

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

解析:
答案√,
#include<bits/stdc++.h> using namespace std; int main() { int a=1; cout<<a++<<endl;//1 cout<<++a;//3 }

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

解析:
答案×,
#include <iostream> using namespace std; #define SQUARE(x) x*x; int main() { cout<<SQUARE(2+3);// 2+3*2+3=11 return 0; }

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


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

解析:
答案×,
#include"file.h" 是从本地文件开始搜索,搜索不到,就查找 C++库文件 #include<file.h> 是直接查找 c++库文件

解析:
答案×,
#include <iostream> using namespace std; // 变量定义(分配内存),作用域内仅一次 int a = 10; int main() { // extern 声明(仅表明变量在别处定义,可多次出现) extern int a; // 若尝试'定义'多次,会报错 int a = 20; // 错误:同一作用域内变量定义重复 return 0; }
小 A 有一个由 n 个非负整数构成的数组 a=[a1,a2,…,an]。他会对阵组 a 重复进行以下操作,直到数组 a 只包含 0。在一次操作中,小 A 会依次完成以下三个步骤:
例如,数组 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。
#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; }
小 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。
#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; } }

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online