
点击上方蓝字·关注我们




CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为青少年计算机和编程学习者提供学业能力验证的平台。GESP覆盖中小学全学段,符合条件的青少年均可参加认证。GESP旨在提升青少年计算机和编程教育水平,推广和普及青少年计算机和编程教育。
GESP考察语言为图形化编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。
本次为大家带来的是2024年9月份图形化编程四级认证真题解析。
一、单选题(共15题,每题2分,共30分)
|
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
答案 |
A |
C |
B |
D |
C |
A |
A |
B |
D |
C |
C |
D |
B |
D |
B |
1、据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控制部分所使用的磁心存储元件由磁心颗粒组成,设计存贮周期为2μs(微秒)。那么该磁心存储元件相当于现代计算机的?( )
A、内存
B、磁盘
C、CPU
D、显示器
解析:磁心存储元件用于存储数据,与现代计算机的内存功能相似,都用于快速存取数据。因此,答案为A。
2、下列流程图的输出结果是?( )

A、5
B、10
C、15
D、20
解析:这道题考试对流程图的理解。这个流程图描述了一个双重循环算法,开始后,初始值为cnt = 0,i = 0,首先检查i的值是否小于5,如果不满足条件,则输出cnt,程序结束。如果满足条件,把j设为5,进入内层循环,不断检测j是否大于i,如果条件满足,cnt增加1,j减少1,再次检测进入循环检测。不满足条件,则i增加1,继续外层循环,检测i是否小于5。总结一下,可以发现这个程序要找的是i为0到4时,找出j>i的次数,累加可得出cnt的值,5+4+3+2+1=15,答案为C。
3、默认小猫角色,执行下列程序,小猫说出的内容是?( )

A、5
B、6
C、7
D、8
解析:这道题考察的是循环嵌套和条件判断的嵌套结合使用。首先我们可以找到外层循环的次数为5和i的范围是1到5,内层循环需要满足的条件是j<=i,内层循环中的条件可以提炼为i*j除以2的余数为1,其实就是寻找,i*j的结果为奇数的数,找到一个,将cnt增加1。每次循环中,j增加2。故,外层循环的次数与进入内层循环的j的值分别是:第1次:i=1,j=1;第2次:i=2,j=1;第3次:i=3,j=1、3;第4次:i=4,j=1、3;第5次:i=5,j=1、3、5;i和j相乘的值为1、2、3、9、4、12、5、15、25,其中,满足是奇数的是,1、3、9、5、15、25,故cnt的值为6。
4、输入一个正整数求该正整数的相邻因数对,例如正整数为12,相邻的因数对为(1,2),(2,3),(3,4)。默认小猫角色,下面计算正整数因数对的程序中“如果…那么…”的判断条件是?( )

A、
B、
C、
D、
解析:这道题考察的是用程序求解一个正整数的相邻因数对,空白处要填写的是判断条件,因为要满足的条件是:这个正整数除以相邻两个数的余数均为0,所以对应到选项中,满足该条件的为D选项。
5、默认小猫角色,执行下列程序,小猫绘制的图形是?( )

A、
B、
C、
D、
解析:这道题考察的是绘制图形相关的知识点。在画图题中,我们首先可以找到落笔和抬笔中间的代码,就是绘制的内容。在代码中,先设置了层数为0时,停止这个脚本,而层数初始值为3,每次循环减少1,所以画的内容会循环3次。而绘制的内容为每次移动80步,先左转90度,再移动80步,右转90度,每次循环边长都会变成原来的一半,我们再找到初始方向为向右,故应该选择C选项。
6、下列有关自制积木说法正确的是?( )
A、自制积木是没有返回值的,需要通过在自制积木外建立变量的方式获取
B、在自制积木外可以跟普通变量一样使用形参
C、在自制积木建立好后,可以被多个角色进行调用
D、在创建的自制积木中,不能使用克隆积木块
解析:这道题考察的是自制积木相关的知识。A选项中,自制积木是没有返回值的,需要通过在自制积木外建立变量的方式获取,这个表述是正确的。B选项中,形参在自制积木外不可以使用,B选项错误;C选项中,自制积木建立好后,只能被一个角色重复调用,也错误。D选项中,在创建的自制积木中,可以使用克隆积木块。故也不正确。
7、默认小猫角色,执行下列程序,小猫说出的值是?( )

