
点击上方蓝字·关注我们




CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为青少年计算机和编程学习者提供学业能力验证的平台。GESP覆盖中小学全学段,符合条件的青少年均可参加认证。GESP旨在提升青少年计算机和编程教育水平,推广和普及青少年计算机和编程教育。
GESP考察语言为图形化编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。
本次为大家带来的是2024年12月图形化编程四级认证真题解析。
一、单选题(共10题,每题2分,共30分)
|
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
答案 |
C |
C |
A |
B |
C |
D |
B |
D |
A |
D |
C |
B |
A |
D |
D |
1、2024年10月8日,诺贝尔物理学奖“意外地”颁给了两位计算机科学家约翰·霍普菲尔德(John J. Hopfield)和杰弗里·辛顿(Geoffrey E. Hinton)。这两位科学家的主要研究方向是?( )
A、天体物理
B、流体力学
C、人工智能
D、量子理论
答案解析:这道题考察的是诺贝尔奖得主的研究领域知识。本题要求识别2024年诺贝尔物理学奖的得主的研究方向。根据常识和新闻背景,约翰·霍普菲尔德(John J. Hopfield)和杰弗里·辛顿(Geoffrey E. Hinton)是计算机科学家,以人工智能领域的研究著称,故选C。
2、下列流程图的输出结果是?( )

A、10
B、8
C、4
D、3
答案解析:这道题考察的是流程图理解和逻辑分析能力。整体来看,一共有两层循环。程序开始后,先设置两个变量的初始值,然后判断i是否小于等于6,如果否,则输出ans,是则进入外层循环,每次i增加1,故i的取值范围就是1-6,外层循环次数是6次。每次循环,都来判断j是否小于等于4,否则进入下一次外层循环,是则进入内层循环,要计算i/j向下取整等于2的值,找到一个ans的值增加1,所以我们只要找到符合条件的值有几个,就能找到答案。
第一次循环:i=1,j=1,i/j向下取整=1,后面每次j加1,已经不可能满足条件;第二次循环:i=2,j=1,i/j向下取整=2,ans=1,后面每次j加1,已经不可能满足条件;第三次循环:i=3,j=1,i/j向下取整=3,i=3,j=2,i/j向下取整=1,后面每次j加1,不满足条件;第四次循环:i=4,j=1,i/j向下取整=4,i=4,j=2,i/j向下取整=2,ans=2,后面每次j加1,不满足条件;第五次循环:i=5,j=2,i/j向下取整=2,ans=3;第六次循环:i=6,j=3,i/j向下取整=2,ans=4。故,最后答案选C。
3、默认小猫角色,执行下列程序,小猫说出的内容是?( )


A、5
B、4
C、3
D、2
答案解析:这道题考察的是编程逻辑和变量输出结果判断。说出的是cnt的值,那我们找一下代码中有一个cnt增加1积木块,初始值为0,所以要找的是条件被满足了几次。首先看外层循环,重复3次,每次将m设为数据的某一项,从第1项到最后一项,其实是在遍历列表。再看内层循环,第一次内层循环:153除以10的余数=3,满足条件,cnt+1,m设为15;第二次内层循环:15除以10的余数为5,不满足条件,m更新为1;第三次也不满足条件,跳出循环。以此类推,325、32、3中,除以10的余数=3的只有3,故cnt变为2;333、33、3中,三个都可以除以10的余数=3,故cnt加3,变为5,正确答案就是A。
4、默认小猫角色,如果小猫说出的内容不是1,下面程序中“如果…那么…”的判断条件是?( )


A、
B、
C、
D、
答案解析:题目要求如果小猫说出的内容不是1,那“如果…那么…”的判断条件是什么。不是1代表条件不是刚好满足了一次,这类题我们可以使用代入法,把条件挨个代入进去,进行计算即可得出答案。a和b分别代表语文成绩和数学成绩。代入A选项,同时满足<90的,只有一项,所以排除A;代入B选项,同时满足>90的有两项,故选择B。C、D选项也可以用同样的方法代入验证一下,发现也都只有一项满足条件,故正确答案为B。
5、默认小猫角色,执行下列程序,小猫说出的内容是?( )

