第三章 算法的程序实现 测试卷(含答案)2023—2024学年浙教版(2019)高中信息技术必修1
2023-11-16 12:58:52 学考宝 作者:佚名
Word文档版
学考宝(xuekaobao.com)友情提示:html格式不完整,如有需要请根据文末提示下载并进行二次校对Word文档。
第三章 算法的程序实现 测试卷
一、选择题
1.在Python语言 中,下面程序的屏幕输出结果是( )
s=1
for i in range(1, 9,2):
s=s*2
print (s)
A.2 B.8 C.16 D.32
2.定义如下函数:
def tob(n):
if n==0:
return""
else:
return tob(n//2)+str(1-n%2)
执行语句s=tob(10)后,s的值为( )
A."1010" B."0101" C."1001" D."1100"
3.有如下python程序:
import random
a,i,c=[],0,0
while i<5:
b=random.randint(0,9)
if b not in a:
a.append(b)
i+=1
key=int(input("key="))
for j in range(len(a)):
if a[j]%key==0:
c+=1
else:
a[j-c]=a[i]
print(a)
运行该程序,若输入key为2,则输出的a不可能为( )
A.[3,7,5,4,5] B.[3,7,1,5,5]
C.[3,5,0,3,5] D.[9,7,4,7,3]
4.某Python程序如下:
q=[""]*50
head=tail=0
s="ningbo"
for i in s:
q[tail]=i
tail+=1
while head
print(q[head],end="")
head+=1
for i in range(3):
q[tail]=q[head]
head+=1
tail+=1
执行该程序段后,输出结果为( )
A.nbgoni B.nbogni C.goninb D.ningbo
5.执行下列Python程序段后,a的值是( )
a=76
while a<=90:
a=a+4
print (a)
A.88 B.92 C.90 D.94
6.在Python语言中,以下赋值语句正确的是( )
A.i=i-1 B.i-1=a+2 C.i+1=a D.i*3=a//2
7.在Python语言中,使用函数 range(3,12,3)返回的整数序列是( )
A.0,3,6,9 B.3,6,9,12 C.3,6,9 D.0,3,6,9,12
8.用Python编写成程序,输出结果的语句是( )
A.a=input(“请输入a的值:”) B.b=input(“请输入b的值:”) C.c=a+b D.print(a,b)
9.阅读下列Python程序块,运行结果为( )
s=0
while s<=20:
print(s)
s=s+7
A. B. C. D.
10.横线处应该填入的是( )
x=int(input("请输入一个正整数:"))
if_______:
print(x,"是偶数。")
else:
print(x,"是奇数。")
A.x%2==0 B.x%2=0 C.x//2==0 D.x//2=0
11.Python程序如下,运算结果为( )
a=20
b=5
c=a-b
print(a,"-",b,"=",c)
A.25 B.20-5=15 C."20"-"5"=15 D.20
12.Python比较运算符中表示“不等于”和“等于”的是( )
A.>= == B.!= == C.!= = D.<= =
13.运行以下程序,键盘依次输入16和30,其输出结果为( )
A.16 B.30 C.14 D.46
14.若a=6,b=3下列表达式结果为真(True)的是( )
A.a>2 and b>5 B.a==b C.a<7 or b>5 D.a>=6 and b<3
15.下列程序运行后结果是( )
sum=0
for i in range(1,7,2):
sum = sum+i
print(sum)
A.4 B.7 C.9 D.16
16.在Python语言中,not(3==4)的值为( )
A.True B.False C.3 D.4
17.下列程序代码,运行结果为( )
sum=1
for i in range(2,6):
sum=sum+i
print(sum,i)
A.21 5 B.15 6 C.15 5 D.21 6
18.下列Python程序,运行的结果是( )
a=1
if(a==4) or (a<6):
print("你好!",a)
else:
print("退出!")
A.你好! B.退出 C.你好!1 D.你好!6
19.在Python中,range(10,0,-3)的表示范围是( )
A.10,7,4,1,-2 B.10,7,4,1 C.10,9,8,7,6,5,4,3,2,1 D.-3,0,3,6,9
20.在Python语言中,以下能作为变量名的是( )
A.@1 B.a_1 C.1a D.for
二、填空题
21.input( )函数的返回值的类型是 。
22.已知变量a=3,那么执行语句a+=6之后,a的值为 。
23.在 Python中, 数据用来表示小数。
24.Python可在 编辑器中编辑程序,并使用快捷键 调试程序。
25.int(2.9)的值是 ,17//2的值是 。
三、判断题
26.已经构建发布的模块可以直接使用。( )
27.range(1,5)、range(5)都会生成列表[1,2,3,4,5]。( )
28.在Python语言中,数据的输出是通过output()函数实现的。( )
29.在Python 语言中,关系运算符可以连续使用,如1
30.python 语言中的“=”与数学中的“=”含义是相同的。( )
四、操作题
31.某智能货架有一排货位,货位号从0开始编号,每个货位等宽。货架上可放置不同宽度(占1-3个货位)的箱子,箱子从左往右连续相邻摆放。每次放置箱子时,只能在货架上最后一个箱子的右侧放置新箱子,搬离某个箱子时,该箱右侧所有箱子被自动左移。编写程序,模拟搬离或放置操作,操作结束后,输出当前货架上所有箱子的起始位置。
请回答下列问题:
(1)若货架状态如上图所示,搬离第2个箱子后,当前货架上最后一个箱子的起始位置是 。
(2)实现上述功能的部分Python程序如下,请在划线处填入合适的代码。
#共有n个箱子供操作,代码略
lst=[-1]*n
st=0
m=0
while True:
"操作序列如["P1","MO",……,"E"],依次读取序列元素,存入变量op,"P1"表示放置宽度为1的箱子,"MO"表示搬离第1个箱子,代码略"
if op[0]=="P":
w=int(op[1:])#表示箱子的宽度为w
lst[m]=st
st=st+w
elif op[0]="M":
i=int(op[1:])#表示第i+1个箱子将被搬离
if lst[i+1]!=-1:
dis=
else:
dis=st-1st[i]
while 1st[i+1]!=-1:
1st[i]=lst[i+1]-dis
i=i+1
1st[i]=-1
st=
m=m-1
else:
break
#输出当前货架上所有箱子的起始位置,代码略
32.某医院的看病流程为:患者通过网上、自助设备或人工窗口成功挂号后,到门诊的签到处签到,签到成功后即可排队等待叫号就诊。简化的排队规则如下:
①当天08:00之前完成签到的患者,按照挂号顺序从小到大排队就诊;
②08:00之后签到的患者,按照挂号的序号从小到大的次序插入候诊队伍中;
③队伍中前3名患者(包括正在就诊患者)视为已进入待诊状态,插队的患者只能插到这3名待诊患者后的队伍中。
假设医生从08:00开始叫号就诊,对每位患者的诊断时间均为3分钟,忽略相邻患者就诊的时间间隔。编写程序实现以下功能:若有患者签到,则根据规则更新候诊队伍;医生每完成一名患者的诊断,电子屏幕上按顺序显示待诊的患者姓名和每个患者预计就诊的时间。
(1)若当前已签到患者信息如下表所示:
姓名 挂号序号 签到时间
A 3 07:47:03
B 1 07:51:12
C 6 07:55:32
D 4 07:57:10
E 8 07:59:52
F 2 08:02:07
则患者F的预计就诊时间为 (格式如08:07:20)。
(2)08:00:00之前签到的患者原始数据存在列表lst中,每位患者信息包括姓名、挂号序号、签到时间,以下函数将列表中的数据按挂号序号从小到大排序,并构建候诊队伍。
def init(lst): #构建8点前签到的候诊队伍
i=0;n=len(lst)
while i< n-1:
k=i;i=n-1
for j in range(n-1,k,-1):
if lst[j][1]< lst[j-1][1]:
lst[j],lst[j-1]=lst[j-1],lst[j]
for i in range(n):
lst[i][2]=180*i#修改时间格式,每位患者诊断时间为3分钟
lst[i].append(i+1)
lst[n-1][3]=-1#尾结点指针域处理,如['E',8,720,-1]
程序划线处的代码是 (单选,填字母)
A.i=i+1 B.i=j+1 C.i=k-1 D.i=j
(3)每当一位患者就诊结束,更新队伍并按就诊顺序输出待诊的患者姓名和每个患者预计就诊的时间。请补充程序划线处。
def gs(t):#时间格式转换,将时间戳127转成“08:02:07”形式
t=t+8*60*60
h=t//3600
m=
s=t%60
time='%02d'%h+':'+'%02d'%m+':'+'%02d'%s
return time
def mov(lst,head):
#更新队伍并输出,代码略
return head
(4)若有患者签到,则更新候诊队伍。请补充程序划线处。
def tc(time):#时间格式转换,将“08:02:07”转换成以秒为单位的时间戳127
t=int(time[0:2])*60*60+int(time[3:5])*60+int(time[6:])
t=t-8*60*60#8点开始叫号看诊
return t
def insnew(lst,head,data):#将新签到的患者插入候诊队伍中,并更新每个患者预计就诊的时间
data[2]=tc(data[2])
data.append(-1)
p=head;q=p;k=0
if head=-1: #无人排队
lst.append(data)
①
else:
while q!=-1 and(② ):
k=k+1
p=q
q=lst[q][3]
data[2]=lst[p][2]+180
data[3]=q
lst.append(data)
lst[p][3]=len(lst)-1
p=len(lst)-1
while q!=-1:
lst[q][2]=lst[p][2]+180
p=q
q=lst[q][3]
return head
参考答案
1.C
2.B
3.D
4.A
5.B
6.A
7.C
8.D
9.A
10.A
11.B
12.B
13.A
14.C
15.C
16.A
17.C
18.C
19.B
20.B
21.字符串型
22.9
23.浮点型
24.IDLE F5
25.2 8
26.错误
27.错误
28.错误
29.正确
30.错误
31.5 m=m+1 lst[i+1]-lst[i] st-dis
32.08:09:00 D t%3600//60 head=len(lst)-1 k<3 or data[1]>lst[q][1]