
点击上方蓝字关注我们吧

CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为青少年计算机和编程学习者提供学业能力验证的平台。GESP覆盖中小学全学段,符合条件的青少年均可参加认证。GESP旨在提升青少年计算机和编程教育水平,推广和普及青少年计算机和编程教育。
GESP考察语言为图形化编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。
本次为大家带来的是2024年3月认证Python五级真题解析。
GESP2024年3月认证Python五级
一、单选题(每题2分,共30分)
|
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
答案 |
B |
C |
B |
D |
D |
A |
D |
C |
D |
A |
B |
A |
B |
B |
C |
1、下⾯流程图在yr输⼊2024时 ,可以判定yr代表闰年 ,并输出 2月是29天 ,则图中菱形框中应该填⼊( )。

A. (yr % 400 == 0) or (yr % 4 == 0)
B. ( yr % 400 == 0) or (yr % 4 == 0 and yr %100 != 0)
C. ( yr % 400 == 0) and ( yr % 4 == 0)
D. (yr % 400 == 0) and (yr % 4 == 0 and yr % 100 != 0)
【答案】B
【考纲知识点】条件判断与逻辑运算
【解析】闰年的定义:1.能被4整除且不能被100整除;2.能被400整除;上面两个条件满足一个可以判断是闰年,两个条件用或连接,故选B。
2、在TCP协议中 ,完成连接建⽴需要通过( )握⼿。
A.一次
B.二次
C.三次
D.四次
【答案】C
【考纲知识点】TCP协议连接过程
【解析】三次握手作用分别是:客户端向服务器请求连接、服务器通知客户端收到请求并准备好建立连接、客户端跟服务器确认已经建立连接。
3、下⾯有关排序算法的说法 ,正确的是 ( )
A.快速排序是稳定排序
B. Python中list类型的sort()是稳定排序
C.冒泡排序是不稳定排序
D.归并排序是不稳定排序
【答案】B
【考纲知识点】排序的稳定性
【解析】常见排序算法中,具有稳定性的有:冒泡排序、插入排序、归并排序;不具有稳定性的有:快速排序、希尔排序、选择排序等;python中列表对象的sort()方法排序是稳定的。
4、不同的排序算法 ,其空间复杂度也不同 。与冒泡法排序空间复杂度相同的是 ( )
A.归并排序
B.快速排序
C.计数排序
D.插入排序
【答案】D
【考纲知识点】排序的空间复杂度
【解析】归并排序空间复杂度O(nlogn);快速排序空间复杂度O(nlogn);计数排序空间复杂度O(n+k);插入排序空间复杂度O(1),冒泡排序空间复杂度也为O(1),故此题选D。
5、下⾯Python代码中 ,aFactorial()和bFactorial()⽤于求正整数的阶乘 。有关说法 ,错误的是( )

A. aFactorial( )⽤循环⽅式 ,bFactorial()递归⽅式
B. bFactorial( )更加符合数学定义 ,直观易于理解 ,⽽aFactorial()需要将数学定义转换为计算机程序实现
C.当N值较⼤时 ,aFactorial( )执⾏效率更⾼ ,⽽bFactorial()因为有多次函数调⽤ ,效率将降低 ,且N如果较⼤, 将可能导致不能使⽤
D. bFactorial( )因为代码量较少 ,没有循环, 因此其执⾏效率更⾼
【答案】D
【考纲知识点】递归算法
【解析】递归算法实现手段为函数的自我调用,特点为代码相对简洁但效率相对低,故本题选D。递归函数因多次调用函数开销更大。
6、有关下⾯Python代码的说法 ,正确的是( )

A.代码中qSort()函数不是稳定排序
B.代码中qSort()函数空间复杂度为O(1)
C.代码中qSort()函数是就地排序
D.代码中qSort()函数是外排序, 因为排序后的结果保存在新的内存空间即外空间
【答案】A
【考纲知识点】快速排序算法
【解析】本题代码中体现的是快速排序算法,算法时间复杂度为O(n log n),空间复杂度为O(n log n),不具有稳定性,且属于内排序,故本题选A。
7、上题不能⽀持其他常见类型的排序 ,如实现该⽀持 ,横线处分别应填写代码是( )