A、3
B、5
C、8
D、13
答案解析:这道题小猫要说出的是ans,所以我们要找一下ans最后的值,初始值为1,然后进入广播消息1,接收到广播的内容执行完后,还发出了同样的广播,这样自己广播自己其实构成了一个循环结构,停止的条件就是看什么时候停止这个脚本。观察可知,当n<3时,停止这个脚本。n初始值为6,每次减1,故n的范围是6-3,循环4次。
再来看循环的内容,第一次循环:ans=a+b=1+1=2;第二次循环:a=1,b=2,ans=a+b=1+2=3;第三次循环:a=2,b=3,ans=a+b=2+3=5;第四次循环:a=3,b=5,ans=a+b=3+5=8;故小猫说出的就是8,正确答案选C。
6、有关下列程序说法错误的是?( )

A、定义函数func时的参数c,d为形参,调用函数func时的参数a,b为实参
B、运行程序后a的值为30
C、运行程序后b的值为200
D、运行程序后小猫说1020,2秒
答案解析:这道题考察了带参函数的用法和变量的赋值。
A选项:定义函数func时的参数c,d为形参,调用函数func时的参数a,b为实参,这个说法是正确的。
B选项:运行程序后a的值为30,首先a=10,a设为c+d=10+20=30,故B的说法也正确。
C选项:运行程序后b的值为200。首先b=20,b设为c*d=10*20=200,故C的说法也正确。
D选项:运行程序后小猫说1020,2秒。说的内容是连接c和d的值,c和d为形参,在自制积木外使用时,为0,故说出的是00,D选项表述错误。故正确答案是D。
7、默认小猫角色,执行下列程序,小猫说出的价格是?( )

A、12
B、17
C、18
D、20
答案解析:这道题要找的是最后小猫说出的价格变量的值。调用计算邮资自定义函数后,我们发现,价格的初始值为8,满足不同的条件,价格会增加不同的值。故可以代入重量和加急的值,来比较哪个条件被满足了。weight=1200>1000,故a=200,价格增加0,又判断200除以500的余数等于0不成立,则满足条件,价格增加4,变为12。继续向下看,因flag=y,故价格增加5,变为17,正确答案为B。
8、默认小猫角色,执行下列程序,绘制出螺旋形状,如下图所示,红框处填写的数值是?( )


A、-90 120
B、-90 130
C、90 130
D、90 120
答案解析:这道题考察的是图形的绘制。首先看要填的空是自制积木的两个参数,找找它们分别代表什么。a代表每次循环左转的度数,根据图片可以看出,每次旋转90度,那到底是填90还是-90,就跟旋转的方向有关了。观察程序,初始方向为90,也就是向右,而画出的第一条线是向上,故应该是左转了90度,那第一个空就应该填90,排除A、B。b代表的是循环结束的条件,循环的内容是在不断地旋转和画线,所以数一数,一共有12条边,证明循环了12次。能满足循环12次的条件就是d>120,d的值分别为10,20,30,...,120.一共12次,故这道题应该选择D。
9、默认小猫角色,执行下列程序,小猫说出的内容是?( )

A、GESP-LOVELOVEF
B、GESP-LOVECF
C、GESP-LOVELOVECCF
D、GESP-CLOVEF
答案解析:这道题要找的是输出result的值,在自定义函数中,循环遍历a的字符,如果字符是C,则在result的后面拼接b,b的值为LOVE,否则,则在result后面拼接该字符。故GESP-CCF在遍历循环后,得到的应该是GESP-LOVELOVEF,故正确答案为A。
10、默认小猫角色,执行下列“func”程序,以下说法错误的是?( )

A、列表的项目数为8
B、列表中包含2个荷花
C、列表中包含2个兰花
D、列表中包含1个玫瑰
答案解析:这道题考察的是关于列表的操作。我们分别看四个选项。A选项:列表的项目数为8,重复了两次增加删除的操作,每次最后共增加了个4个元素,故项目数为8。BCD都是看列表中包含了哪些元素。我们来看程序,第一次循环后,植物列表中的元素分别为:百合、兰花、雏菊、荷花。第二次循环后,植物列表的元素分别为:百合、兰花、雏菊、荷花、百合、兰花、雏菊、荷花。故B、C表述正确,D表述错误,这道题应该选择D。
11、默认小猫角色,执行下列程序,舞台上最多会看到多少只小猫?( )

