内容正文:
2023-2024学年高一上学期粤教版(2019)必修一4.4运用循环结构描述问题求解过程
一、选择题
1.阅读并理解下面的Python程序代码,程序运行的结果是
1 deftell(name):
2 print(name,“擦黑板、打扫卫生、清理垃圾。”)
3
4 xq=[“星期一”,“星期二”,“星期三”,“星期四”,“星期五”]
5 xm=[“张华”,“王莉”,“李翔”,“陈晨”,“吴烨”]
6 for i in range(5):
7 print(xq[i])
8 tell(xm[i])
A.张华擦黑板、打扫卫生、清理垃圾。
王莉擦黑板、打扫卫生、清理垃圾。
李翔擦黑板、打扫卫生、清理垃圾。
陈晨擦黑板、打扫卫生、清理垃圾。
吴烨擦黑板、打扫卫生、清理垃圾。
B.星期一擦黑板、打扫卫生、清理垃圾。
星期二擦黑板、打扫卫生、清理垃圾。
星期三擦黑板、打扫卫生、清理垃圾。
星期四擦黑板、打扫卫生、清理垃圾。
星期五擦黑板、打扫卫生、清理垃圾。
C.星期一
张华擦黑板、打扫卫生、清理垃圾。
星期二
王莉擦黑板、打扫卫生、清理垃圾。
星期三
李翔擦黑板、打扫卫生、清理垃圾。
星期四
陈晨擦黑板、打扫卫生、清理垃圾。
星期五
吴烨擦黑板、打扫卫生、清理垃圾。
D.张华
星期一擦黑板、打扫卫生、清理垃圾。
王莉
星期二擦黑板、打扫卫生、清理垃圾。
李翔
星期三擦黑板、打扫卫生、清理垃圾。
陈晨
星期四擦黑板、打扫卫生、清理垃圾。
吴烨
星期五擦黑板、打扫卫生、清理垃圾。
A.A B.B C.C D.D
2.已知字符A的内码为65,a内码为97,则下列程序执行后变量t的值为( )
s="Cc12BbAa":t=""
For i=1 To len(s)
ch=Mid(s,i,1)
If ch>="a"And ch<="z"or ch>="A"And ch<="Z"Then
If ch>="a" And ch<="z"Then
ch=Chr(Asc(ch)-32)
End If
t=ch+t
End
Next i
A."CcBbAa" B."aabbcc C."CCBBAA" D."AABBCC"
3.以下程序的输出结果是:( )
x=10
while x:
x-=l
if x%2==0:
print(x, end=’ ’)
A.86420 B.97531 C.1097531 D.1086420
4.下列关于Python循环语句的说法错误的是( )
A.for循环一般用于循环次数已知的情况
B.for循环和while循环不能相互嵌套
C.循环语句的结束条件设置不合理会造成无限循环
D.所有的for循环都可以用while循环改写
5.有如下Python程序段:
s = [1,3,4,3,1]
m,sum =s [0], 0
for i in range(1, len(s)):
if s [i] > m:
m = s[i]
sum += m
执行该程序后,sum的值为( )
A.15 B.12 C.11 D.7
6.运行以下Python代码,实现统计列表a中小于60的数的个数,程序划线处应填入( )
a=[12,56,79,90,75,33,29,100,66,1]
n=0
m=60
for i in range(10):
if :
n+=1
print("个数",n)
A.a[i+1]<n B.a[i]<n C.a[i+1]<m D.a[i]<m
7.数组元素a[0]至a[n-1]依次存放着n个数据,现需要将元素a[0]插入在下标为:x(0<x≤n-1)的位置,例如:n为5,数组a为[0,3,4,6,7],x为2,插入操作后a为[3,4,0,6,7]。实现该功能的部分程序段如下:
i=0;temp=a[0]
while i<x:
i+=1
a[x]=temp
则方框中应填入的正确代码为( )
A.a[i+1]=a[i] B.a[i-1]=a[i] C.a[i]=a[i-1] D.a[i]=a[i+1]
8.有如下排序程序:
程序运行后,列表a中的内容是( )
A.[20,19,18,15,12,10,10,10,9,3]
B.[3,9,10,10,10,12,15,18,19,20]
C.[19,20,15,18,10,12,10,9,10,3]
D.[20,15,19,10,18,10,12,10,9,3]
9.有如下Python程序段:
n=2
s=0
while n<10:
n=n+2
s=s+n
print(s)
该程序段运行后,s的值是( )
A.16 B.20 C.23 D.28
10.有如下 Python 程序段:
import random
a = [8,6,1,3,2,9]
k = random.randint(1,3)
for i in range(k,k+2):
if a[i]<a[i-1]:
a[i],a[i-1]=a[i-1],a[i]
执行该程序段后,a 对象的内容不可能是( )
A.[6, 1, 8, 3, 2, 9] B.[8, 6, 1, 2, 3, 9] C.[8, 1, 3, 6, 2, 9] D.[6, 9, 1, 3, 2, 8]
11.某两段Python程序分别如图所示:
n=int(input("n="))
s=0
for i in range(1,n+1,2):
s+=i
print(s)
n=int(input("n="))
s,i=0,1
while i<=n:
s+=i
i+=2
print(s)
当n的值为10时,关于该两段程序,下列说法不正确的是 ( )
A.两段程序中i的初值相同 B.两段程序都采用了循环结构
C.两段程序的运算结果不相同 D.左边程序实现了“1+3+5+7+9”和的运算
12.有如下VB程序段:
s = Text1.Text
For i=1 To Len(s)
ch = Mid(s,i,1)
If ch>="A" And ch<="Z" Then t=t+ch
If ch>="a" And ch<="z" Then
ch = Chr(Asc(ch)-32)
t=t+ch
ElseIf ch >= "0"And ch <= "9" Then
t=ch+t
End If
Next i
Text2.Text = t
已知'A'的ASCI码为65,'a'的ASCI码为97.程序运行后,在文本框Textl中输入“Text2.text=”Abc1234“”(外括号不包括),则在Text2中显示的内容是(
A.TEXT2.TEXTABC1234 B.43212TexttextABC
C.43212TEXTTEXTABC D.TEXTTEXTABC43212
13.有如下Python程序段:
s=0
for i in range(2,10,3):
s=s+i
print(s)
执行该程序段后,变量s的值是( )
A.14 B.17 C.12 D.15
14.有如下Python程序段:
import jieba
str="热烈庆祝建党100周年"
fc=jieba.lcut(str)
print(fc)
for i in fc[::1]:
print(i)
已知分词之后的文本输出fc为:['热烈庆祝', '建党', '100', '周年'],则程序运行结束后的结果是( )
A.周年100建党热烈庆祝
B.热烈庆祝建党100周年
C.热烈庆祝建党周年100
D.年周001党建祝庆烈热
15.有如下VB程序段:
For i = 1 To 3
For j = 1 To 6-i
If a(j)>a(j+1) Then t=a(j):a(j)=a(j+1): a(j+1)=t
Next j
Next i
数组元素 a(1)到 a(6)的数据依次为“55,31,19,42,37,23”,则此程序运行完成后数组元素的数据依次是( )
A.55,42,37,31,23,19 B.19,23,31,55,37,42
C.19,23,31,37,42,55 D.19,31,23,37,42,55
二、填空题
16.学校决定对学生的就餐卡消费进行管理和预警,具体措施如下:如果一周内的消费总额达到或超过210元,则给出预警提示“您的本周消费已达上限”,并且限制本周内单次消费额度不超过10元,否则允许正常消费。假设每周消费按21次计算,模拟解决问题的算法步骤如下
(1 )输入单次消费金额money ;
(2)如果消费总额total>210元,并且单次消费money> 10元,则输出“您本周消费已达上限,单次消费不能超过10元”,然后重新输入单次消费金额money ;
(3)将单次消费金额累加到消费总额total。
根据以上算法分析,补全以下程序代码:
请补全程序:
17.某Python程序段如下:
info = ["男", 79, "女", 97, "女", 94, "男", 91, "女", 85, "女", 100, "男", 82]
tot = c = 0
for i in range(0, len(info), 2):
if info[i] == "女":
continue
tot += info[i + 1]
c += 1
print(round(tot / c, 1))
运行该程序段,输出结果是
18.阅读下列程序,写出运行结果。
m = int(input("请输入一个正整数:"))
x = m
y = m
for i in range (9):
n = int(input("请输入一个正整数:"))
if n<x :
x = n
if n<y :
y = nprint(x, y)
程序运行后,依次输入:12 35 9 11 23 88 13 19 29 55
运行结果是:
19.下面程序的运行结果为: ,
s=0
for i in range(1,101):
s+=i
if i == 50:
print(s)
break
三、操作题
20.某地区物流总站的智能物流系统,通过自动扫描货物物流单上的条形码采集物流信息,如图a所示。该系统根据分站编号将货物分流并等待配送,当某分站的等待配送货物重量大于等于配送车队第一辆的最大承重时(每件货物重量一定小于货车的最大承重),系统开始自动装货并进行配送,已知总站有足够的货车配送货物,如图b所示。当一天的货物全部扫描完成后,系统会对未配送的货物自动装货并进行配送。
例如:当数据扫描到ID为1的货物时,目的地分站编号1的待配送货物总重量达到了900kg,没有达到货车hc1的最大承重1800kg,不配送。当数据扫描到ID为4时,目的地分站编号2的待配送货物总重量达到了2000kg,大于等于货车hc1的最大承重1800kg,需要为分站2进行配送,优先配送先扫描的货物ID为[2,3],载货重量为1500kg,ID为4的货物留下。当数据扫描到ID为5的货物时,目的地分站编号1的待配送货物总重量达到了1800kg,超过了货车hc2的最大承重1600kg,货车hc2为分站1进行配送,配送的货物ID为[0,1],载货重量为900kg,ID为5的货物留下,继续扫描ID为6的货物……
图a 图b 图c
编写Python程序模拟上述功能,程序的运行结果如图c所示,请回答下列问题:
(1)将货车hc1的最大承重修改为2100kg,则货车hc1配送的货物ID为
(2)读取物流数据,将读取的货物根据各自的目的地分站编号分流至每个分站的待配送队列中,先扫描的货物配送时也优先配送,请在划线处填入合适的代码。
#读取采集的物流数据存储在变量data中;n是所有分站的总数,分站编号分别是1到n;
#hc数组中存储所有货车的最大承重数据,例如:hc[0]=1800,则第一辆货车的最大承重为1800kg,#物流总站有足够的货车,代码略。
st=[] #st列表存储了每个分站的数据信息,其中st[k][0]是第k+1个分站待配送货物的总重量
hct=0
for i in range(n):
st.append([0])
head=[1]*n ; tail=[1]*n
for i in range(len(data)):
k=data[i][1]-1
st[k].append(i)
tail[k]+=1
trans() #调用函数trans
#扫描完所有数据后,将还未配送的货物依次进行配送,代码略
(3)每次扫描货物后判定是否可以进行配送,根据处理结果依次输出每次配送的具体信息,请在划线处填入合适的代码。
def findmax(st): #findmax函数功能是找到分站中货物累计重量最大的分站
t=0
for i in range(1, len(st)):
if ① :
t=i
return t
def trans():
global st, head, tail, hct, hc #全局变量,整个程序都可访问和修改的变量
while True:
maxt=findmax(st)
if st[maxt][0]< hc[het]: #hc[hct]当前队首货车的载重量
break
remain=hc[hct]
info=[]
while ② and remain>data[st[maxt][head[maxt]]] [2]:
tmp=st[maxt][head[maxt]]
info.append(int(data[tmp][0]))
remain-=data[tmp][2]
③
head[maxt]+=1
print(st)
#输出当前配送数据info、货车、分站编号等信息,代码略
het+=1
四、简答题
21.请简述什么是编程中的循环,并说明循环的基本类型。
22.列举Python程序设计语言中,for循环和while循环的基本的格式。
23.在“抗击疫情,‘宅’出精彩”征文活动中,每位选手可以提交一篇作品。活动以互评的形式展开:每位选手对m篇作品进行打分(本人作品回避),方法如下:
① 用1-n数字代表n个作品,打乱顺序后分配给n个选手。分配方案保存在数组a中,如图a存储了两组分配方案(n=5)。在第一个分配方案中把4号作品分配给1号参赛者,1号作品分配给2号参赛者(选手编号与序号错开)……。
4
1
5
2
3
a(1)~a(n)中存储第一个分配方案
2
3
4
5
1
a(n+1)~a(2*n)中存储第二个分配方案
↑第i列中的作品拿给i号参赛者打分
图a
②分配方案的形成方法: 将1~n之间的随机数字依次放到第1个位置、第2个位置……,随机数不能与位置号相同,并且要防止分配冲突,如前三个分配序号是“2 3 4”,那么在第4位上只能放“5”(如放“1”会导致第5个位置没有符合要求的数字,因此位置n-1需要判断数“n”是否已经分配,如果未分配,位置n-1放置数“n”),最终方案“2 3 4 5 1”。
③评m个作品需要m个分配方案。方案间要避免同一个人拿到重复的作品。如第16题图a第3行上的数据“5 1 2 3 4”不符合要求,因为会使第2号选手重复拿到1号作品。
小明依据上述方法设计了VB程序,功能如下:在文本框Text1和Text2分别输入参赛人数和每人打分的作品数量,单击“分配”按钮Command1,在列表框List1中输出结果。程序运行效果如图b所示。
请回答下列问题:
(1)n=5,m=3,a(1)~a(10)中的数据如图a所示,a(11)~a(15)的数据可能是 (单选,填字母:A.5 4 3 1 2/B.5 4 1 3 2/C.3 4 5 1 2)
(2)请在划线处填入合适的代码。
Dim n As Integer '总人数/总作品数
Dim m As Integer '每人分配篇数
Dim a(1 To 500) As Integer '数组a大小满足处理要求
Dim c(1 To 100) As Integer '数组c大小满足处理要求
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer
n = Val(Text1.Text): m = Val(Text2.Text)
Randomize
i = 1
Do While i <= m
For j = 1 To n
c(j) = 0 '本轮分配方案中还没有数字j, c(j)=0,否则c(j)=1
Next j
For j = 1 To n
If j = n - 1 And c(n) = 0 Then ①
Else
k = r(n, j)
End If
a((i - 1) * n + j) = k '分配数字k到当前方案的第j个位置上
c(k) = 1
Next j If ② Then i = i + 1
Loop
s = ""
For i = 1 To n
s = "参赛者" & i & ":"
For j = 1 To m
s = s + Str(a((j - 1) * n + i))+ ","
Next j
List1.AddItem s
s = ""
Next i
End Sub
Function r(x As Integer, y As Integer) As Integer
'生成一个取值在[1,x]之间,可以放在y位置上的随机数,满足条件r<>y andc(r)=0
End Function
Function check(c As Integer) As Boolean
'本轮方案和前面几次的分配方案比较,如果有人分到了重复作品,返回FALSE
Dim p As Integer,f As Boolean
f = True
p = 1
For i = 1 To c * n If ③ Then
f = False: Exit For
End If
p = p mod n +1
Next i
check = f
End Function
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.C
2.D
3.A
4.B
5.A
6.D
7.D
8.C
9.D
10.D
11.C
12.C
13.A
14.B
15.D
16.tota1>=210 and money>10或money>10 and total>=210
17.84.0
18.9 9
19.1275
20. [0,1,5,6]或0,1,5,6等 st[k][0]+=data[i][2] st[i][0]>st[t][0] head[maxt]!=tail[maxt] st[maxt][0]-=data[tmp][2]
21.循环是编程中重复执行一段代码直到满足特定条件的控制结构。循环的基本类型包括:for循环(迭代已知次数的元素序列)、while循环(只要条件为真就迭代)和do-while循环(至少执行一次,然后只要条件为真就继续迭代)。
22.for 循环结构的基本格式:
for 循环变量 in 列表:
语句或语句组
While循环格式:
While(表达式):
语句或者语句组
23.(1)B
(2)①k= n ②check(i - 1) ③a(i) = a(c * n + p)
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$