A、12
B、14
C、16
D、18
解析:这道题考察的是变量的变化和循环以及条件判断等比较综合的应用。调用func自制积木后,传入参数,将变量a、b分别赋值为1、2;c赋值为1,因为它是由两个比较式的结果相加的来,比较满足则为True,在用于数字计算时,则用1表示,不满足则为False,用于计算则用0表示。故c=0+1=1。接下来是条件循环,循环停止的条件是c<7的结果取反(不成立),也就是c的范围是1-6。进入循环中,第1次:先将c增加2,变为3,判断b>3是否成立,b为2肯定不成立,故执行否则的内容,将a增加b,也就是a=1+2=3,最后将b增加1变为3;以此类推,第2次循环,c=5,b=3,a=6;第3次循环,b=4,a=12,因为在最后一次循环中,b>3是成立的,故a会再增加a的值,故这道题应该选A。
8、默认小猫角色,执行下列程序,绘制出圆心为舞台中心的同心圆,如下图所示,红框处填写的数值是?( )


A、5 -10 10
B、5 0 0
C、360 0 0
D、5 10 -10
解析:这道题考察的是绘制图形相关的知识。首先先分析这三个参数分别代表什么含义,n代表的是外层循环的次数,每次循环绘制的内容是什么呢?看下循环中,是重复了360次,绘制一个点,再旋转1度,这样会画出来了一个圆,也就是说,这些圆形是由360个点组成的,由于点很密,看起来就是一个圆形。也就是说,n是几,就代表画出来几个圆。我们数一数,一共画出来5个圆,故第一空应该填入的是5,排除C选项。再来看看,后面两个参数,x,y代表的是画笔的位置,先移动到一个位置,再向右移动r步,开始画圆。r代表的是圆的半径大小,因为题目要求是要绘制出圆心为舞台中心的同心圆,故一开始应该移动到圆心的位置,也就是(0,0),所以找到正确答案为B选项。
9、默认小猫角色,执行下列程序,小猫说出的内容是?( )

A、GSSRT
B、GERA
C、PSCTC
D、EPCAC
解析:这道题考察的内容比较综合。首先将字符串的内容传入s中,进入循环中,循环停止的条件是:i>s的字符数-1,s的字符数为11,也就是i>10。那么i的范围就是1-10,每次循环s的相邻两个字符进行比较,如果前面的字符小于后面的字符,则将前一个字符加入到list列表当中。循环10次,便将s中的每个字符都比较完了,所以我们只要依次找出满足条件的字符即可。在GESPSCRACH中,满足条件的有:EPCAC,选择D选项。其实这类题目不需要全部计算出来,只要算出来第一个满足条件的字母,就可以使用排除法了。比如第一个为E,看一下选项,就可以直接选出D选项了。
10、默认小猫角色,执行下列“func”程序,列表list3为?( )


A、
B、
C、
D、
解析:这道题考察的是列表相关知识。func函数内是一个循环结构,i从1开始,循环停止的条件是i>list1的项目数,故i的范围是1-10,每次将i增加1,则循环会执行10次。循环内是在遍历list1,有一个选择结构,如果满足条件list1的第i项除以3的余数等于1,则将list1的第i项加入list3中,否则将list2的第i项加入list3中。列表中的数字是1-10范围内的,那我们可以直接找到满足条件的数字是:1、4、7、10,那只要碰到这些数字,就把list1的元素加入,否则把list2的元素加入,观察可得,正确答案就是C选项。
11、默认小猫角色,执行下列程序,舞台上最多会看到多少只小猫?( )

