news 2026/4/23 14:24:59

GESP认证C++编程真题解析 | 202406 三级

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GESP认证C++编程真题解析 | 202406 三级

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

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

适合人群:

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

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


单选题

第1题

小杨父母带他到某培训机构给他报名参加CCF组织的G ESP认证考试的第1级,那他可以选择的认证语言有( )种。

A.1

B.2

C.3

D.4

【答案】:C

【解析】

GESP考察语言为图形化(Scratch)编程、Python编程及C++编程。

第2题

下面流程图在yr输入2024时,可以判定yr代表闰年,并输出出2月是29天,则图中菱形框中应该填入( )。

A.(yr % 400 == 0) || (yr % 4 == 0)

B.(yr % 400 == 0) || (yr % 4 ==0 && yr % 100 !=0)

C.(yr % 400 == 0) && (yr % 4 == 0)

D.(yr % 400 == 0) && (yr % 4 == 0 && yr % 100 != 0)

【答案】:B

【解析】

考察判断闰年的条件,非整百年份:能被4整除的是闰年(如2004年就是闰年,2001年不是闰年)。整百年份:能被400整除的是闰年(如2000年是闰年,1900年不是闰年)。

&&“条件与”, x&&y:x和y均为true, 取值是true, 否则取值是false。

|| 逻辑“或”,x || y:x和y均为false, 取值是false, 否则取值是true。

第3题

一般默认64位计算机系统中整型变量(int)还是32位, 则整数能够表示的数据范围是( )。

A.0 ∼ 2 32 0\sim 2^{32}0232

B.0 ∼ 2 64 0\sim 2^{64}0264

C.− 2 31 ∼ ( 2 31 ) − 1 -2^{31}\sim (2^{31})-1231(231)1

D.− 2 63 ∼ ( 2 63 ) − 1 -2^{63}\sim (2^{63})-1263(263)1

【答案】:C

【解析】

考察int类型的取值范围, int存储时占32位, 其中一位是符号位, 所以取值范围为-2147483648~2147483647,即选项C。

第4题

下列代码将十进制转化成八进制,则横线上应填入( )。

#include<iostream>usingnamespacestd;voiddecimal2octal(intdecimal){intoct_number[100];inti=0;while(decimal>0){____// 在此处填入代码}for(intj=i-1;j>=0;j--){cout<<oct_number[j];}cout<<endl;}

A.oct_number[i] = decimal % 8; decimal /= 8;

B.oct_number[i] = decimal / 8; decimal %/= 8;

C.oct_number[i++] = decimal % 8; decimal /= 8;

D.oct_number[i++] = decimal / 8; decimal %= 8;

【答案】:C

【解析】

【解析】考察进制转换,除8取余法:将十进制数连续除以8,每次的余数就是八进制数的一位,而商继续除以8,直到商为0为止。将余数从下往上排列,得到的数字就是十进制数的八进制表示。

第5题

二进制数101.11对应的十进制数是( )。

A.6.5

B.5.5

C.5.75

D.5.25

【答案】:C

【解析】

二进制整数转化十进制:从二进制数的右边第一位起,从右往左,先用二制位置上的数乘以2的相应位数的幂,然后把每一位的乘积相加即可得到二进制数对应的十进制数。

小数的二进制数转化为十进制数的方法,从左往右,用二进制位数上的数字乘以2的负位数次幂,然后把所有乘积相加即可得。

第6题

下列流程图的输出结果是( )。

A.5

B.10

C.20

D.30

【答案】:B

【解析】

嵌套循环的流程图,外层循环遍历i:04,内层循环j:0i-1,每循环一次sum加1, 内外层循环执行次数为:0+1+2+3+4=10, 所以sum值最终为10。

第7题

下列代码的输出结果是( )。

#include<iostream>usingnamespacestd;intmain(){inta=12;intresult=a>>2;cout<<result<<endl;return0;}

A.12

B.6

C.3

D.1

【答案】:C

【解析】

右移运算符,12的二进制位为1100,右移两位后为11,二进制11转化为十进制是3。

第8题

下列代码的输出结果是( )。

#include<iostream>usingnamespacestd;intmain(){inta=5;intb=10;a=a^b;b=a^b;a=a^b;cout<<"a = "<<a<<", b = "<<b<<endl;return0;}

A.a = 5, b = 10

B.a = 5, b = 5

C.a = 10, b = 5

D.a = 10, b = 10

【答案】:C

【解析】

^是异或运算符,用于两个操作数的二进制位的异或运算。当两个操作数的某一位相同(同为0或同为1)时,结果为0,不同时结果为1。这段代码是通过异或运算交换两个变量的值。

第9题

如果字符串定义为char str[]=“GESP”; , 则字符数组str的长度为( ) 。