A. is instance(iterData, list) == False , lst == [x for x in iterData]
B. type(iterData) == list ,lst = [x for x in iterData]
C. is instance(iterData, list) ,lst = list(iterData)
D. type(iterData) != list ,lst = list(iterData)
【答案】D
【考纲知识点】数据类型处理
【解析】当qSort()函数中,给出的iterData是其他可遍历但不改变类型时,需要对此参数进行数据处理,转换为list类型后再排序;故条件判断参数类型是否是list,再用list()内置函数进行类型转换。
8、上上题qSort()函数不⽀持排序规则函数 ,形如sorted()函数的key参数 ,为实现类似⽬标 ,横线处分别应填⼊ 代码是( )

A. fx == None ,fx(x) >= fx(Pivot) ,fx(x) < fx(Pivot)
B. fx == None ,fx(x) >= Pivot ,fx(x) < Pivot
C. fx != None ,fx(x) >= fx(Pivot) ,fx(x) < fx(Pivot)
D. fx != None ,fx(x) >= Pivot ,fx(x) < Pivot
【答案】C
【考纲知识点】lambda函数
【解析】根据代码中第18行设置的lambda函数含义,是指定按照列表中元素个位数进行升序排列,所以条件为当排序规则不为None时,调用匿名函数fx()去按照个位数比较大小对原有数值排列,故选C。
9、下⾯的Python代码中merge()函数的两个参数均为list类型 ,且是已按相同规则排序的数据 。下⾯有关说法中, 正确的是( )

A.第3-7⾏代码将导致死循环, 因为没有循环变量及其改变
B.第5⾏和第7⾏代码执⾏后 ,result的成员值为None
C.第9⾏和第11⾏是否被执⾏ ,与arr1和arr2的成员值有关 ,如果值转换为False,将不会被执⾏
D. merge()函数的代码没有错误 ,执⾏后参数arr1和arr2将合并成新的list保存到result之中 ,且有序
【答案】D
【考纲知识点】列表的操作
【解析】当arr1与arr2皆非空时,重复将两个列表中的值比较大小后,按从小到大的顺序加入result列表中并从原列表中弹出;当其中一个列表清空后,将剩余一个列表中的剩余有序数据,拼接到result中;此段代码实现了将两个列表元素加入新列表并排序,D选项正确。
10、阅读下⾯Python代码 ,横线处应填⼊( )

A. isOdd ,isEven
B. isOdd ,isEven(10)
C. isOdd(10) ,isEven
D. isOdd(10) ,isEven(10)
【答案】A
【考纲知识点】自定义函数、lambda函数
【解析】自定义函数Check()设有N, Fx两个参数,N表示需要检测的值,Fx为函数名,Check(N, Fx)函数功能为,返回Fx以N为参数的调用结果;isOdd()、isEven是以两种形式定义的,判断数值N是否是奇数或偶数的两个函数,所以在第8行程序中,只需要以函数名作为参数写入Check()中即可,正确答案为A。
11、下⾯Python代码的平均时间复杂度是( )

A. O(N)
B. O(logN)
C. O(NlogN)
D. O(N²)
【答案】B
【考纲知识点】算法时间复杂度
【解析】该算法递归的规模逐步减小,类似于二分算法的时间复杂情况,时间复杂度为O(logN)。
12、有关下⾯Python代码的说法 ,正确的是( )

A.代码采⽤⼆分法查找 ,仅对有序list有效 ,不适⽤于set、dict等
B.在函数内定义函数 ,存在多次调⽤多次定义, 因此存在错误
C.第16⾏代码__bSearch()最后⼀个参数val应为queryVal
D.第16⾏代码应为return __bSearch
【答案】A
【考纲知识点】二分查找算法、分治算法
【解析】根据代码,参数类型需要是list,涉及到拼接、修改等操作,set和dict不满足,A正确;函数内可以定义函数,函数名并没有冲突,B错误;16行代码需要返回的是函数bSearch()要查找的参数val,跟内部_bSearch()函数的参数queryVal无关,C错误;返回_bSearch()值时,需要按定义时给出设置的参数,D错误。
13、在上题的算法中 ,其时间复杂度是( )
A. O(N)
B. O(logN)
C. O(NlogN)
D. O(N²)
【答案】B
【考纲知识点】二分查找算法、分治算法
【解析】二分查找每次将搜索区域减半,直到找到目标值或确定目标值不存在。因此,二分查找的时间复杂度是O(log n)。
14、下⾯的Python代码中 ,idList变量为list类型 ,保存有⼤量⾝份编码 ,倒数第⼆位如为偶数 ,则为⼥性 ,奇数为男性 ,从第7位开始连续8位为出⽣年⽉⽇ ,年为4位数⽉和⽇均为两位数 。编码统计每天有⼏位男⽣⽣⽇⼥⽣⽣⽇ 。横线处应填⼊代码是( )。