A、5
B、4
C、3
D、2
解析:这道题考察的是克隆和图章的相关知识。这类题目,要注意特别本体和克隆的显示和隐藏情况,以及本体的显示或隐藏状态是不会影响的到图章的。明确这两点后,我们来看程序。本体为显示状态,循环克隆了5次自己,并且注意,每次是先移动再克隆,y坐标从初始的-100开始,每次增加50,克隆体的y坐标依次为:-50、0、50、100、150,再看当作为克隆体启动时 ,克隆体都隐藏起来了,但下方有一个条件判断,若其y坐标>50,则将x坐标增加50,图章克隆体。这样的话,只有最后两个克隆体的图章和本体显示出来了,因为在图章前已经改变了x坐标,所以最后一个克隆体也不会和本体重叠,故可以看到三只小猫,正确答案为C。
12、默认小猫角色,执行下列程序,输入10,小猫最后说出的结果是?( )

A、35
B、40
C、25
D、30
解析:这道题首先需要看一下整体的算法逻辑,进行各个变量值的初始化后,广播计算,满足条件i<11时,进入内部条件判断,并且再次广播计算,也就是i的范围就是1-10,内部判断的条件是i除以2的余数等于0,要找的就是1-10之内的偶数,满足条件后把total的值累加i,也就是要找到1-10以内偶数的和,偶数有:2、4、6、8、10,相加为30,故正确答案为D。
13、对5个不同的数据元素进行直接插入排序,最多需要进行比较次数是?( )
A、8
B、10
C、12
D、14
解析:这道题考察的是直接插入排序思想的理解。直接插入排序的基本思想是:每次将一个待排序的数据元素插入到前面已经排好序的子序列中,直到全部数据元素排完。
对于5个数据元素:
第一个元素默认有序,无需比较。
插入第二个元素时,需要与第一个元素比较1次。
插入第三个元素时,最坏情况下(即第三个元素是最小的)需要与前两个元素分别比较,共2次。
插入第四个元素时,最坏情况下需要与前三个元素分别比较,共3次。
插入第五个元素时,最坏情况下需要与前四个元素分别比较,共4次。
因此,最多比较的总次数是:
1
+ 2 + 3 + 4 = 10次
所以,正确答案是B选项。
14、计算长方形面积的算法描述如下,该算法描述的方法属于?( )
① 输入长方形的长(a)与宽(b)
② 计算长方形的面积S(计算公式为S=a×b)
③ 输出结果
④ 结束
A、流程图
B、伪代码
C、机器语言
D、自然语言
解析:这道题的正确答案是D选项。因为它没有使用编程语言的具体语法或符号,也没有图形表示(如流程图),而使用了人类日常的自然语言。现在来看选项:
A(流程图):这是通过图形符号来表示算法步骤的图表,与给出的描述不符。
B(伪代码):虽然伪代码使用类似于编程语言的语句结构,但它通常包含更具体的语法元素。给出的描述没有这些元素,因此不完全符合伪代码的定义。
C(机器语言):这是计算机直接理解和执行的二进制代码,与给出的描述不同。
D(自然语言):这是人类日常使用的语言,如中文。给出的描述正是用这样的语言来概述算法步骤的。
因此,根据这些选项和描述的性质,最符合的答案是D(自然语言)。
15、依据某个分隔符来拆分字符串是一种获取输入的手段。默认小猫角色,下列哪个程序能够把字符串“海淀,朝阳,房山,门头沟,东城,西城,石景山,丰台”按照逗号拆分成八个区域“海淀”,“朝阳”,“房山”,“门头沟”,“东城”,“西城”,“石景山”,“丰台”并存入列表list当中?( )
A、
B、
C、
D、
解析:这道题考察的是分割字符串和列表的知识。需要把字符串“海淀,朝阳,房山,门头沟,东城,西城,石景山,丰台”拆分到列表中,再观察选项,正确答案是B。B选项中,遍历了字符串s,每次将j设为i,i从1开始,内层循环不断拼接字符存入result中,直到遇到逗号,或者超出s的字符数,跳出内层循环,将result加入到列表中。循环后可实现题目的效果,故正确选项为B。
二、判断题(共10题,每题2分,共20分)
|
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
答案 |
× |
√ |
√ |
× |
× |
× |
× |
√ |
√ |
√ |
1、如果图形化的程序出现错误,可以使用单步调试的方式进行错误排查?( )
解析:这道题目表述不正确,因为在图形化中,程序出现错误,不能用单步调试的方式进行错误排查,图形化不具备这种功能。
2、默认小猫角色,执行下列程序,输入10,小猫说出的内容为30。( )