A、3
B、4
C、8
D、6
答案解析:这是一道关于克隆的题目,要寻找的是舞台上最多出现几只猫。我们看程序,首先本体是显示状态,调用func函数后,重复3次克隆自己,当克隆体启动时,移到随机位置。也就是目前最多可以看到4只小猫,紧接着等待0.5秒后,广播消息1,接收到消息再次克隆自己,克隆体也会再次被克隆,故要克隆4只,加上原来的4只,一共8只小猫。故这道题应该选择C选项。
12、默认小猫角色,执行下列程序,以下说法错误的是?( )

A、小猫沿着y轴的方向来回运动
B、小猫沿着x轴的方向来回运动
C、变量flag先是1之后是-1,1和-1交替赋值
D、小猫先向下运动碰到边缘后向上运动
答案解析:这是一道综合知识考察的题目。在找错误的表述之前,我们来看看这几段程序是干什么的。首先,设置初始状态,调用func函数,找到n除以2的余数为0的数,也就是偶数,flag设为1;奇数则设为-1。在接收到消息1之后,y坐标增加flag*10,也就是+10或-10,若碰到舞台边缘,则再次调用func。故这道题主要是让小猫沿着y轴的方向来回移动,通过以上分析发现,A、C、D选项表述正确,B选项表述错误,正确答案就是B。
13、列表“list”保存了5个不同的数据元素,由小到大2次插入排序后得到的列表为?( )

A、
B、
C、
D、
答案解析:这道题要考察的是插入排序的算法原理。原列表为:90、82、76、45、12,初始时,假设第一个元素(90)是已排序的,其余元素(82、76、45、12)是未排序的。由小到大1次插入排序后得到的列表为:82、90、76、45、12,由小到大2次插入排序后得到的列表为:76、82、90、45、12,故正确答案为A。
14、用枚举算法求解“找出所有满足各位数之和等于9的三位数”时,在下列所列举的数值范围内,算法执行效率最高的是?( )
A、从100到999
B、从100到900
C、从108到999
D、从108到900
答案解析:在使用枚举算法求解“各位数之和等于9的三位数”时,我们需要考虑算法执行效率,这通常与需要检查的数值范围大小直接相关。范围越小,算法执行得越快。分析如下:
A选项(100到999):包含了所有三位数,算法需要检查900个数字,但检查了大量不可能满足条件的数字。
B选项(100到900):同样包含了大量不可能满足条件的数字。
C选项(108到999):从108开始减少了不必要的检查,但仍然包括了901到999这些不可能满足条件的数字。
D选项(108到900):既减少了不必要的检查(因为从108开始且到900结束),又确保了包含所有可能的三位数解(在这个范围内)。
综上所述,D选项(从108到900)在给出的选项中是最合理的,因为它在减少检查和确保包含所有可能解之间找到了最佳平衡。因此,算法执行效率最高的是D选项。
15、默认小猫角色,执行下列程序,依次输入5和3,小猫说出的内容是?( )

A、14
B、16
C、18
D、20
答案解析:依次输入5和3,代表n1=5,n2=3;重复3次,判断n1是否大于n2, 5>3,满足条件,则result增加n1的值,变为0+5=5,n1=6,n2=6;进入第二次循环:6>6不满足,则result增加n2的值,变为5+6=11,n1=7,n2=9;进入第三次循环:7>9不满足,则result增加n2的值,变为11+9=20;故正确答案为D。
二、判断题(共10题,每题2分,共20分)
|
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
答案 |
× |
× |
× |
× |
√ |
√ |
× |
√ |
√ |
√ |
1、只能为角色创建自制积木,不能为背景创建自制积木。( )
答案解析:在图形化编程中,可以为角色和背景都创建自制积木,故该题表述错误。
2、默认小猫角色,执行下列程序,小猫说出的内容为50。( )

答案解析:首先我们看到小猫说出的内容是result的值,而result的初始值为0,调用func函数,传参为5,故n的值为5。函数中,我们可以找到跟result的值相关的积木块,再分析循环内容。该函数中是一个双重条件循环,根据外层条件i>5,故i的取值范围是1-5,外层循环5次。内容循环条件为j>5,我们来逐次分析:
第1次:j=i=1,内循环5次,每次将result增加j,j增加1,故result=0+1+2+3+4+5=15;第2次:j=i=2,内循环4次,每次将result增加j,j增加1,故result=15+2+3+4+5=29;第3次:j=i=3,内循环3次,每次将result增加j,j增加1,故result=29+3+4+5=41;第4次:j=i=4,内循环2次,每次将result增加j,j增加1,故result=41+4+5=50;第5次:j=i=5,内循环1次,每次将result增加j,故result=50+5=55;故该题目表述错误。
3、默认小猫角色,例表“数据”如下如所示,运行下列程序,红框处填入