A. (1, 0) if gender == 1 else (1, 0) , (0, 1)
B. (0, 1) if gender == 1 else (1, 0) , (0, 0)
C. 0, 1 if gender == 1 else 1, 0 , 0, 0
D. (0, 1) if gender == 1 else (1, 0) , 0, 0
【答案】B
【考纲知识点】
【解析】根据gender的值的不同,分别赋值male和female,排除C。对于A,不管gender值的多少,其值都一样,错误。当Key不存在时,第5行的返回值为(0,0)即男生和女生的数量均为0。该值不能是0,0而是封装为(0,0)。
15、有关下⾯Python代码的说法错误的是( )。

A.代码中第17⾏执⾏后 ,firstNode(第⼀个节点)的下⼀个节点指向第3个节点, 即secondNode(第2个节点)的下⼀ 个
B.代码中第18⾏执⾏后 ,第3个节点的Previous(前向)指向第1个节点(firstNode)
C.仅仅通过firstNode节点 ,不能访问第2个节点 ,第2个节点已不在内存中存在, ⾃动释放所占内存
D.在第18⾏后 ,执⾏del secondNode后 ,第2个节点所占内存才会被释放 。仅仅执⾏先有第16- 18⾏ ,第2个节点 内存不会被释放
【答案】C
【考纲知识点】双向链表
【解析】firstNode为建立的双向链表,三个Node结点能实现双向链接;secondNode是另一个新生成的结点对象,其Next属性来源值secondNode.Next为默认值空。FirstNode第一个结点指向第二个结点,故A错误;第2个结点的Previous才指向第2个空结点,故B错误;当secondNode.Next指向firstNode.Next时,firstNode.Next变为空被释放,故C正确,D错误。
二、判断题(每题2分,共20分)
|
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
答案 |
× |
× |
√ |
√ |
√ |
× |
× |
√ |
√ |
× |
1、⼀个算法设计合理的话是可以没有输出的 ,⽐如冒泡排序就不输出任何信息( )。
【答案】错误
【考纲知识点】算法的特征
【解析】一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的
2、流程图描述算法的能⼒是有限的 ,⽐如它⽆法对能够提前终⽌的循环给出等价描述 ( ) 。
【答案】错误
【考纲知识点】流程图
【解析】可以使用菱形图设置条件,用来表示循环终止。
3、归并排序的空间复杂度是
。(
)。
【答案】正确
【考纲知识点】算法的时间复杂度
【解析】无
4、在Python中 ,当对dict类型进⾏in运算查找元素是否存在时 ,其时间复杂度为 O(1),set类型也如此 。 ( )。
【答案】正确
【考纲知识点】字典与集合
【解析】字典与集合访问元素采取的是哈希表查找方法,时间复杂度为O(1)。
5、在以下Python代码中 ,执⾏后输出是 5=>4=>3=>2=>1=>2=>3=>2=>1=>5 。( )。

【答案】正确
【考纲知识点】递归的执行过程
【解析】详见图片。

6、贪⼼算法虽然可能不是局部最优 ,但可达到全局最优 。 ( )。
【答案】错误
【考纲知识点】贪心算法特点
【解析】贪心算法总是选择当前情况下的最优选择,而不是从整体最优考虑。
7、Python内置函数sorted()可对⽀持for-in循环的数据类型排序 。
【答案】错误
【考纲知识点】内置函数sorted()
【解析】Python内置函数sorted()可以对支持for-in循环的数据类型进行排序,但不一定所有支持for-in循环的数据类型都可以使用sorted()函数进行排序。例如,字典(dict)支持for-in循环,但sorted()函数无法对字典进行排序 。一般说来,sorted()可以对for-in循环的数据类型排序,除非该类型内部没有实现小于运算符。答案错误的原因就是如此。但sorted()可以对dict排序。
8、冒泡排序是就地排序 ,空间复杂度为 O(1)
【答案】正确
【考纲知识点】冒泡排序空间复杂度
【解析】无
9、下⾯的Python代码能实现N的质因数分解 ,类似埃⽒筛法 。 ( )

