一、单选题(每题2分,共30分)
|
题号
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
|
答案
|
C
|
B
|
C
|
D
|
C
|
A
|
A
|
A
|
D
|
A
|
D
|
D
|
B
|
B
|
D
|
1、小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有几种?(
)
A.
1
B.
2
C.
3
D.
4
【答案】C
【考纲知识点】常识
【解析】图形化、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
【考纲知识点】流程图
【解析】四年一闰,百年不闰,四百年再闰。
闰年判断条件:(yr是400的倍数)
或 (yr是4的倍数并且不是100的倍数)。
3、执行下面Python代码后,输出的结果可能是?(
)

A.
{'Tom': 10, 'Join': 13, 'Gaia': 12}
B.
{'TOM': 10, 'JOIN': 13, 'GAIA': 12}
C.
{('JOIN', 13), ('TOM', 10), ('GAIA', 12)}
D.
{('Join', 13), ('Tom', 10), ('Gaia', 12)}
【答案】C
【考纲知识点】集合
【解析】集合推导式生成大写名字和年龄的元组。
4、函数fun的定义如下,调用该函数的语句错误的是?(
)

A.
fun(1, 2, 3)
B.
fun(1, 2)
C.
fun(y=2, x=1)
D.
fun(1, y=2, 3)
【答案】D
【考纲知识点】函数调用及参数传递
【解析】D选项位置参数在关键字参数后,顺序错误。
5、执行下面Python代码后,输出的结果是?(
)
A.
30
B.
45
C.
100
D.语法错误
【答案】C
【考纲知识点】函数调用及参数传递
【解析】10
+ 20 + 15 + 25 + 30 = 100。
6、执行下面Python代码后,输出的结果是?(
)

A.
40
B.
36
C.
30
D.语法错误
【答案】A
【考纲知识点】函数调用及参数传递
【解析】x=10,y=20,关键字参数的值为6、1、3。计算:10
+ 20 + 6 + 1 + 3 = 40。
7、执行下面python代码后,输出的结果是?(
)

A.
1#3#
B.
1#1#
C.
3#3#
D.
add函数语法错误
【答案】A
【考纲知识点】局部变量
【解析】a()第一次输出1,count变为3;第二次输出3,count变为5。结果是1#3#。
8、执行下面python代码后,输出的结果是?(
)

A.
5#5#
B.
5#1#
C.
1#1#
D.
1#5#
【答案】A
【考纲知识点】全局变量
【解析】sums(5)将全局变量s设置为0并加5,输出5;然后再次输出全局变量s,结果是5#5#。
9、执行下面python代码后,输出的结果是?(
)

A.
[10, 20, 30] [10, 20, 30]
B.
[10, 20, 30, 40] [10, 20, 30, 40]
C.
[10, 20, 30] [10, 20, 30, 40]
D.
[10, 20, 30, 40] None
【答案】D
【考纲知识点】函数
【解析】append方法修改列表a并返回None,所以a变为[10,
20, 30, 40],b为None。
10、在一个农场上,有一头母牛。根据农场的规则,这头母牛每年年初都会生出一头小母牛。每头新生的小母牛从它们出生的第四个年头开始,也会每年年初生出一头新的小母牛。假设没有母牛死亡,并且每头母牛都严格遵循这个规则。下列程序用来计算在第n(n<30)年时,农场上共有多少头母牛,其中横线处填写的代码为?()

A.
lst[i - 1] + lst[i - 3]
B.
lst[i - 2] + lst[i - 3]
C.
lst[i - 1] + lst[i - 2]
D.
lst[-1] + lst[-3]
【答案】A
【考纲知识点】列表
【解析】每年新增的母牛数量等于前一年和三年前母牛的总和,所以填lst[i
- 1] + lst[i - 3]。
11、程序段如下:

其中,n为正整数,则该段程序的最坏时间复杂度是?(
)
A.
O(n)
B.
O(2n)
C.
O(n3)
D.
O(n2)
【答案】D
【考纲知识点】时间复杂度
【解析】嵌套的两层循环每次迭代次数分别为n-1和n-i-1,总体时间复杂度为O(n2)。
12、执行下面Python代码后,输出的结果是?(
)
A.
{'Java', Python'}
B.
{SQL', 'C++'}
C.
{'Java', 'SQL', 'Python', 'C++'}
D.
{'Java'}
【答案】D
【考纲知识点】集合
【解析】所有用户共有的技能只有Java,交集操作结果为{'Java'}。
13、执行下面Python代码后,输出的结果是?(
)

A.
[3, 1, 2, 4, 0]
B.
[0, 4, 2, 1, 3]
C.
[3, 0, 2, 1, 4]
D.
[0, 3, 2, 4, 1]
【答案】B
【考纲知识点】排序
【解析】orted(enumerate(lst),
key=lambda x: x[1])按值排序并返回索引,结果是[0,
4, 2, 1, 3]。
14、执行下面Python代码后,文件ip.txt中的内容用记事本打开时显示为?(
)

A.
202.206.224.21192.168.224.1
B.
202.206.224.21
192.168.224.1
C.
202.206.224.21\n192.168.224.1
D.
202.206.224.21\n192.168.224.1\n
【答案】B
【考纲知识点】文件读写
【解析】每个IP地址后都有一个换行符\n,所以文件内容显示为两行:202.206.224.21和192.168.224.1。
15、执行下面Python代码,输入0和字符串“abc”后,输出的结果是?(
)

A.
0#2#3#
B.
0#3#
C.
1#2#3#
D.
1#3#
【答案】D
【考纲知识点】异常处理
【解析】第二个输入“abc”导致ValueError,触发通用except块打印1,最后finally块打印3,结果为1#3#。
二、判断题 (每题 2 分,共 20 分)
|
题号
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
|
答案
|
√
|
√
|
√
|
×
|
√
|
×
|
×
|
×
|
√
|
√
|
1、GESP测试是对认证者的编程能力进行等级认证,同一级别的能力基本上与编程语言无关。(
)
【答案】
√
【考纲知识点】常识
【解析】GESP同一级别的能力基本上与编程语言无关。
2、在Python中,print(list("GESP"))执行后输出['G',
'E', 'S', 'P']。(
)
【答案】
√
【考纲知识点】列表
【解析】list("GESP")将字符串"GESP"转换为列表,每个字符成为列表中的一个元素,所以输出为['G',
'E', 'S', 'P']。
3、执行下面Python代码后,输出两个True。

【答案】
√
【考纲知识点】字符串
【解析】"h"
in "hello"和"he"
in "hello"都为True,因为"h"和"he"都是字符串"hello"的子串
4、执行下面Python代码后,输出两个True。

【答案】×
【考纲知识点】列表
【解析】lst1
== lst2为True(内容相同),但lst1
is lst2为False(不同对象),所以输出True和False。
5、执行下面Python代码,调用函数fun可以得到一个元组类型的数据。

【答案】
√
【考纲知识点】元组
【解析】fun(8,
5)返回(1,
3),类型为元组,所以type(fun(8,
5))输出<class
'tuple'>。
6、Python程序中,全局变量与局部变量不允许重名。
【答案】×
【考纲知识点】变量的作用域
【解析】Python程序中全局变量与局部变量允许重名,但在函数内部,局部变量会覆盖同名的全局变量。
7、下面这段程序的时间复杂度为平方阶O(n2)。(
)

【答案】×
【考纲知识点】时间复杂度
【解析】代码包含一个简单的for循环,时间复杂度为O(n),而不是O(n^2)。
8、Python在处理程序异常时,异常处理结构能够发现程序段中的语法错误。
【答案】×
【考纲知识点】异常处理
【解析】
Python异常处理结构(try-except)用于捕获运行时错误,不能发现程序中的语法错误。语法错误在代码执行前会被解析器检测到。
9、要打开一个已经存在的图片文件并读取但不修改数据,则打开模式应该设定为rb。
【答案】
√
【考纲知识点】文件读写
【解析】在Python中,要以二进制模式读取文件(如图片文件),应该使用模式rb,表示只读且以二进制方式打开文件。
10、执行下面Python代码后,输出的结果为za。

【答案】
√
【考纲知识点】字符串
【解析】max('az',
'za', key=lambda a: a[0])按第一个字符比较,'z'
> 'a',所以输出结果为za。
三、编程题(每题25分,共50分)
1、黑白方块
题面描述
⼩杨有⼀个n⾏m列的⽹格图
,其中每个格⼦要么是⽩⾊ ,要么是⿊⾊ 。
对于⽹格图中的⼀个⼦矩形
,⼩杨认为它是平衡的当且仅当其中⿊⾊格⼦与⽩⾊格⼦数量相同。
⼩杨想知道最⼤的平衡⼦矩形包含了多少个格⼦。
输入格式
第⼀⾏包含两个正整数n,
m ,含义如题⾯所⽰
。
之后n⾏
,每⾏⼀个长度为 m的01串
,代表⽹格图第 i⾏格⼦的颜⾊
,如果为 ,则对应格⼦为⽩⾊ ,否则为⿊ ⾊ 。
输出格式
输出⼀个整数,代表最⼤的平衡⼦矩形包含格⼦的数量,如果不存在则输出0。
样例1

样例解释
对于样例1,假设(i,
j) 代表第i⾏第j列
,最⼤的平衡⼦矩形的四个顶点分别为 (1
, 2) ,(
1 , 5) ,(4
, 2) ,(4
, 5)。
数据范围
对于全部数据
,保证有 1
≤ n, m ≤ 10。
【考纲知识点】
复合数据类型
【解题思路】
首先解决
“如何判断一个矩阵 a是一个平衡矩阵”这个问题:枚举矩阵中的每一个元素,用两个计数器a[0]、a[1]分别记录0和1的数量,如果最终a[0]==a[1],那么就是平衡矩阵,复杂度是O(n^2)。
然后解决“如何枚举一个矩阵中的所有子矩阵”这个问题:对于任意一个子矩阵,它都有一个起始行、一个终止行、一个起始列和一个终止列,我们可以用4个for循环来分别枚举它们,这样就应该把每个子矩阵确定下来,复杂度是O(n^4)。
如此一来,我们便可以用O(n^4)的复杂度枚举每一个子矩阵,然后再花O(n^2)的复杂度判断是否是平衡矩阵,总体时间复杂度为O(n^6)。
参考程序

2、宝箱
题面描述
⼩杨发现了n个宝箱
,其中第 i个宝箱的价值是ai。
⼩杨可以选择⼀些宝箱放⼊背包并带走
,但是⼩杨的背包⽐较特殊 ,假设⼩杨选择的宝箱中最⼤价值为x,最⼩价值为y,⼩杨需要保证x
- y ≤ k ,否则⼩杨的背包会损坏。
⼩杨想知道背包不损坏的情况下,
⾃⼰能够带⾛宝箱的总价值最⼤是多少。
输入格式
第⼀⾏包含两个正整数n,
k ,含义如题⾯所⽰
。
第⼆⾏包含n个正整数a1, a2 ,
· · · , an,代表宝箱的价值。
输出格式
输出⼀个整数
,代表带走宝箱的最⼤总价值。
样例1

样例解释
在背包不损坏的情况下
,⼩杨可以拿⾛两个价值为 2的宝箱和⼀个价值为3的宝箱。
数据范围
对于全部数据
,保证有 1
≤ n ≤ 1000, 0 ≤ k ≤ 1000, 1 ≤ ai≤ 1000。
【考纲知识点】
排序
【解题思路】
比较容易想到的做法是用O(n)的复杂度枚举一个a[i]作为最大值x,然后用O(n)的复杂度枚举另一个值a[j]作为最小值y,最后用O(n)的复杂度枚举数组,计算一下值处于[x,y]的元素总和sum,算出来的总和与ans取最大值即可,但是这样的做法是O(n^3)的,没有办法拿到满分;
我们发现,之所以我们最后需要O(n)的复杂度枚举数组的元素计算总和,是因为我们不知道数值处在[x,y]范围内的元素总和是多少,所以需要枚举计算。
为了解决这个问题,我们可以先将数组从小到大排序,这样一来,数组中的每个子区间[j,i]的左右端点的值a[j]、a[i]分别就对应了我们枚举的最小值x,和最大值y,又因为数组是有序的,因此,数值处于[x,y]范围内的元素正好就是区间[j,i]内的所有元素,这样一来,我们就可以在向前枚举a[j](也就是最小值y)的同时,顺便计算区间[j,i]内的元素总和sum,时间复杂度降为了O(n^2)。
参考程序

技术支持:GESP技术委员会委员
宋旭彤