解析:这道题目表述正确。若输入为10,代表n为10,重复执行的次数是11次,n的取值范围是10-0。因为每次循环,是先减少1,再进行条件判断,所以在判断时n的范围变成了9到-1,条件为n除以3的余数为0或者1,若满足条件,则将total的值增加n。所以我们可以发现,这道题寻找的就是-1到9的范围内,除以3的余数等于0或1的数字,将他们累加求和。满足条件的数字有:0、1、3、4、6、7、9,它们累加的和为30,故题目描述正确。
3、默认小猫角色,执行下列程序,输入GESPSCRATCH, 运行下列程序,红框处填入

可使得小猫最后说出的结果为ACEGSPSRTCH。( )

解析:这道题描述正确。将条件填入红框处,来看一下是否可以说出ACEGSPSRTCH。程序中,i在循环中代表字符串的第几个字符,输入一共有11个字符,而条件是找i除以2的余数为1或i除以3的余数为1的数字,若满足则将该字母添加在result的末尾,若不满足,则将该字母添加在result的前面。首先找到,在1-11中,满足条件的数字是1、3、4、5、7、9、10、11。输入为:GESPSCRATCH,则按照如上要求,每次循环后,result的值分别为:G、EG、EGS、EGSP、EGSPS、CEGSPS、CEGSPSR、ACEGSPSR、ACEGSPSRT、ACEGSPSRTC、ACEGSPSRTCH。与题目中的表述一致。
4、默认小猫角色,执行下列程序后,小猫最后说出的结果可能为CCGFCFE。( )

解析:这道题的表述错误。通过观察程序,可以发现,在循环中,result的值会不断被更新,每次要在后面拼接,第1到i之间的字符,i是从1开始,逐渐递增,说明跟随的字符只会是当前字符之前的字符。如果结果为CCGFCFE,则G只能在CCF三个字符中随机选一个,故不可能是G,则代表表述错误。
5、默认小猫角色,执行下列程序,小猫说出的值为16。( )

解析:这道题的表述是错误的。分析程序可以知道,n的值为5,所以条件循环中重复执行的次数是5次,i的值范围是1-5,每次循环,要判断的是i除以2的余数是否为0,也就是是否为偶数,是则拼接result和i,不是则计算result+i的值,然后i增加1。那么循环过程是这样的:第1次循环,1为奇数,则result=1+1=2;第2次循环,2为偶数,则result=22;第3次循环,3为奇数,则result=22+3=25;第4次循环,4为偶数,则result=254;第5次循环,5为奇数,则result=254+5=259,故小猫说出的值是259。
6、默认小猫角色,执行下列程序,能够绘制出如下所示图形。( )


解析:这道题的表述是错误的。在绘制图形的代码中,初始面向方向为0度,则表示向上,i的初始值为1,循环8次,每次i的值会进行取反。第一次循环:移动20步,左转1*90度,画出的图形是向上20步,再左转90度,然后向左移动20步,右转90度。只看第一次循环,和右边显示的效果就不一致,右边是向上20步后向右转90度,所以就可以说明表述是错误的。
7、默认小猫角色,输入字符c,执行下列程序,小猫最后说出-1。( )