A.0

B.4

C.5

D.6

【答案】:C

【解析】

字符数组里每一个字符都占据一个存储单元,且以’\0’作为结尾,'\0’用于标记字符串的结束位置。\'0’虽然是一个特殊的字符,但在字符数组中,它也是一个实实在在的字符,占用一个存储单元。

第10题

在下列代码的横线处填写( ),可以使得输出是“7”。

#include<iostream>usingnamespacestd;intmain(){intarray[5]={3,7,5,2,4};intmax=0;for(inti=0;i<5;i++)if(____)// 在此处填入代码max=array[i];cout<<max<<endl;return0;}

A.max > array[i]

B.max < array[i]

C.max = array[i]

D.以上均不对

【答案】:B

【解析】

本题代码用一维数组存储数据, 然后for循环遍历找最大值。判断条件为如果array[i]比原来存储的最大值max还要大, 就更新最大值。

第11题

小杨在做数学题,题目要求找出从1到35中能被7整除的数字,即[7,14,21,28,35],则横线处应填入哪个代码?( )

#include<iostream>usingnamespacestd;intmain(){intarr[35];intcount=0;for(inti=1;i<=35;i++){if(i%7==0)____// 在此处填入代码}for(inti=0;i<count;i++)cout<<arr[i]<<endl;return0;}

A.arr[count++]=i;

B.arr[i] = count++;

C.arr[i] = count;

D.arr[count] = count++;

【答案】:A

【解析】

循环遍历i:1~35找能被7整除的数字,如果i满足条件,i存储到数组里,数组下标用count控制, arr[count++] =i; 是把i值放入arr[count] , 然后count自增。

第12题

已知字符’0’的ASCII编码的十进制表示为48,则执行下面C++代码后,,输出是( )。

#include<iostream>usingnamespacestd;intmain(){string s="0629";intn=s.length();intx=0;for(inti=0;i<n;i++)x+=s[i]cout<<x<<endl;return0;}

A.17

B.158

C.209

D.316

【答案】:C

【解析】

字符串里的字符是用ASCII码存储, x累加的是字符的ASCII码值, 字符’0’的ASCII码值是48, 字符’2’的ASCII码值是50, 字符’6’的ASCII码值是54, 字符’9’的ASCII码值是57,48+50+54+57=209。

第13题

某小学男子篮球队招募新成员员,要求加入球队的成员身高在135厘米以上(不含135厘米)。本次报名的人员有10人,他们的身高分别是125、127、136、134、137、138、126、135、140、145。完善以下代码,求出本次球队能够招募到新成员的人数?( )

#include<iostream>usingnamespacestd;intmain(){intarr[10]={125,127,136,134,137,138,126,135,140,145};intcount=0;for(inti=0;i<10;i++)____// 在此处填入代码cout<<count<<endl;return0;}

A.count = arr[i]>135 ? 1 : 0;

B.count += arr[i]>135 ? 1 : 0;

C.count++;

D.以上都不对

【答案】:B

【解析】

循环遍历所有身高,统计135以上的个数。?:是三目运算符。

表达式1 ? 表达式2 : 表达式3。先求解表达式1,若其值为真(非0)则将表达式2的值作为整个表达式的取值,否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。B选项的功能是如果arr[i] >135, count加1否则加0。

第14题

下面可以正确输出They’re planning a party for their friend’s birthday.的C++语句是?( )

A.cout << 'They\‘re planning a party for their friend’\s birthday." << endl;

B.cout << “They\'re planning a party for their friend’s birthday.” << endl;

C.cout << ‘They’re planning a party for their friend’s birthday.’ << endl;

D.cout << “They\'re planning a party for their friend\'s birthday.” << endl;

【答案】:D

【解析】

字符串需要用双引号""括起来。

第15题

如果执行下面C++代码后, 输出的结果是“gesp ccf org cn" ,则横线上应填入哪个代码?( )

#include<iostream>usingnamespacestd;intmain(){string str="gesp.ccf.org.cn";string delimiter=".";string result="";string token;size_t found=str.find(delimiter);while(found!=string::npos){token=str.substr(0,found);result+=token;result+=" ";____// 在此处填入代码found=str.find(delimiter);}//最后一部分result+=str;result+=" ";cout<<result<<endl;return0;}

A.str = str.substr(found + delimiter.length(), str.length()-1);

B.str = str.substr(found, str.length());

C.str = str.substr(found, str.length()-1);

D.以上都不对

【答案】:A

【解析】

观察原字符串和输出结果可知,程序的目的是找到所有的点".“,换成空格” “,横线处需要填写的语句功能为将截取str第一个”."后的部分重新赋给str。

判断题

第16题

