内容正文:
3.3简单算法及其程序实现
一、选择题
1.以下哪个问题不适合使用贪心算法求解?( )
A.单源最短路径问题 B.分数背包问题
C.活动选择问题 D.区间调度问题
2.在Python中,已知A=8,则以下代码执行后输出的结果是( )
if A<=5:
print(A-5)
else:
print(A+10)
A.3 B.5 C.10 D.18
3.函数range(6,10)生成的序列中元素的个数是( )
A.3 B.4 C.5 D.6
4.以下哪个问题可以用枚举法来求解( )
A.找出100以内同时被5和7整除的所有数
B.给定直角三角形两条边的长,求第三条边的长
C.求两个数的积
D.给定半径,求圆的面积
5.在信息传递的过程中,通常会将一些敏感信息进行加密,以下是实现加密功能的Python程序段。
mw=input("请输入明文:")
mm="";key=2
for ch in mw:
if"0"<=ch<="9";
mm=str((int(ch)+key)%10)+mm
else:
mm+=chi
print(mm)
若输入的明文为“Hi,2024”,则执行代码后的输出结果为( )
A.,6424iH B.6424Hi C.6424Hi, D.Hi,6424
6.用python程序对数组元素进行分组,程序运行后b[2]的值为( )
a=[6,4,2,8,5,3,9,17];b=[]
for i in range(len(a)):
f=False
for j in range(len(b)):
if a[i]>b[j][-1]:#列表b是一个二维数组
b[j].append(a[i])#append函数在列表末尾添加一个元素
f=True
break #跳出本层循环
if f==False:
b.append([a[i]])#新元素为一维数组
A.[2,3] B.[4,5] C.[6,8,9,17] D.[2,5,9]
7.有如下Python程序段:
a=[4,3,1,2,3]
m=0
s=0
for i in range(1,len(a)):
if a[i] < a[m]:
m=i
s=s+m
print(s)
执行该程序段后,输出的结果是( )
A.10 B.9 C.8 D.7
8.为了保证图书的有效流通,在该图书馆内借书,30天及以内可享受免费,超过规定日期10天及以内,每天需交纳滞还费0.2元,逾期10天以上则每天需交纳滞还费0.5元。下列Python程序段中符合要求的是( )
A.
if day<=30:
pay=0
if day>40:
pay=2+0.5*(day-40)
else:
pay=0.2*(day-30)
B.
if day<=30:
pay=0
elif day<=40:
pay=0.2*(day-30)
else:
pay=2+0. 5*(day-40)
C.
pay=0
if 30<day<=40:
pay=0.2*(day-30)
else:
pay=2+0.5*(day-40)
D.
pay=0
if day>=30:
pay=0.2*(day-30)
elif day>40:
pay=2+0.5*(day-40)
A.A B.B C.C D.D
9.有如下Python程序段,执行该程序段后,一共输出列表a中的多少个元素( )
a=[1,2,3,4,5,6,7]
for i in range(5):
print(a[i])
A.7 B.5 C.2 D.3
10.有如下Python程序:
import random
a=[0]*6
i=0
while i<6:
a[i]=random. randint (1, 10)
if a[i] in a[0: i]:
i-=1
i+=l
for i in range (6):
if i%2==0 and a[i]>a[i+1]:
a[i], a[i + 1]=a[i+1], a[i]
else:
a[i]+=a[i]%2
print(a)
执行此程序后,数组a中不可能的结果为( )
A.[4, 6, 4, 8, 7, 10] B.[3, 11, 6, 8, 1, 4] C.[1, 4, 4, 8, 6, 8] D.[4, 8, 2, 4, 6, 8]
11.有如下程序段:
s=['']*len(a)
head=2;q=head;top=-1
while q!=-1:
top+=1
s[top]=a[q][0]
q=a[q][1]
print(s[top-2])
若a=[['a',3],['b',0],['c',1],['d',-1]],则输出的结果为( )
A.a B.b C.c D.d
12.在Python中,下列程序段执行后,变量s的值是( )
w=2
h=5
if h>8:
s=w*2
else:
s=w+1
A.1 B.2 C.3 D.4
13.有如下 VB 程序段
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” & App.Path & “\词库.accdb”
conn.Open
Set rs.ActiveConnection = conn
rs.Open “SELECT * FROM words”
n = 0
Do While Not rs.EOF
n = n + 1
en(n) = rs.Fields(1)
ch(n) = rs.Fields(2)
rs.MoveNext
Loop
rs.Close
conn.Close
下列说法中正确的是( )
①连接的数据库文件名是“\词库.accdb” ②程序运行后,变量n 的值表示该数据表中记录的总数 ③数组 en(n)所存储的是数据表第 2 个字段的字段值 ④“ConnectionString”是 conn 对象的属性值⑤查询的数据表名称是“words” ⑥省略语句“rs.MoveNext”,程序也可以正常运行
A.①④⑤ B.③④⑥ C.②③⑤ D.②③④
14.在编写python程序时缩进的作用是()。
A.让程序更美观 B.只在for循环中使用
C.只在if语句中使用 D.用来界定代码块
二、填空题
15.在编程语言中, 是指在程序执行过程中,根据条件选择执行不同代码块的语句。
16.已知足球场长度105.16米,宽度68.16米,请使用Python编写一段程序,计算出足球场的面积多少平方米?
下面是部分程序代码,请将程序补充完整并确保程序能正确运行。
a=105.16
b=68.16
print(a,b,s)
17.在Python Shell窗口的提示符“>>>”后输入print("3+5")指令得到的结果是( ),输入print(3+5)指令得到的结果是( )。
18.阅读下列程序,写出运行结果
i = 0
sum = 0
t = 1
while sum < 10:
i = i+ 1
t=t*i
sum = sum + tprint(sum)
运行输出结果是:
三、操作题
19.某监控设备可定时采集红绿信号灯状态数据,数据格式记为[a,b],其中a、b分别为红灯和绿灯的状态值,0表示灯灭,1表示灯亮,如[0,1]表示红灯灭、绿灯亮。
现要编写程序,每隔1秒采集并检测信号灯是否存在如下异常状态:第一类,红绿灯同亮或同灭;第二类,红灯或绿灯超时,即保持同一状态时长大于上限值(如300秒)。检测到异常状态就发送相应信息。请回答下列问题:
(1)若检测到“红绿灯同亮”异常,则采集到的数据是 (单选,填字母)。
A.[0,0] B.[0,1] C.[1,0] D.[1,1]
(2)实现上述功能的部分Python程序如下,请在划线处填入合适的代码。
tlimit = 300 # 设置信号灯保持同一状态时长上限值
pre = [-1,-1]
t = [0,0] # t[0]、t[1]分别记录红灯、绿灯保持同一状态的时长
while True:
# 接收一次采集到的状态数据,存入d,代码略
if① :
if d[0] == 1:
# 发送“红绿灯同亮”信息,代码略
else:
# 发送“红绿灯同灭”信息,代码略
for i in② :
if d[i] == pre[i]:
t[i]+= 1
if③ :
if i == 0:
# 发送“红灯超时”信息,代码略
else:
# 发送“绿灯超时”信息,代码略
else:
t[i] = 1
pre = d
# 延时1秒,代码略
20.若一个整数n(n>11)从左向右和从右向左读其结果相同,且是素数,则称n为回文素数,例如133020331是回文素数。下列Python程序段用于找出1000以内的所有回文素数,请在划线处填入合适的代码。(提示:如果n不能被[2,n**0.5]内的任何一个整数整除,则n是素数)
import math
def hws(num):
n=str(num)
if ① :
return True
return False
def sushu(num):
②
for i inrange(2,int(math.sqrt(num)+1)):
if ③ :
flag=False
return flag
n=11
while n<1000:
if ④ :
print(n)
n=n+2
(1)sushu函数采用的算法是 (单选,填字母:A.解析算法/B.枚举算法)。
(2)请在划线处填入合适的代码。
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.B
【详解】本题考查贪心算法的描述。贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望能够导致全局最优解的算法。它通常用于求解最优化问题,包括最小化问题和最大化问题。分数背包问题不适合使用贪心算法求解。故选B。
2.D
【详解】本题考查的是Python选择语句。A=8,不满足A<=5,执行 print(A+10),输出8+10=18,故选D。
3.B
【详解】本题考查Python函数的应用。range(start, stop,[step]),start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0,5);stop: 计数到 stop 结束,但不包括 stop。例如:range(0,5) 是[0,1,2,3,4]没有5;step:步长,默认为1。range(6,10)生成:6、7、8、9共4个。故选B。
4.A
【详解】本题考查的是枚举法相关知识。枚举算法通过列举问题所有可能的解,并逐一检查每个解是否满足问题的条件。故选项A正确。
5.C
【详解】本题考查程序分析。语句(int(ch)+key)%10的功能是把数字ch循环右移2位,即如果ch=0,循环右移2位结果是2,若ch=4,右移结果是6,若ch=2,右移结果是4。mm=str((int(ch)+key)%10)+mm的功能是把右移2位的结果逆序保存到mm中,如果ch不是数字,则按照顺序保存到mm中。故选C。
6.A
【详解】本题考查数组的应用,b最终为二维数组,每个元素即为一个严格递增(可以不连续)的集合,最终结果,b[0]=[6,8,9,17],b[1]=[4,5],b[2]=[2,3]。故选择A。
7.D
【详解】本题考查的是Python循环及选择语句。程序执行过程如下表:
i
a[i]
a[m]
m
s
初始
0
0
1
3
4
1
1
2
1
3
2
3
3
2
1
2
5
4
3
1
2
7
结束
故执行该程序段后,输出的结果是7,选D。
8.B
【详解】本题考查的是Python选择语句。选项A中,30天及以内,会执行else分支,不符合题意;选项C中,30天及以内,会执行else分支,不符合题意;选项D中,超过30天一直执行if分支,elif分支不会被执行,不符合题意。故选B。
9.B
【详解】本题考查的是Python循环语句。range(start,stop,[step]),start:计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0,1,2,3,4]没有5;step:步长,默认为1。例如:range(0, 5) 等价于 range(0,5,1)。 range(5)生成[0,1,2,3,4共5个序列数,故输出5个元素。选B。
10.B
【详解】本题考查的是Python调试与运行。由a[i]=random. randint (1, 10)可知随机生成a[i]的值范围1~10,选项B中a[1]=11,故其只能通过 a[i]+=a[i]%2执行得到,执行该语句后a[i]的值范围2~10,不可能为11。故选B。
11.B
【详解】本题考查Python列表相关操作。进入循环之前,head=2;q=head;top=-1;第一次进入循环:q=2,top=0,s[0]=a[2][0]=’c’,q= a[2][1]=1,继续;第二次进入循环:q=1,top=1,s[1]=a[1][0]=’b’,q= a[1][1]=0,继续;第三次进入循环:q=0,top=2,s[2]=a[0][0]=’a’,q= a[0][1]=3,继续;第四次进入循环:q=3,top=3,s[3]=a[3][0]=’d’,q= a[3][1]=-1,结束循环。最后输出s[2],即’b’。
12.C
【详解】本题考查的是Python选择语句。初始w=2,h=5。不满足h>8,执行s=w+1=2+1=3。故本题应选C。
13.C
【详解】本题考查程序连接数据库相关知识。连接的数据库文件名是词库.accdb,①错“ConnectionString”是conn对象的属性名,④错。省略语句“rs.MoveNext”,数据库指针无法移动,循环无法结束,⑥错。②③⑤的说法正确,故本题选C。
14.D
【详解】本题考查的是Python语句格式。在编写python程序时,缩进可以使得代码非常整齐规范,赏心悦目,提高可读性,因此作用是用来界定代码块。故本题应选D。
15.条件语句或选择结构
【详解】本题考查分支结构。在编程语言中,条件语句或选择结构用于在程序执行时,依据给定的条件来决定执行不同的代码块。条件语句通过对条件的判断,若条件为真(成立)则执行相应的代码块,若条件为假(不成立)则执行另外的代码块或者不执行任何操作。常见的条件语句有if语句、if-else语句、switch语句等。通过条件语句,可以使程序根据不同的情况做出不同的响应和处理,增加了程序的灵活性和逻辑性。故答案为:条件语句或选择结构。
16.s=a*b
【详解】本题考查的是Python顺序结构。面积=长*宽,由print(a,b,s)面积存储在s中,故划线处代码为:s=a*b。
17. 3+5 8
【详解】本题考查的是Python的print语句。print("3+5")语句中3+5加了双引号,则当成字符串输出,print(3+5)语句中3+5没加双引号是表达式,将表达式运算后输出。
18.33
【详解】本题考查的是Python循环语句。阅读程序可知,计算的是:sum=1+1*2+1*2*3+……,当sum值大于等于10时停止。sum值为:1,3,,9,33……。故运行结果为33。
19. D d[0] == d[1] range(2) 或range(len(pre)) 或range(len(d)) t[i]>tlimit
【详解】本题考查的是Python综合应用。
(1)依据题干数据说明可知,1表示灯亮,若检测到“红绿灯同亮”异常,则采集到的数据是: [1,1]。选D。
(2)①处,由嵌套的分支可知,该分支处理的是:红绿灯同亮或同灭(即红绿灯状态相同),故此处应为:d[0] == d[1] ;②处,从for循环中语句的调用来看,i是数组d和pre的下标索引,i取0到1,故此处应为:range(2)或 range(len(d))或range(len(pre));③处,若d[i]==pre[i],表示i所对应的红绿灯相邻两个时刻的状态相同,则相应的红绿灯时长t[i]计数;若时长超过上限值,则表示异常状态;若此时i==0表示红灯异常;否则表示绿灯异常,故此处应为:t[i]>tlimit。
20. B m==m[::-1] flag=True num%i==0 sushu(n) and hws(n)
【详解】本题考查的是Python综合应用。
(1)sushu函数判断n是否为素数。如果n不能被[2,n**0.5]内的任何一个整数整除,则n是素数。因此属于枚举算法。选B。
(2)①本题用于找出1000以内所有的回文素数,主程序段采用枚举法,用于判断是否为回文,即该正序与逆序相同,则应填入m==m[::-1]。②sushu(num)函数用于判断num是否为素数,用flag标记,flag初值为True,故此处应为:flag=True。③如果num%i==0,说明num不是素数,赋值flag为False,故填num%i==0。④此处使用sushu(n) 、 hws(n)函数分别用于判断n是否是素数和回文数,故填sushu(n) and hws(n)。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$