可使得小猫最后说出YES。( )


答案解析:这道题要判断红框出填入题目中的代码,是否可以说出YES,那我们可以先在代码中找一下,说YES在如果那么里面,也就是满足条件,就可以说YES。外层是一个有限循环,遍历列表,题目中的条件是要找“数据”列表中除以3和除以5的余数均为0的数。通过寻找,可以发现,并没有满足条件的数字,故小猫不会说出YES,这道题目表述错误。
4、默认小猫角色,执行下列程序后,输入字符串CCFGESP,小猫最后说出的结果可能为CCG。( )

答案解析:根据题目要求可知,s的值为CCFGESP,说出的内容为result的值。在func函数中,重复了3次更新c和result的值,我们依次来看。第1次循环:c设为s的第n个字符,计算可得n的取值范围是:1、3、5;result设为连接result和c,也就是在C、F、E中随机选一个拼接。第2次循环:做了同样的事情,第3次循环也可以以此类推,故每次都是在第1、3、5个字符中随机选择,并拼接在后面。题目中给出的CCG,G是第4个字符,不在范围内,故这道题表述错误。
5、默认小猫角色,执行下列程序,输入字符串LOVEGESP,小猫说出的值为7。( )

答案解析:这道题是根据输入来判断输出是否正确。我们先看下完整的代码是什么作用。初始化设置后,重复执行,遍历了s的每个字符,过程中每次调用func函数,判断result包含c不成立,则更新result的值,在后面拼接c。也就是说,要找不重复的字符,放入result中,在输入“LOVEGESP”中,不重复的字符有7个,故最后说的result的字符数为7,表述正确。
6、默认小猫角色,执行下列程序,能够绘制出如下所示图形。( )


答案解析:这道题目考察的是图形绘制相关的知识。从上到下阅读代码和右边的图形比较,来得出结论。首先,面向右落笔,调用绘制图形函数,传入参数4,进入条件循环,条件为i>4,i初始为0,每次加1,故i的取值有0、1、2、3、4,一共5次循环。
第1次循环:0除以2的余数=0,故第1条线为红色;0<2满足条件,则移动25步,左转90度向上;
第2次循环:1除以2的余数=0不成立,故第2条线为蓝色;1<2满足条件,则向上移动25步,左转90度向左;
第3次循环:2除以2的余数=0,故第3条线为红色;2<2不满足条件,则向左移动50步,右转90度向上;
第4次循环:3除以2的余数=0不成立,故第4条线为蓝色;3<2不满足条件,则向上移动50步,右转90度向右;
第5次循环:4除以2的余数=0,故第5条线为红色;4<2不满足条件,则向右移动50步,右转90度向下。
对比右边的图形,发现绘制的内容完全一样,故这道题表述正确。
7、默认小猫角色,输入字符c,执行下列程序,小猫最后说出0。( )

答案解析:这段程序的作用是判断字符串s里有几个输入的字符,比如输入为c,因图形化中不区分大小写,故可以找一下有没有c或C,通过观察,s中有两个C,小猫说出的应该是2,故该题目表述错误。
8、默认小猫角色,函数“计算”的作用是求列表中包含元素的平均值,执行下列程序,小猫最后说55。( )

答案解析:这道题首先,我们要找到存入列表“数据”中的数字是什么?重复5次,将值依次加入到数据中。分别为:45、50、55、60、65。列表中包含元素的平均值即为55,故该题表述正确。
9、排序算法的稳定性指的是排序后相同元素的相对顺序保持不变。( )
答案解析:稳定性是指,在排序过程中,如果两个元素相等,它们在排序后的相对位置应该与排序前相同。例如,在[3, 1, 2, 2, 4]中,两个2的相对位置在排序后(如[1, 2, 2, 3, 4])应保持不变。题目中的说法正确描述了稳定性的概念。
10、查找从100到999范围的完全平方数(如144=12×12,144为完全平方数,即这个数可以写成某个数的平方的形式)有多少个。可以使用枚举的方法解决这个问题。( )
答案解析:完全平方数是一个数可以表示为另一个整数的平方。在100到999的范围内,我们可以找到所有满足条件的整数n,使得n2在这个范围内。例如,102=100,112=121,...,312=961。通过枚举从10到31的整数并计算它们的平方,我们可以找到这个范围内的所有完全平方数。因此,题目中的说法正确,枚举方法可以有效地解决这个问题。
三、编程题(每题25分,共50分)
|
题号 |
1 |
2 |
|
答案 |
小杨学排序