【答案】正确
【考纲知识点】埃氏筛法
【解析】埃氏筛法思路为从最小质数开始,筛除范围内每个质数的倍数,实现排除非质数数据;此题代码为从最小质数开始,筛取数字的因数,得到原数字的质因数,算法思想类似。
Python代码print(sorted(list(range(10,20)), key = hex))执⾏后将输出[10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 。 ( )
【答案】错误
【考纲知识点】sorted()函数的key参数
【解析】代码作用为,将10到19间的整数进行排序,设置key=hex排序规则按照十六进制方式排序,其中10到15作为十六进制时以字符a,b,c,d,e,f表示,排序后字典码数值大于16~19的数值,故结果为[16, 17, 18, 19, 10, 11, 12, 13, 14, 15]
三、编程题(每题25分,共50分)
|
题号 |
1 |
2 |
|
答案 |
1、成绩排序
问题描述
有N名同学,每名同学有语文、数学、英语三科成绩。你需要按如下规则对所有同学的成绩从高到低排序:
1.比较总分,高者靠前;
2.如果总分相同,则较语文和数学两科总分,高者靠前;
3.如果仍相同,则比较语文和数学两科的最高分,高者靠前;
4.如果仍相同,则二人并列。
你需要输出每位同学的排名,如遇多人并列,则他们排名相同,并留空后面的-1个名次。例如,有3名同学并列第1,则后1名同学自动成为第4名。
输入描述
第一行1个整数N,表示同学的人数。
接下来N行,每行三个非负整数ci,mi,ei分别表示该名同学的语文、数学、英语成绩。
保证0≤Ci,mi,ei≤150。
输出描述
输出N行,按输同学的顺序,输出他们的排名。
注意:请不要按排名输出同学的序号,而是按同学的顺序输出他们各自的排名
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输、输出中附带任何提示信息。
样例输入1

样例输出1

数据规模
对于30%的测试点,保证N≤100,且所有的同学的总分各不相同
对于100%的测试点,保证2≤N≤10000
【题目大意】根据给出的数据,按照总分、两科总分、两科最高分的规则,对数据进行排序,输出排序后原来每位同学的排名。
【考纲知识点】基础数据类型处理操作、sort()排序函数的使用
【解题思路】1.输入数据,将总分、语文数学总分、语文数学最高分和当前序号存入列表;2.根据列表中存放的数据使用sort()函数对列表排序;3.遍历列表并重新记录排序后的序号
【参考程序】

2、B-smooth数
题面描述
小杨同学想寻找一种名为B-smooth数的正整数。
如果一个正整数的最大质因子不超B,则该正整数为B-smooth数。
小杨同学想知道,对于给定的n和B,有多少个不超过n的B-smooth数。
输入格式
第一行包含两个正整数n,B,含义如题面所示。
输出格式
输出一个非负整数 ,表示不超过n的B-smooth数的数量。
样例1

样例解释
在不超过10的正整数中,3-smooth数有{1,2,3,4,6,8,9},共7个。
数据范围
|
子任务编号 |
数据点占比 |
n |
B |
|
1 |
30 |
<=1000 |
1<=B<=1000 |
|
2 |
30 |
<=100 |
√2<=B<=100 |
|
3 |
40 |
<=106 |
1<=B<=106 |
对于全部数据,保证有1≤n ≤106,1≤B ≤106。
【题目大意】求给定范围内数字的最大质因数,将符合条件的数字数量输出
【考纲知识点】质数判断、枚举法
【解题思路】1.根据给出范围,用筛法求出范围内的全部质数(防止超时的可能);2.遍历质数列表,在题目限定范围内,筛除质数的倍数,同时记录下来每个质数倍数的最大质因数值;3.统计最大质因数列表中符合条件的质数个数。
【参考程序】

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