解析:这道题的表述是错误的。观察程序,虽然程序的最后有说“-1” 2秒的积木,但程序中还有停止这个脚本积木块,所以很有可能程序并未执行到最后就被停止了,故需要看看前面的停止这个脚本是否会被执行,这也是这道题具有迷惑性的地方。在程序中,可以看到i的初始值为s的字符数,也就是10,根据条件,循环的次数为10次,i每次减小1,故i的范围是10-1。循环中检测s的某一个字符和回答一样时,则执行那么中的内容。回答为c,s中有C,因为在图形化中是不区分大小写的,所以过程中会停止这个脚本,i的范围没有-1,故不可能说出的是-1,表述错误。
8、默认小猫角色,执行下列程序,列表“list”为下图所示。( )


解析:该题目表述正确。我们可以根据程序来看看列表list的变化。首先第一段程序,在list中加入5个元素为:5、10、15、20、25。接着,调用func,传入参数j为2,k为list第5项的值,也就是25。下一步,将list的第5项替换为list的第2项,此时list中变为:5、10、15、20、10;最后将list的第2项替换为k,也就是原来的第5项,替换后为:5、25、15、20、10。刚好了list中的内容一致。
9、冒泡排序和直接插入排序都是稳定的排序。( )
解析:该题目表述正确。冒泡排序(Bubble Sort)和直接插入排序(Insertion Sort)都是稳定的排序算法。稳定性是指,在排序过程中,如果有两个元素的相等,排序算法不会改变这两个元素的相对顺序。
冒泡排序:冒泡排序通过比较和交换相邻元素来排序。当两个元素相等时,它们不会被交换,因此相对顺序保持不变。所以,冒泡排序是稳定的。
直接插入排序:直接插入排序通过将元素插入到已排序部分来排序。
当新元素与已排序部分的某个元素相等时,它会被插入到该元素的后面(或保持原相对位置)。因此,直接插入排序也是稳定的。
10、一个正整数n是立方数,当且仅当存在一个正整数a满足a×a×a=n,例如8=2×2×2,8为立方数。执行下面程序可以求出输入的正整数n是否为立方数?( )

解析:下面程序可以求出正整数n是否为立方数。观察程序,在循环中,判断条件为i*i*i=n时,才说是立方数,停止全部脚本,若没有找到,则向下执行,说不是立方数,故实现了该功能。
三、编程题(每题25分,共50分)
|
题号 |
1 |
2 |
|
答案 |
小杨学排序


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

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

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

解析:这道题目主要考察的是排序算法的相关知识,要获取排好序的列表中每个元素在原始列表中的位置。首先,我们先要初始化数据,包含要用到的变量、列表;下一步,要编写排序的程序,比如可以选择冒泡排序,或选择自己熟悉的排序算法即可;最后,还需将排好序的列表按照要求打印出来。
【参考程序】



2、回文拼接


【题目描述】
一个字符串是回文串,当且仅当该字符串从前往后读和从后往前读是一样的,例如,aabaa和ccddcc都是回文串,但abcd不是。
小杨有一堆仅包含小写字母的字符串存储在列表“数据”中,他想判断每个字符串是否由两个长度至少为2的回文串前后拼接而成,若字符串是由两个长度至少为2的回文串前后拼接而成记为Yes,否则记为No。
默认小猫角色和白色背景。请你编写程序记录判断的结果并用井号#将结果连接起来。
【输入描述】
新建列表“数据”,用于存储等待判断的字符串。
如下图所示:

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

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

解析:这道题主要考察的是回文字符串的理解和实现。首先,还是初始化数据,把需要的变量和列表均设置好。接下来是功能实现的思路:1、遍历字符串列表。
2、对每个字符串,尝试所有可能的分割点。
3、检查分割后的两部分是否都是长度至少为2的回文串。
4、记录结果并用井号连接。
【参考程序】




技术支持:王岐
策划: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公众号,了解更多资讯


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