【题目描述】
有N个互不相同的整数组成一个数列,为了方便查询小杨想知道这些数从大到小排序后,原数列中的每个数据在排序后数列中的位置编号是什么。
比如:原数列为[3, 7, 1, 6, 8],排序后的数列为[8, 7, 6, 3, 1],原数列在排序后的数列中的位置编号为[4,2,5,3,1]。
默认小猫角色和白色背景。请你帮小杨把最后得到的编号用#连接起来。
【输入描述】
新建列表“数据”,用于存储待排数据。数据个数为N,1≤N≤50,数据互不相同。
如下图所示:

【输出描述】
新建变量“result”,用于存储排序后,原数列中的每个数据在排序后数列中的位置,中间用#连接。
如下图所示:

【输入样例】
数据= [3, 7, 1, 6, 8]
【输出样例】
result= 4#2#5#3#1
【输入样例】
数据= [35, 13, 23]
【输出样例】
result = 1#3#2
注意事项:
1.变量名的拼写(包括大小写)要和题目完全一致。
2.输出结果存放在对应变量中即可,无需使用“说…”或“说…,2秒”积木块
3.列表直接用“+”功能赋值进行测试即可,无需写代码赋值。

【答案解析】
这道题目要求我们将一个包含互不相同的整数的数列进行排序(从大到小),然后找出原数列中每个元素在排序后数列中的位置编号,并将这些位置编号用# 连接起来。
解题思路如下:
1.输入数列:数据
2.对数列进行从大到小排序
3.根据排好序的数列 一一找出对应的编号,并用#连接起来。
需要注意如下积木快的用法,可以快速帮我们找到对应的编号。

【参考程序】



2、数字替换


【题目描述】
小杨有一个包含了N个数字的序列存储在列表“数据”中,他想将其中大于k的数字替换为序列的最大值,将其中小于k的数字替换为序列的最小值,他想知道替换后的序列是什么。
例如:数据= [-2, -1, 0, 1, 2],k = 0,这个序列的最大值为2,最小值为-2,替换后的序列为[-2, -2, 0, 2, 2]。
默认小猫角色和白色背景,请你帮他把得到序列中的元素用#连接起来。
【输入描述】
新建列表“数据”,用于存储初始的序列,序列中的元素在-100到100之间。
新建变量“k”,用于存储比较的元素,-100 < k < 100。
如下图所示:

【输出描述】
新建变量“result”,用于记录替换后的序列,并用井号#将结果连接起来。
如下图所示:

【输入样例】
数据= [-2, -1, 0, 1, 2],k = 0
【输出样例】
result = -2#-2#0#2#2
【输入样例】
数据= [-8, 16, 18, 0],k = 14
【输出样例】
result = -8#18#18#-8
注意事项:
1.变量名的拼写(包括大小写)要和题目完全一致。
2.输出结果存放在对应变量中即可,无需使用“说…”或“说…,2秒”积木块
3.列表直接用“+”功能赋值进行测试即可,无需写代码赋值。

【答案解析】
解题思路如下:
1.设置k的值;
2.先找出列表中的最大最小值;
注意:序列中的元素在-100到100之间;
3.遍历列表,每一项跟k值比较,比k大则设为最大值,比k小则设为最小值;和k一样大则设为k。
4.输出内容,更新result的值,中间用井号隔开。
【参考程序】




技术支持:王岐
策划:GESP技术委员会副主席 刘晓庆





1. GESP微信:关注“CCF GESP”公众号,点击“GESP小助手”即可交流。
2. GESP邮箱:gesp@ccf.org.cn
注:请在邮件中详细描述咨询的问题并留下考生的联系方式及姓名、身份证号,以便及时有效处理。
3. GESP电话:0512-67656856
咨询时间:周一至周五(法定节假日除外)上午 8:30-12:00;下午 13:00-17:30

扫码关注GESP公众号,了解更多资讯


点击此处 “阅读原文” 查看更多内容


