一、单选题(每题2 分,共30 分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
答案 | C | A | A | C | D | C | B | A | A | D | C | B | D | B | D |
第1 题 2025年4月19日在北京举行了一场颇为瞩目的人形机器人半程马拉松赛。比赛期间,跑动着的机器人会利用身上安装的多个传感器所反馈的数据来调整姿态、保持平衡等,那么这类传感器类 似于计算机的( )。
A.处理器
B.存储器
C.输入设备
D.输出设备
答案:C
考点:计算机硬件设备的功能
解析:计算机的输入设备用于向计算机输入数据和信息,机器人身上的传感器能够将外界的信息(如姿态、平衡相关数据等)反馈给机器人的控制系统,类似于计算机的输入设备。
而处理器用于数据运算处理,存储器用于存储数据,输出设备用于输出计算机处理结果,均不符合传感器的功能特点。
第2 题 小杨购置的计算机使用一年后觉得内存不够用了,想购置一个容量更大的内存条,这时需要的内存条是( )。
A.RAM
B.ROM
C.CACHE
D.EPROM
答案:A
考点:计算机存储器类型及功能
解析:RAM(随机存取存储器)是计算机的主内存,用于临时存储数据,可读写且速度快,是增加计算机 内存容量的部件。
ROM(只读存储器)存储固定数据。CACHE(高速缓冲存储器)用于提高数据访问速度。
EPROM(可擦除可编程只读存储器)主要用于存储固定程序等,均不适合用于扩展内存容量。
第3 题 执行下面Python代码后,输出的结果是?( )
A.True False
B.False False
C.True True
D.False True
答案:A
考点:Python中集合和元组的比较规则
解析:集合是无序的,s1和 s2包含相同元素,故s1==s2为True;
元组是有序的,t1和 t2 元素顺序不同,故t1==t2为 False。
第4 题 执行下面Python代码后,输出的结果是?( )
A.15
B.3
C. 3.0
D.报错
答案:C
考点:Python中可变参数及数值运算
解析:func(*args)接收任意数量参数,计算平均值。
func(1,2,3,4,5)中sum(args)=15,len(args)=5,15 / 5 = 3.0,故输出 3.0。
第5 题 以下哪个函数调用是合法的?( )

A. func(1,2,3,4)
B. func(a=1,2,c=3)
C. func(1,2,3,d=4)
D.func(1,2,c=3)
答案:D
考点:Python函数参数传递规则
解析:Python函数参数传递中,*是一个重要的分隔符,它后面的参数必须用关键字形式传递(即参数名=值的形式)
func(a, b, *, c, d=0) 中:
前面的a、b:可以用位置参数传递(直接写值,不用带参数名)。
后面的c、d:必须用关键字参数传递(必须写成c=值、d=值)。
其中d有默认值,调用时可以不写(会自动使用默认值0);
但c没有默认值,调用时必须显式写出c=值。
故可以排除选项A C
在选项B中,出现语法问题,所有的关键字参数(参数名=值的形式)都必须放在位置参数(直接写值,没有参数名)的后面。
第6 题 执行下面Python代码后,输出的结果是?( )
A.10
B.11
C.报错
D.None
答案:C
考点:Python变量作用域
解析:在func 函数中,x += 1会被Python解释器认为是在函数内部创建局部变量x,但此时x还未被初始化就进行了+=操作,会引发UnboundLocalError,导致程序报错。
第7 题 执行下面Python代码后,输出的结果是?( )

A. 2 -8
B. -2 8
C. -8 2
D.报错
答案:B
考点:Lambda函数
解析:func = lambda x: x * 2 if x > 0 else x // 2 定义了一个Lambda 函数。
当x = -4 时,x > 0 不成立,执行 x // 2,即 -4 // 2 = -2;
当x = 4 时,x > 0 成立,执行 x * 2,即 4 * 2 = 8。所以输出 -2 8。
第8 题 执行下面Python代码后,输出的结果是?( )
A.16
B.8
C.4
D.报错
答案:A
考点:Python函数作为参数传递
解析:apply函数接收一个函数 func和一个参数 x,并返回func(x) 的结果。
square函数用于计算一个数的平方。apply(square, 4) 就是调用 square(4),即4 * 4 = 16。所以输出16。
第9 题 执行下面Python代码后,会发生什么?( )

A.打印“A”
B.打印“B”
C.同时打印“A”和“B”
D.报错
答案:A
考点:Python异常处理的顺序
解析:在Python的异常处理中,异常捕获是按照顺序进行的。
Exception是所有异常的基类,当except Exception 出现在except ValueError 之前时,ValueError 会被Exception 捕获,而except ValueError 永远不会被执行。程序会打印 “A”。
第10 题 执行下面Python代码后,输出的结果是?( )
A.A C
B.B C
C.C
D.报错
答案:D
考点:Python未捕获异常的处理机制
解析:1 / 0 会引发ZeroDivisionError,而代码中仅用except ValueError捕获异常,无法处理ZeroDivisionError。由于该异常未被捕获,程序会终止并抛出ZeroDivisionError 错误,不会执行后续代码,因此程序会报错。
第11 题 以下哪个选项可以正确读取文件“data.txt”的全部内容并返回一个字符串?
A. f.readlines()
B. f.readline()
C. f.read()
D.f.read(100)
答案:C
考点:Python文件读取方法的功能
解析:f.read()方法会读取文件的全部内容并返回一个字符串;f.readlines() 返回的是包含文件各行内容的列表。f.readline()读取文件的一行内容。
f.read(100)读取最多100个字符。
第12 题 以下哪种文件打开模式可以在不截断文件的情况下同时支持读写?( )
A.“w”
B.“r+”
C.“a”
D.“x”
答案:B
考点:Python文件打开模式的功能
解析:“r+”模式以读写模式打开文件,不会截断文件,支持读写操作;“w”模式打开文件会截断文件(清空内容)并只支持写入;“a”模式以追加模式打开文件,只支持在文件末尾写入;“x”模式用于创建新文件,存在则报错。
第13 题 以下哪种排序算法的时间复杂度在最坏情况下是O(n2)?( )
A.冒泡排序
B.选择排序
C.插入排序
D.以上都是
答案:D
考点:排序算法的时间复杂度
解析:冒泡排序、选择排序、插入排序在最坏情况下(如待排序数据逆序)
都需要进行两层嵌套循环比较和(交换or选择or插入)操作,时间复杂度均为O(n^2) 所以以上三种算法最坏情况时间复杂度都一样,答案为选D。
第14 题 执行以下代码后,输出的结果是?( )

A.['apple','Banana','cherry']
B. ['Banana','apple','cherry']
C.['apple','cherry', 'Banana']
D.['cherry','Banana', 'apple']
答案:B
考点:Python中 sorted函数的排序规则
解析:sorted对字符串列表排序时,按字符Unicode 码点比较。
‘Banana’首字符‘B’(码点66)< ‘apple’首字符 ‘a’(码点97)<‘cherry’首字符‘c’(码点99),故排序结果为[‘Banana’,‘apple’,‘cherry’],选B。
记忆的口诀为:小写字母>大写字母>数字
第15 题 给定一个整数数组nums ,计算其最长递增子序列的长度。子序列可以不连续,但必须保持原数组的顺序。例如: nums =[10,9,2,5,3,7,101,18]的最长递增子序列是[2,3,7,101],长度为4。
A. dp[j]+ 1
B. dp[i]+ 1
C. min(dp[i], dp[j] + 1)
D. max(dp[i],dp[j] + 1)
答案:D
考点:动态规划解决最长递增子序列的状态转移
解析:dp[i]记录以 nums[i]结尾的最长递增子序列长度。
遍历i 之前的元素j,若 nums[ j] < nums[i],说明nums[i] 可接在nums[ j] 子序列后,形成更长序列,长度为dp[ j] + 1。
要保证dp[i] 是最大可能长度,需对比当前dp[i] 和dp[ j] + 1,取较大值,即dp[i] = max(dp[i], dp[ j] + 1) ,选D。
二、判断题(每题2 分,共20 分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | √ | × | × | √ | × | √ | √ | × | × | √ |
第1 题 现在,人们参加各种闭卷考试时通常都不允许将智能手机、平板电脑等带入考场,因为智能手表通常都有嵌入操作系统及通信等功能,所以也不允许携带入考场。( )
答案:正确
考点:计算机操作系统
解析:考试为保证公平、防止作弊,不允许带具有操作系统、通信等功能的智能设备(手机、平 板、智能手表等 ),因它们可能用于作弊,所以题干逻辑合理,判断为正确。
第2 题 执行下面Python代码后,输出的结果为3。
答案:错误
考点:列表extend 方法
解析:data[‘ids’]初始是 [1, 2],extend([ ‘g’, ‘e’, ‘s’, ‘p’ ]) 会向列表添加4 个元素,列表变为[1, 2, ‘g’, ‘e’, ‘s’, ‘p’] 。
len(data[‘ids’])计算长度为 6,不是 3,故题目说法错误 。
第3 题 执行下面Python代码会报错,因为lambda函数不能有默认参数。

答案:错误
考点:lambda函数
解析:Python的 lambda函数是支持设置默认参数的。
代码中f = lambda x, y=2: x + y 定义了带默认参数y=2 的 lambda函数。
调用f(1) 时,x赋值为 1,y取默认值 2,计算 1 + 2 = 3 ,不会报错,所以题目说法错误。
第4 题 执行下面Python代码后,输出的结果为[1,4,9] 。

答案:正确
考点:Python中 map函数、lambda函数的使用
解析:lambda x: x2 定义了一个匿名函数,用于计算参数的平方。
map函数会将该匿名函数应用于列表[1, 2, 3] 中的每个元素,即分别计算1×1,2×2,3×3,得到结果1、4、9,再通过 list函数转换为列表 [1, 4, 9] ,所以题目说法正确。
第5 题 执行下面Python代码后,将只输出try。

答案:错误
考点:异常处理中finally 块的执行机制
解析:在Python异常处理结构里,finally块无论try块中是否有return语句,都会执行。
此代码中,try块里return“try”,但finally块的print(“finally执行了”)仍会执行,之后才会返回try并由print(test())输出。实际执行会先输出finally执行了,再输出try,并非只输出try,所以题目说法错误。
第6 题 在Python中,readlines()方法返回的文件内容包含每行末尾的换行符(\n)
答案:正确
考点:Python文件操作
解析:readlines()方法会按行读取文件内容,将每一行(包括该行末尾的换行符 )作为列表的一个元素返回。
例如文件内容为两行 “abc” 和 “def” ,readlines()返回 [‘abc’, ‘def’] ,所以该说法正确。
第7 题 递推算法的核心思想是利用已知条件逐步推导后续结果。
答案:正确
考点:递推算法的基本概念理解
解析:递推算法就是依据已知的初始条件或基础数据,通过特定的递推关系(如数学公式、逻辑规则等),一步步推导得出后续的结果,典型的如斐波那契数列用递推算法,由前两项推导后续项,所以该说法正确。
第8 题 选择排序是一种稳定的排序算法。
答案:错误
考点:选择排序的稳定性概念
解析:选择排序在排序过程中,会进行元素交换操作,可能导致相同值元素的相对位置改变。所以选择排序是不稳定的排序算法,该说法错误。
第9 题 以下代码的时间复杂度是O(n)。

答案:错误
考点:时间复杂度的分析
解析:代码中有两层嵌套的for 循环,外层循环执行n次,每次外层循环,内层循环也执行n次,总的执行次数是n×n = n²,所以时间复杂度是O(n²),并非 O(n),题目说法错误。
第10 题 以下代码的空间复杂度是O(1)。

答案:正确
考点:空间复杂度的分析
解析:空间复杂度关注算法运行过程中额外占用的存储空间。此代码中,仅定义了固定的变量total ,用于存储累加结果,其占用空间不随输入数组arr 的规模(元素数量)变化而变化,始终是常数级别的空间占用,所以空间复杂度为O(1) ,题目说法正确。
三、编程题(每题25分,共50分)
编程题1
试题名称:画布裁剪时间限制:3.0s
内存限制:512.0MB
题目描述
小A在高为h宽为w的矩形画布上绘制了一幅画。由于画布边缘留白太多,小A想适当地裁剪画布,只保留画的主体。具体来说,画布可以视为h行w列的字符矩阵,其中的字符均为ASCII码位于33∼126之间的可见字符,小A只保留画布中由第x1行到第x2行、第y1列到第y2列构成的子矩阵。
小A将画布交给了你,你能帮他完成画布的裁剪吗?
输入格式
第一行,两个正整数h,w,分别表示画布的行数与列数。第二行,四个正整数x1,x2,y1,y2,表示保留的行列边界。
接下来h行,每行一个长度为w的字符串,表示画布内容。
输出格式
输出共x2−x1+1行,每行一个长度为y2−y1+1的字符串,表示裁剪后的画布。
样例
输入样例1

输出样例1

输入样例2
输出样例2

数据范围
对于所有测试点,保证1≤h,w≤100,1≤x1≤x2≤ h,1≤y1≤y2≤w。
题目解析:核心功能
输入一个字符矩阵,按指定行列范围裁剪并输出子矩阵
1.读入基础数据
n, m = map(int, input().split())#读入画布的行数n和列数m。
x1,x2,y1,y2 = map(int, input().split())#读入要裁剪的行范围[x1,x2]和列范围[y1,y2]
2.存储画布内容
s = [input().strip() for _ in range(n)]#用列表存储画布的每一行(共n 行),每行去掉首尾空白(strip()可处理换行符等)。
3.裁剪并输出
for i in range(x1 - 1, x2)#循环遍历需要输出的行。因为题目输入行范围是1开始,Python列表是0开始,所以用x1-1转换为代码里的索引,到x2-1(range是左闭右开,所以写x2)。
print(s[i][y1-1:y2])#对当前行s[i]做列裁剪。同样把题目里1开始的y1转成代码索引y1-1,按左闭右开取到y2-1(所以切片写y2),直接输出裁剪后的子串。
参考程序
编程题2
试题名称:排序时间限制:3.0 s
内存限制:512.0 MB
题目描述
体育课上有n名同学排成一队,从前往后数第i位同学的身高为hi,体重为wi。目前排成的队伍看起来参差不齐,老师希望同学们能按照身高从高到低的顺序排队,如果身高相同则按照体重从重到轻排序。在调整队伍时,每次只能交换相邻两位同学的位置。老师想知道,最少需要多少次交换操作,才能将队伍调整成目标顺序。
输入格式
第一行,一个正整数n,表示队伍人数。
接下来n行,每行两个正整数hi和wi,分别表示第i位同学的身高和体重。
输出格式
输出一行,一个整数,表示最少需要的交换次数。
样例
输入样例1
输出样例1
输入样例2
输出样例2
数据范围
对于所有测试点,保证1≤n ≤3000,0 ≤hi, wi≤109。
解析:
1.输入处理:读入人数n,再读入n组(h, w)存入列表a。
2.冒泡排序:
用flag标记是否发生交换(初始为True,启动排序)。外层while flag循环:只要发生过交换,就继续排序。
内层while i < n-1 循环:遍历数组,检查相邻元素a[i]和a[i+1]。3.交换条件与计数:
比较规则:if a[i] < a[i+1]
交换操作:a[i], a[i+1] = a[i+1], a[i],同时ans += 1统计交换次数。
若发生交换,flag=True,继续下一轮排序;否则flag=False,结束循环。
参考程序
策划:GESP技术委员会副主席 刘晓庆
技术支持:王岐