GESP测试是对认证者的编程能力进行等级认证, 同一级别的能力基本上与编程语言无关。

A.正确

B.错误

【答案】:A

【解析】

GESP赛事规则

第17题

整数-6的16位补码可用十六进制表示为FFFA。

A.正确

B.错误

【答案】:A

【解析】

考察数据编码中的反码,负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1, -6的16位补码用十六进制表示为FFFA。

第18题

补码的优点是可以将减法运算转化为加法运算,从而简化计算机的硬件设计。

A.正确

B.错误

【答案】:A

【解析】

考察数据编码知识,补码的优点是:可以将减法运算转化为加法运算,简化了运算过程。

第19题

字符常量’\0’常用来表示字符串结束,和字符常量’0’相同。

A.正确

B.错误

【答案】:B

【解析】

字符常量’\0’是字符串的结束标记, 它的ASCII码为0, 字符常量’0’的ASCII码为48,与’\0’是不同的字符常量。

第20题

数组的所有元素在内存中可以不连续存放。

A.正确

B.错误

【答案】:B

【解析】

数组元素在内存中是连续存放的。

第21题

C++中可以对数组和数组的每个基础类型的元素赋值。

A.正确

B.错误

【答案】:B

【解析】

不能对数组赋值,但可以对数组的每个基础类型的元素赋值。

第22题

如果a为int类型的变量, 且表达式((a|3) ==3) 的值为true, 则说明a在从0到3之间(可能为0、可能为3)。

A.正确

B.错误

【答案】:A

【解析】

((a|3)==3)说明a只在二进制的最低位和第二低位可能为1,所以0≤a≤3。

第23题

执行下面C++代码后,输出的结果是8。

inta=0b1010;intb=01100;intc=a&b;cout<<c<<endl;

A.正确

B.错误

【答案】:A

【解析】

0b是二进制表示,b是八进制,&:按位与,输出结果为0。

第24题

执行下面C++代码后,输出的结果不可能是89781。( )

#include<iostream>#include<cstdlib>// 为了使用rand()和srand()#include<ctime>// 为了使用time()usingnamespacestd;intmain(){// 设置随机种子srand(time(NULL));inti=1;it s[5];while(i<=5){inta=rand()%10;if(a%3==(i+1)%3)s[i++]=a;}for(inti=1;i<=5;i++)cout<<s[i];cout<<endl;return0;}

A.正确

B.错误

【答案】:A

【解析】

第14行a的取值范围是0~9,15行通过比较赋值,第一位可能为2,5,8,第二位可能为0,3,6,9,第三位可能为1,4,7,第四位可能为2,5,8,第五位第一位可能为0,3,6,9。最后一位不可能输出1。

第25题

把整数3025从中剪开分为30和25两个数,此时再将这两数之和平方,计算结果又等于原数。(30+25)×(30+25)=55×55=3025,这样的数叫“雷劈数”。可以使用枚举的方法求出所有符合这样条件的四位数。( )

A.正确

B.错误

【答案】:A

【解析】

枚举法:逐一列举问题所涉及的所有情形,并根据问题提出的条件检验哪些是问题的解,哪些应予排除。

编程题

B4003 移位

【题目来源】

洛谷:[B4003 GESP202406 三级] 移位 - 洛谷

【题目描述】

小杨学习了加密技术移位,所有大写字母都向后按照一个固定数目进行偏移。偏移过程会将字母表视作首尾相接的环,例如当偏移量是3的时候,大写字母A会替换成D,大写字母Z会替换成C,总体来看大写字母表ABCDEFGHIJKLMNOPQRSTUVWXYZ会被替换成DEFGHIJKLMNOPQRSTUVWXYZABC。

注:当偏移量是26的倍数时,每个大写字母经过偏移后会恰好回到原来的位置,即大写字母表ABCDEFGHIJKLMNOPQRSTUVWXYZ经过偏移后会保持不变。

【输入】

第一行包含一个正整数n。

【输出】

输出在偏移量为n的情况下,大写字母表ABCDEFGHIJKLMNOPQRSTUVWXYZ移位替换后的结果。

【输入样例】

3

【输出样例】

DEFGHIJKLMNOPQRSTUVWXYZABC

【算法标签】

《洛谷 B4003 移位》 #字符串(入门)# #GESP# #2024#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;intmain(){intn;cin>>n;for(inti=0;i<26;i++){intj=(i+n)%26;// j:字符偏移后离'A'的距离charch='A'+j;// ch:距离'A'为j的字符cout<<ch;//输出偏移后的字符}return0;}

【运行结果】

3 DEFGHIJKLMNOPQRSTUVWXYZABC

B4004 寻找倍数

【题目来源】

洛谷:[B4004 GESP202406 三级] 寻找倍数 - 洛谷

