内容正文:
4.4 运用循环结构描述问题求解过程
一、选择题
1.下列有while循环结构的说法不正确的是( )
A.While循环格式一般为:While(表达式):语句或者语句组
B.执行过程中表达式一般是一个关系表达式或逻辑表达式;
C.表达式为真执行循环体;为假退出循环。
D.表达式为假执行循环体;为真退出循环。
2.以下对Python循环语句的描述错误的是 ( )
A.循环语句的结束条件设置不合理会造成无限循环 B.所有的for循环都可以用while循环改写
C.for循环一般用于循环次数已知的情况 D.for循环和while循环不能相互嵌套
3.关于python语句功能描述正确的( )
A.ord(chr(x)+26) #若字符变量x是大写字母即变成小写字母
B.str(x)+str(y) #求两数之和
C."abcd"[2:4] #运行结果为"bcd"
D.2**3*2/2 % 5 #结果3
4.运行如下Python程序,结果为( )。
A.1 B.3 C.6 D.18
5.某Python程序如下:
s="372LP";t=""
for i in range(len(s)):
if s[i]>="0" and s[i]<="9":
t=t+s[i]
print(t)
程序运行后,输出的结果是( )
A.12 B.372 C.273 D.3+7+2
6.以下程序的运行结果是( )
A.i!=t B.i!=1 C.i!=6 D.3!=6
7.关于队列,下列说法错误的是( )
A.队列是先进先出(FIFO)表,它的数据元素只能在一端依次添加(进队),在另一端依次删除(出队)
B.pop()方法可以删除列表的首元素(相当于队列的“出队”操作)
C.pop(0)方法可以删除列表的首元素(相当于队列的“出队”操作)
D.append方法可以在列表尾部添加一个数据元素(相当于队列的“入队”操作)
8.有如下Visual Basic程序段:
s = 0
For a = To 8 Step 2
s =" s" + a
Next a
若要使语句s =" s" + a执行3次,则循环变量a初值为( )
A.1 B.2 C.3 D.5
9.有如下VB程序段:
a(1) = 11 : a(2) = 14 : a(3) = 23 : a(4) = 23 : a(5) = 30 : a(6) = 42
key = Val(Text1.Text)
L = 1 : R = 6 : x = 0
Randomize
Do while L <= R
mid = Int(Rnd() * (R-L+1))+ L
If a(mid) = key Then
Exit Do
ElseIf a(mid) > key Then
R = mid - 1
x = x - 1
Else
L = mid + 1
x = x + 1
End If
Loop
If L <= R Then
Label1.Caption = "查找成功," + "位置为" + str(mid)
Else
Label1.Caption = "查找失败"
End If
该程序执行后,在文本框Text1中输入23,则x的值不可能是( )
A.-3 B.-2 C.1 D.2
10.在Python 语言中,如果要程序一直循环下去, 则循环的“条件”要一直为“True”,因此在程序循环开始的地方写上语句( )
A.while True: B.while 2>1: C.while 2<3: D.以上选项都对
11.数组元素a[0]至 a[n-1]依次存放着n个数据,现需要将下标为 x(0≤x≤n-1)元素在逻辑上删除,例如:n为5,数组a为[1,3,5,7,9] ,x为2,删除操作后输出[1,3,7,9]。实现该功能的程序段如下,横线中应填入的正确代码为( )
a=[1,3,5,7,9]
n=len(a)
x=2
for i in range(① ):
②
print(a[:-1])
A.①x,n ②a[i-1]=a[i] B.①n-x ②a[i-1]=a[i] C.①x,n ②a[i]=a[i+1] D.①x-n,-1 ②a[i]=a[i+1]
12.在 Python 语言中,在 while 语句后面的条件不满足时就退出循环,但是,如果我们想在循环的过程中直接退出循环体,使用的命令是( )
A.len B.end C.break D.del
13.费马平方和定理:质数能表示为两个平方数之和的充分必要条件是该质数被4除余1,如13=22+32。现通过编程来验证3-99之间所有质数是否符合费马平方和定理。
实现该功能的Python程序如下,运行结果如图所示,划线处的代码可以是( )
from math import sqrt
def prime(n):
# prime(n)判断n是否为质数,返回True/False,代码略
for n in range(3, 101, 2):
if prime(n):
a=1; flag=True
while a < sqrt(n) and flag:
b= ①
if int(b)==b:
print(str(n)+“=”+str(a)+“**2+”+str(int(b))+“**2”)
flag=False
a=a+1
if ②
print(n,“无法用两个平方数之和表示”)
A.① b=sqrt(n-a**2) ②flag
B.①b=sqrt(n-a*a) ②not flag
C.① b=sqrt(n-a*a) ②n%4!=1
D.① b=sqrt(n-a**2) ②b==int(b)
14.某 Python程序段如下:
s = "420play+2qQ"
res = ""
for i in range(len(s)):
if "0" <= s[i] <= "9":
res = s[i] + res
if i % 3 == 0 and "a" <= s[i] <= "z":
res = res + chr(ord(s[i]) - 32)
print(res)
执行该程序段后,输出的结果是( )
A.4202PYQ B.2024A C.PYQ4202 D.2024PYQ
15.某Python程序如下:
p=")!@#$%^&*("
c="cra2edu"
t=""
for i in range(len(c)//2+1):
if i%2==0:
t+=c[len(c)-i-1]
elif c[i]>="0" and c[i]<="9":
t+=p[int(c[i])]
else:
t+=c[i]
print(t)
程序运行后,输出的结果是( )
A.ure@ B.ure@a C.ude@ D.cda!
16.有如下程序段:
Dim s(1 To 81) As Integer, i As Integer, j As Integer, c As Integer, temp As Integer
c=0 : s(1) = 0
For i = 1 To 9
For j = 1 To i
temp = s(j * i)
s(j * i) = j * i
If temp <> s(j * i) And s(j * i) Mod 9 = 0 Then c = c + 1
Next j
Next i
该程序段运行后,变量 C 的值为( )
A.9 B.10 C.11 D.12
二、填空题
17.Python语言用于实现循环结构的语句有 语句和while语句。
18.阅读下列程序,写出运行结果。
程序运行后,输入:2021
运行结果是:
19.在 IDLE 编辑器中运行以下程序,屏幕打印 颗*。
for i in range(0,10,2):
print(" *" )
20.以下Python程序段的运行结果是 。
n = 36
s = 0
for i in [2,3,4,5,6,7,8]:
if n % i == 0:
s = s + 1
print (s)
21.已知a=2,b=1,以下Python程序段运行结束后,b的值是 。
22.阅读下列程序,写出运行结果
警察抓小偷,有四个嫌疑人甲乙丙丁,其中一人是小偷。甲说“不是我”,乙说“是丙”,丙说“是丁”,丁说“丙在冤枉人”。他们中只有一人说了假话,编程判断谁是小偷。(注:在Python运算中,True的值为1,False的值为0)
persons=[’甲’,’乙’,’丙’,’丁’]
for thief in persons:
flag =(thief!=’甲’)+(thief==’丙’)+(thief ==’丁’)+(thief!=’丁’)
if flag == 3:
print(thief)
运行结果是:
三、操作题
23.某校图书馆提供3类自习室,A类最多容纳2人,B类最多容纳4人,C类最多容纳8人,以1小时为单位进行预约,每人每天只能预约一次,每次预约仅限个人,规定预约时间结束之前必须离开。图书馆每天6点开馆,22点闭馆。编写程序,输入某自习室号牌,根据已预约情况,输出该自习室还能被预约的时间段。例:读取“A102”已预约情况[[6,11],[15,18],[8,12],[15,22]],其中“A102”表示为A类102号自习室,[6,11]表示某个人预约6:00开始,11:00前必须离开,时间占用如图所示,则该自习室还能预约的时间段为[[6,8],[11,15],[18,22]]。请回答下列问题:
(1)若“B101”的已预约情况为[[6,11],[8,12],[8,11],[6,12]],则该自习室还能预约的时间段是 。(时间段格式参照题中样例)
(2)实现上述功能的部分Python代码如下,请在划线处填入合适的代码。
r= input("输入自习室号牌:")
#根据自习室号牌r,获取该自习室可容纳的人数上限和预约情况分别存入ceil和time中,代码略
#如time =[[6,11],[15,18],[8,12],[15,22]]
bucket = [0]*24#记录该自习室每个时刻被预约的人数
for period in time:
for i in range(period[0],① ):
bucket[i]+= 1
ans=[]; rec=[]
for i in range(6,22):
if bucket[i]<ceil:
rec.append(i)
if len(rec)==0:
print("该自习室目前没有可预约时段")
else:
left,right =0,0
i=1
while i<len(rec):
if rec[i]==rec[i-1]+1:
②
else:
ans.append([rec[left],rec[right]+1])
left,right=i,i
③
ans.append([rec[left],rec[right]+1])
print(r,"可预约的时间:", ans)
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.D
【详解】本题考查while循环结构
While循环格式一般为:While(表达式):语句或者语句组;执行过程中表达式一般是一个关系表达式或逻辑表达式;表达式为真执行循环体;为假退出循环。故本题选D选项
2.D
【详解】本题考查Python循环结构的描述。for循环和while循环可以相互嵌套。故选D。
3.D
【详解】本题考查表达式的运算。A选项,会导致类型错误。B选项,字符拼接,非求和。C选项,结果为“cd”。D选项正确,结果为3。故正确答案为选项D。
4.C
【详解】本题主要考查Python循环结构。分析程序可知,该程序求m、n的最大公约数,程序结束后m=6,此时r=0,故本题选C选项。
5.B
【详解】本题主要考查Python程序的执行。分析程序可知,该程序实现将字符串s中的数字保存到变量t中,s="372LP",因此t="372",故本题选B选项。
6.D
【详解】本题主要考查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)。故变量i的取值依次是1、2、3,循环结束后t=t*i=1*1*2*3=6,即运行结果是3!=6,故本题选D选项。
7.B
【详解】本题考查数据结构。pop()方法是删除列表的最后一个元素,而不是首元素,这是错误的。其它选项正确。故正确答案为选项B。
8.C
【详解】本题主要考查VB程序的执行。a大于8时退出循环,每次递增2,若a=1,则循环结束时,语句s =" s" + a执行4次,a=9;若a=2时,则循环结束时,语句s =" s" + a执行4次,a=10;若a=3时,则循环结束时,语句s =" s" + a执行3次,a=9,故本题选C选项。
9.A
【详解】本题主要考查VB程序查找算法。key=23,L=1,R=6,x=0,第一种情况:mid = Int(Rnd() * (6-1+1))+ 1,mid是随机生成[1,6]之间的整数,当mid=1时,a(1)<key,L=mid+1=2,x=x+1=1,继续循环,mid = Int(Rnd() * (6-2+1))+ 2,mid是随机生成[2,6]之间的整数,当mid=2时,a(2)<key,L=mid+1=3,x=x+1=2,继续循环,当mid=3时,程序结束,故x可能是2;第二种情况:当mid = Int(Rnd() * (6-1+1))+ 1,mid是随机生成[1,6]之间的整数,当mid=2时,a(mid)<key,L=mid+1=3,x=x+1=1,继续循环,mid = Int(Rnd() * (6-3+1))+3,mid是随机生成[3,6]之间的整数,当mid=3时,程序结束,故x可能是1;第三种情况:当mid = Int(Rnd() * (6-1+1))+ 1,mid是随机生成[1,6]之间的整数,当mid=5时,a(5)>key,R=mid-1=4,x=x-1=-1,继续循环,mid= Int(Rnd() * (4-3+1))+3,mid是随机生成[3,4]之间的整数,当mid=4时,程序结束,故x可能是-1;第四种情况:当mid = Int(Rnd() * (6-1+1))+ 1,mid是随机生成[1,6]之间的整数,当mid=6时,a(6)>key,R=mid-1=5,x=x-1=-1,继续循环,mid = Int(Rnd() * (5-3+1))+3,mid是随机生成[3,5]之间的整数,当mid=5时,a(5)>key,R=mid-1=4,x=x-1=-2,继续循环,mid = Int(Rnd() * (4-3+1))+3,mid是随机生成[3,4]之间的整数,当mid=4时,程序结束,故x可能是-2。故该程序执行后,在文本框Text1中输入23,则x的值不可能是-3,故本题选A选项。
10.D
【详解】本题考查的是while循序。2>1、 2<3表达式值为True,故本题应选D。
11.D
【详解】本题考查程序分析。需要指定range的参数,确定遍历的下标。range的参数可是使用负数索引,故从x-n到-1。每次遍历后一个数覆盖前一个数,实现删除,故a[i]=a[i+1]。正确答案为选项D。
12.C
【详解】本题考查的知识点是Python循环语句。在Python中,可以使用break语句退出循环。continue语句用于跳过当前循环的剩余部分并进入下一次循环,故本题应选C。
13.AC
【详解】本题主要考查Python程序的执行与调试。四个选项中第一问都正确,它们的含义相同,即 a**2等效于 a*a 。重点在第二问。代码 if int(b)==b的含义是b如果正好是整数而不是浮点数说明 n 是由两个整数的平方和组成。条件成立就输出n由那两个整数的平方和组成,这两个整数分别是a和b。 flag=false代码说明不用再循环已经找到满足两个数的平方和等于n的变量a和b。flag为false时表示n可以有两个数的平方和组成,flag为true时表示没有两个整数的平方和是n。A选项符合题意,B选项错误。题干中“质数能表示为两个平方数之和的充分必要条件是该质数被4除余1”,故C选项也正确。b==int(b)成立时flag值为false,n是可以有两个整数的平方和组成,D选项错误。故本题选AC选项。
14.D
【详解】本题考查程序分析能力。当字符是数字时候,将数字向前累计拼接到res上。当索引能被3整除且是小写字母时候,则转化成大写字符并向后拼接累计到res后面。故正确答案为D选项。
15.A
【详解】本题主要考查Python程序的执行。程序段实现了对字符串的处理。由“range(len(c)//2+1)”生成的序列为[0,1,2,3],循环执行4次。索引i为偶数时,在字符串c中取与c[i]对称的字符,因此i=0时,将字符“c”对称的字符“u”取出并拼接在字符串t中;索引i为奇数时,取出字符“r”并拼接在字符串t中;i=2时,将字符“a”对称的字符“e”取出并拼接在字符串t中;当c[i]为数字时,则在字符串p中以c[i]为索引取出字符“@”。故本题选A选项。
16.A
【详解】本题考查数组、循环嵌套和枚举算法。外层共9次循环,第一次循环,s(j * i)=1*1=1;第二次循环,内层循环执行两次,s(j * i)的值分别为2、4;……;依次类推枚举s(j * i)的值如下图:
temp <> s(j * i) And s(j * i) Mod 9 = 0 temp 记录的是 s(j * i)上一次被赋值的量,只有当上一次未被赋值,且能被 9 整除时 C 才能自增 1,因此由表中能被 9 整除的项总计 12 个,有 3 项重复,因此答案为 9 个。最后一行数据为 9 的 1,2,3,4……9 的倍数的枚举,涵盖了表中所有能被 9 整除的情况,由此也能直接得出结论 C 为 9, 选项A正确
17.for
【详解】本题主要考查Python循环结构。Python语言用于实现循环结构的语句有for语句和while语句。
18.1202
【详解】本题主要考查Python程序的执行。分析程序可知,该程序实现将输入的正整数x,逆着输出。故程序运行后,输入:2021,运行结果是:1202。
19.5
【详解】本题考查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)。i依次取0、2、4、6、8,因此循环5次,即屏幕打印5颗*。
20.4
【详解】本题主要考查Python程序执行。分析程序可知,变量s统计列表[2,3,4,5,6,7,8]中是36因子的个数,满足的数有2、3、4、6,故运行的结果是4。
21.4
【详解】本题考查的是Python循环语句。初始a=2,b=1。
a>=b成立,第一次循环,执行b=a*b=2*1=2;
a>=b成立,第二次循环,执行b=a*b=2*2=4;
a>=b不成立,跳出循环,故b的值是4。
22.丙
【详解】本题主要考查 Python程序执行。分析程序可知,只有当thief=’丙‘时,满足flag=3,即4个人中只有一人说了假话,故运行结果是丙。
23. [[6,8],[11,22]]或等价描述 period[1] ringt=i或right+=1 i+=1或i=i+1
【详解】本题考查的是Python综合应用。
(1)B类最多容纳4人,已预约情况为[[6,11],[8,12],[8,11],[6,12]],则该自习室还能预约的时间段是:[[6,8],[11,22]]。
(2)period[0]表示预约开始时间,统计自习室每个时刻被预约的人数,故第一空应为:period[1];如果可预约时间是连续的,则可预约时间右边界往右移一位,故第二空应为:ringt=i或right+=1;继续判断下一个可预约时间,故第三空应为:i+=1或i=i+1。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$