【题目描述】

小杨有一个包含n个正整数的序列A = [ a 1 , a 2 , … , a n ] A=[a_1, a_2, \dots, a_n]A=[a1,a2,,an],他想知道是否存在i ( 1 ≤ i ≤ n ) i(1\le i\le n)i(1in)使得a i a_iai是序列A中所有数的倍数。

【输入】

第一行包含一个正整数t,代表测试用例组数。

接下来是t组测试用例。

对于每组测试用例,一共两行。其中,第一行包含一个正整数n;第二行包含n个正整数,代表序列A。

【输出】

对于每组测试用例,如果存在i ( 1 ≤ i ≤ n ) i(1\le i\le n)i(1in)满足对于所有在k ( 1 ≤ k ≤ n ) k(1\le k\le n)k(1kn)a i a_iaia k a_kak的倍数,输出Yes,否则输出No。

【输入样例】

2 3 1 2 4 5 1 2 3 4 5

【输出样例】

Yes No

【算法标签】

《洛谷 B4004 寻找倍数》 #数学# #枚举# #数组# #GESP# #2024#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;inta[N];intmain(){intt;cin>>t;while(t--){//t组测试数据intn;cin>>n;//每组n个数intx=0;//x存该组数中的最大值for(inti=1;i<=n;i++){//输入数据,找最大值cin>>a[i];x=max(x,a[i]);}intfl=0;//标志变量for(inti=1;i<=n;i++){//遍历数组元素if(x%a[i])// 如果x不是a[i]的倍数fl=1;//改变标志变量的值}if(fl)cout<<"No"<<endl;elsecout<<"Yes"<<endl;}return0;}

【运行结果】

2 3 1 2 4 Yes 5 1 2 3 4 5 No
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:21:12

IndexTTS-2-LLM应用实战:电话机器人语音系统

IndexTTS-2-LLM应用实战&#xff1a;电话机器人语音系统 1. 引言 随着人工智能技术的不断演进&#xff0c;语音合成&#xff08;Text-to-Speech, TTS&#xff09;在智能客服、虚拟助手、有声内容生成等场景中扮演着越来越重要的角色。传统的TTS系统虽然能够实现基本的文本转语…

作者头像 李华
网站建设 2026/4/23 11:21:26

GRBL坐标系管理机制:多轴定位系统深度剖析

GRBL坐标系管理机制&#xff1a;多轴定位系统深度剖析在数控加工的世界里&#xff0c;“走刀准不准”往往不取决于电机有多猛&#xff0c;而在于——坐标系有没有对。你写了一段G代码&#xff0c;G0 X10 Y10&#xff0c;按下回车&#xff0c;主轴真的会精准地移动到你想要的位置…

作者头像 李华
网站建设 2026/4/23 11:21:47

基于大数据的健康风险评估系统的设计与实现开题报告

基于大数据的健康风险评估系统的设计与实现开题报告 一、选题背景与意义 &#xff08;一&#xff09;选题背景 随着我国经济社会的快速发展和居民生活水平的显著提升&#xff0c;人们对健康管理的需求从传统的疾病治疗向预防为主、防治结合的模式转变。同时&#xff0c;医疗…

作者头像 李华
网站建设 2026/4/18 23:26:40

基于大数据的健康风险评估系统的设计与实现任务书

基于大数据的健康风险评估系统的设计与实现任务书 一、任务名称 基于大数据的健康风险评估系统的设计与实现 二、任务目的 本任务旨在通过运用大数据处理技术与机器学习算法&#xff0c;设计并实现一套功能完善、精准高效的健康风险评估系统。解决传统健康风险评估维度单一、实…

作者头像 李华
网站建设 2026/4/23 13:03:36

AI智能文档扫描仪代码实例:Python调用Canny边缘检测核心逻辑

AI智能文档扫描仪代码实例&#xff1a;Python调用Canny边缘检测核心逻辑 1. 引言 1.1 业务场景描述 在日常办公中&#xff0c;用户经常需要将纸质文档、发票或白板内容通过手机拍照转化为清晰的电子扫描件。然而&#xff0c;手持拍摄往往存在角度倾斜、光照不均、背景干扰等…

作者头像 李华
网站建设 2026/4/23 13:04:05

开源模型商用指南:DeepSeek-R1-Distill-Qwen-1.5B Apache 2.0协议解读

开源模型商用指南&#xff1a;DeepSeek-R1-Distill-Qwen-1.5B Apache 2.0协议解读 1. 模型背景与核心价值 近年来&#xff0c;随着大模型推理能力的持续提升&#xff0c;如何在资源受限设备上实现高效、低成本部署成为AI工程落地的关键挑战。在此背景下&#xff0c;DeepSeek-…

作者头像 李华