内容正文:
4.4 运用循环结构描述问题求解过程
一、选择题
1.在下面Python程序代码中,①和②处应该填的代码是( )
sc=float(input("请输入期末考成绩sc="))
if sc>=90:
print("优秀")
① sc>=80:
print("良好")
elif sc>=60:
print("合格")
②:
print("不合格")
A.if else B.else elif C.elif else D.elif elif
2.在循环结构中,用于判断循环是否继续执行的表达式通常称为( )
A.循环条件 B.循环表达式 C.循环控制变量 D.循环计数器
3.某算法的部分流程图如图所示。执行这部分流程后,s的值应为( )
A.-21 B.11 C.-5 D.1
4.有如下python程序段:
s="PyThoN2023";r="";flag=True
for i in range(len(s)):
ch=s[i]
if"0"<=ch<="9" and i%2==1:
r+=str(9-int(ch))
elif"A"<=ch<="Z" and flag:
r+=chr(ord(ch)-ord("A")+ord("a"))
else:
r+=ch
flag=not flag
print(r)
执行该程序后,输出结果是( )
A.pyThon8083 B.PyThon8083 C.pyThon2926 D.pyThoN2926
5.经过中国国家登山队的测量,2020年12月8日,中尼两国共同宣布了珠穆朗玛峰的最新高度为海拔8848.86米。现有一张白纸的厚度大约是0.08毫米,对折一次,厚度变0.16毫米,再对折一次,厚度变为0.32毫米,……,每对折一次,其厚度均变为对折前的两倍,假设这张纸足够大,可以对折任意次,那么这张纸至少对折多少次后,其厚度将超过珠穆朗玛峰的高度?以下是求解以上问题的程序片段,请你补全代码:
请选择适当的代码填入程序①处。( )
A.while B.for C.output D.input
6.有如下程序段
s = Text1.Text
s1 = ""
For i = 1 To Len(s) \ 2
m = Mid(s, i, 1)
n = Mid(s, n - i + 1, 1)
If m > n Then
s1 = s1 + m + n
Else
s1 = s1 + n + m
Next i
Text2.Text = s1
在 Text1 中输入“8523691”,则执行该程序后,Text2 中输出的是( )
A.819562 B.8159823 C.815926 D.8195623
7.有如下程序,输入1101110后的运行结果为( )
s1=input(“请输入一串01组合”)
s2=len(s1)
s=0
for i in range(s2):
a=int(s1[i])
s=s*2+a
print(s)
A.110 B.111 C.220 D.110111
8.有如下对分查找程序段
#列表a存放整数升序数据,代码略
key=int(input())
f=[0]*9
i=0
j=8
while i<=j:
m=(i+j)//2
f[m]=1
if a[m]>key:
j=m-1
else:
i=m+1
print(f)
输入待查找数据,执行该程序段后,下列选项中,列表f的值不可能的是( )
A.[0, 0, 0, 0, 1, 1, 1, 0, 0] B.[1, 1, 0, 0, 1, 0, 0, 0, 0]
C.[0, 1, 0, 0, 1, 0, 1, 0, 0] D.[0, 0, 0, 0, 1, 0, 1, 1, 0]
9.有如下Python程序段:
m=3
1st=[7,3,4,3,1,6,3]
for i in range(len(lst) -1):
for j in range(len(lst) -1,i,-1):
if 1st[j] <1st[j-1]:
1st[j], 1st[j-1] = 1st[j-1], 1st[j]
break
执行该程序段,加框处语句被执行的次数是( )
A.3 B.4 C.5 D.6
10.有如下Python程序段:
s="VictoryOnTheWay"#'A'的ASCII值为65,"a"的ASCII码值为97
mx=""
pre=0
for i in range(1,len(s)):
if ord(s[i]) < 97:
if mx<s[pre:i]:
mx=s[pre:i]
pre=i
print(mx)
A.Victory B.On C.The D.Way
11.有如下Python程序段:
st=[0]*10
cnt,top=0,-1
s=input( )
for i in range(0,len(s),2):
t=s[i]
n=int(s[i+1])
if t=='A':
for j in range(n):
top+=1
st[top]=cnt
cnt+=1
elif t==’P’:
while top!=-1 and n>0:
top-=1
n-=1
print(st[0:top+1])
若输入s的值为"A1P2A3P2A2",则程序的输出结果是( )
A.[5,6] B.[2,5,6] C.[4,5] D.[1,4,5]
12.有如下Python程序段:
a=[["data1",1],["data2",2],["data3",- 1]]
head=0;pre=head
while a[a[pre][1]][1]!=- 1:
pre=a[pre][1]
a[pre][1]=- 1
p=head
while a[p][1]!=- 1:
print(a[p][0],end="->")
p=a[p][1]
print(a[p][0])
执行该程序段后,输出的结果是( )
A.datal->data2->data3 B.1->2->-1
C.datal->data2 D.datal
13.“不积跬步,无以至千里;不积小流,无以成江海。”每天进步一点点,一年后,你将进步很大:而每天退步一点点,一年后,你将落后很多。为完成两个励志公式1.01365≈37.8和0.99365≈0.03的计算,补充完善下面Python程序第6行划线部分的代码( )
(1)#计算1.01的365次幂,0.99的365次幂
(2)s1=1
(3)s2=1
(4)for i in range(365):
(5) s1=s1*1.01
(6) s2=________
(7)print("每天进步一点,365天后你将得到:",s1)
(8)print("每天退步一点,365天后你将得到:",s2)
A.0.99**365 B.s2*0.99 C.s2*1.01 D.1.01**365
14.如图所示,温岭新天地的“我在温岭很想你”成了网红打卡地。
规定字符串s的长度等于7时,被称为“超想你”;否则被称为“很想你”,例如“我在温岭很想你”字符串的长度为7,所以被称为“超想你”,在下面Python程序中,表达符合题意的是( )
A.
a=len(s)
if a==7:
print("超想你")
else:
print("很想你")
B.
a=len(s)
if a%7==0 and a>0:
print("超想你")
else:
print("很想你")
C.
a=len(s)
if a%7!==0 or a==0:
print("很想你")
else:
print("很想你")
D.
a=len(s)
b=[]*a
for i in rang(a):
b[i]=i
if b[6]==7
print("很想你")
else:
print("很想你")
A.A B.B C.C D.D
15.有如下Python程序段:
from random import randint
from math import sqrt
a=[0,0,0,0,0]
for i in range(5):
a[i]=randint(1,5)*2
n=0
while n<5:
for i in range(4,n,-1):
if a[i] < a[i-1] and int(sqrt(a[i]))!=sqrt(a[i]):
a[i],a[i-1]=a[i-1],a[i]
n+=1
print(a)
运行该程序段,输出的结果不可能是( )
A.[2,8,10,10,4] B.[6,8,10,4,10] C.[2,4,8,10,10] D.[6,8,6,4,8]
16.有如下Python程序段:
def guess(cur):
q=cur
p=a[cur][1]
while p!=-1:
if a[p][0]==a[cur][0]:
a[q][1]=a[p][1]
p=a[p][1]
else:
q=p
p=a[p][1]
a=[[1,3],[1,2],[2,4],[2,5],[4,-1],[3,1]]
head=0;cur=head
while a[cur][1]!=-1:
guess(cur)
cur=a[cur][1]
cur=head
while cur!=-1:
print(a[cur][0],end="")
cur=a[cur][1]
运行后,则输出的结果是( )
A.1234 B.1122 C.11223 D.11224
二、填空题
17.Python语言用于实现循环结构的语句有 语句和while语句。
18.阅读下列程序,写出运行结果。
s=1
for i in range (1,5):
s=s*i
print(s)
运行结果是:
19.阅读下处程序写出运行结果
有四个嫌疑人甲乙丙丁涉嫌偷盗,其中一人是小偷。甲说“不是我”,乙说“是丙” ,丙说“是丁”, 丁说“丙在冤枉我”。若他们中只有一人说了假话,请编程判断谁是小偷。(注:在Python运算中,True的值为1, Fa1se的值为0)运行输出结果是
20.阅读下列程序,写出运行结果。
程序运行后,输入:8
运行结果是:
21.阅读下列程序,写出运行结果
s = 1
for i in range(1,10,3):
s = s *iprint(s)
运行输出结果是:
22.阅读下列程序,写出运行结果
sum=0
for k in range(1,11):
if k%2==0:
sum=sum+k
print(sum)
程序运行后输出结果是: 。
三、判断题
23.下列Python程序段运行结束后,赋值语句sum=sum+i共被执行了9次。( )
24.for循环与while循环任何时候都不可以相互替换。( )
25.Do While循环也可以设置空循环或死循环。( )
四、操作题
26.有n(n>=3)级台阶,从底端向上爬到顶端,每次只能爬2级或者3级台阶,求从底端爬到顶端的方案数。
(1)当n=5时,方案数为 。
(2)用迭代法计算爬n级台阶的方案数,python程序如下:
n=int(input())
f0,f1,f2=1,0,1
for i in range(3,n+1):
____
f0,f1,f2=f1,f2,f3
print("爬n级台阶的方案数为",f3)
则划线处的代码为 。该段代码使用了 (填:递归或迭代)算法。
27.回文素数是一个既是素数又是回文数的整数。如果一个整数只能被1和本身整除,这个数就是素数。如果一个数从左向右和从右向左读是一样的,这个数就是回文数。
(1)实现判断回文素数的Python程序如下,请在划线处填入合适的代码。
def ss(i): #判断素数
for j in range(2,i):
if ① :
return False
return True
def hw(i): #判断回文数
x=i
k=0
while x!=0:
k=k*10+x%10
②
if k==i:
return True
else:
return False
n=int(input("请输入待检测数据范围:"))
for i in range(2,n+1):
if ③ :
print(i)
程序划线①处应填入的代码为 ;
程序划线②处应填入的代码为 ;
程序划线③处应填入的代码为 。
(2)本程序通过判断并输出回文素数,这种算法属于 (选填:“解析算法”或“枚举算法”)。
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.C
【详解】本题考查Python基础。第二个条件语句sc>=80前面缺少elif关键字,应该加上elif。最后一个条件语句没有对应的print语句的关键字,应该添加上else。故选择C。
2.A
【详解】本题考查循环结构。循环条件用于判断循环是否继续执行,当条件为真时,循环继续;当条件为假时,循环终止。故答案为:A。
3.B
【详解】本题考查循环结构。初始化s=0,k=1,i=1,如果i<32不成立则输出s,否则s=s+k*i,k=-k,i=i*2,接着判断i<32是否成立,依次类推。详细步骤如下:
初始化s=0,k=1,i=1;
1<32成立,s=1,k=-1,i=2;
2<32成立,s=-1,k=1,i=4;
4<32成立,s=3,k=-1,i=8;
8<32成立,s=-5,k=1,i=16;
16<32成立,s=11,k=-1,i=32;
32<32不成立,输出s=11。
故选项B正确。
4.C
【详解】本题考查循环与分支结构。在循环中,对字符串s中的每个字符进行了一系列的条件判断,并根据条件的不同进行了不同的字符处理。具体来说:如果字符是数字("0"到"9"之间)且位于奇数位置(i % 2 == 1),则将该数字替换为9减去该数字的结果。如果字符是大写字母且flag为True,则将该大写字母转换为相应的小写字母。其他情况下直接保留字符。最后,将处理后的字符拼接成新的字符串r,并输出。根据上述处理规则,逐个字符处理s中的字符,得到的结果为:"pyThoN2926"。故答案为:C。
5.A
【详解】本题考查的是Python的while循环。while语句格式:
当表达式的值为真时,执行循环体语句;当表达式值为假时,退出循环,执行循环体外的下一条语句(即while后面没有缩进的第一条语句)。当高度h小于珠穆朗玛峰的高度height,则继续对折,故本题应选A。
6.A
【详解】本题主要考查VB程序的执行。s=“8523691”,Len(s) \ 2=3,i=1时,m=8,n=1,满足m>n,s1=s1+m+n=“81”,i=2时,m=5,n=9,n>m,s1=s1+n+m=“8195”,i=3时,m=2,n=6,n>m,s1=s1+n+m=“819562”,程序结束,故执行该程序后,Text2 中输出的是819562,故本题选A选项。
7.A
【详解】本题主要考查Python程序的执行。分析程序可知,该程序实现将二进制数1101110通过“按权展开、逐项相加”的方法转换为十进制数110,故本题选A选项。
8.C
【详解】本题主要考查对分查找算法。变量m是依次查找的下标索引值,第一次循环,m=4,f[4]=1,根据二叉树查找规则,往后查找只会在m=4的左边或右边进行查找,不会出现选项C中f[1]和f[6]同时为1的情况,故本题选C选项。
9.C
【详解】本题主要考查Python程序的执行与调试。len(lst) -1=6,外层循环理论一共要执行6次,即加框处理论上执行6次,但当i=4时,lst已有序,循环结束,因此加框处语句被执行的次数是5。每次循环lst的变化:[1, 7, 3, 4, 3, 3, 6]→[1, 3, 7, 3, 4, 3, 6]→[1, 3, 3, 7, 3, 4, 6]→[1, 3, 3, 3, 7, 4, 6]→[1, 3, 3, 3, 4, 7, 6],故本题选C选项。
10.A
【详解】本题考查的是Python应用。阅读程序可知,从字符串s的i字母开始,如果是大写字母,并且mx<s[pre:i],则mx=s[pre:i],直到字符串s结束。s="VictoryOnTheWay",第一次碰到大写字母O,mx<s[pre:i]成立,mx=s[pre:i]="Victory";第二次大写字母W,"W">"Victory",不执行mx=s[pre:i],故最后输出:Victory。选项A正确。
11.D
【详解】本题主要考查Python程序的执行。分析程序可知,程序执行过程如下:
第一遍循环,i=0,t=s[0]='A',n=int(s[1])=1,内层for循环执行完,top=0,st[0]=0,cnt=1;
第二遍循环,i=2,t=s[0]='P',n=int(s[3])=2,内层while循环执行完,top=-1,n=1;
第三遍循环,i=4,t=s[0]='A',n=int(s[5])=3,内层for循环执行完,top=2,cnt=4,st[0]=1,st[1]=2,st[2]=3;
第四遍循环,i=6,t=s[0]='P',n=int(s[7])=2,内层while循环执行完,top=0,n=0;
第五遍循环,i=8,t=s[0]='A',n=int(s[9])=2,内层for循环执行完,top=2,cnt=6,st[0]=1,st[1]=4,st[2]=5;
循环结束,执行st[0:top+1]=[1,4,5],故本题选D选项。
12.C
【详解】本题主要考查Python程序的执行。第一个while循环执行完,pre=1,执行a[pre][1]=- 1,即a[1][1]=- 1,此时a=[["data1",1],["data2",-1],["data3",- 1]],p=head=0。第二个while循环当a[p][1]=-1时,循环结束,即输出前2个元素值,即datal->data2,故本题选C选项。
13.B
【详解】本题考查的是Python循环语句。range(365)生成0~364的整数列表,for循环依次把列表中的每个元素逐个迭代出来。由0.99365≈0.03可知,划线部分的代码应为s2*0.99。故本题应选B。
14.A
【详解】本题考查程序分析。根据题意字符串s长度为7,输出“超想你”,否则输出“很想你”。代码if a%7==0,指能被7整除,不符合题意,排除选项B和选项C。选项D中range(a),生成0到a-1数,若s长度为7,i值取到数字6,故不符合题意。故正确答案为选项A。
15.D
【详解】本题主要考查Python程序的执行与调试。 a[i]=randint(1,5)*2,a[i]随机生成2、4、6、8、10,如果a[i]不为4,且满足a[i]<a[i-1],则交换a[i]与a[i-1],即程序执行后,a中的元素除了4以外,其余元素呈升序状态,选项D中,前三个元素并未呈升序状态,故输出的结果不可能是[6,8,6,4,8],故本题选D选项。
16.A
【详解】本题考查的是Python循环与选择语句。阅读程序可知,利用循环和分支结构来输出a[cur][0],在列表中,通过循环可以得到值为:1234,故本题应选A。
17.for
【详解】本题主要考查Python循环结构。Python语言用于实现循环结构的语句有for语句和while语句。
18.24
【详解】本题主要考查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、4,故运行结果是:s=s*i=1*2*3*4=24。
19.丙
【详解】本题主要考查Python程序的执行。分析程序可知,通过for循环遍历所有的可能,当thief是丙时,满足if判断条件,即一人说了假话,三人说了真话,flag=3,故运行输出结果是丙。
20.3
【详解】本题考查的是Python循环语句。第一行,输入n=8,并转化为整型。第二行,cnt初始值为0,第三行,进入循环,循环条件为n>1、 n初始值为8,满足循环条件。第1次循环,cnt=1+1=1, 因为8%2==0所以执行第6行,n=8/2=4,满足循环条件;第2次循环, cnt=1+1=2, 4%2==0成立,执行第6行,n=4/2=2, 满足循环条件;第3次循环,cnt=2+1=3, 2%2==0成立,执行第6行,n=2/1=1, 不满足循环条件,跳出循环,执行第10行,输出cnt,即3
21.28
【详解】本题考查的是Python循环语句及range函数。range()函数格式:range(起始值,结束值,步长)。注意:结束值不包含;步长可省略,默认为1。range(1,10,3)生成的是列表[1,4,7]。故s=1*1*4*7=28。
22.30
【详解】本题考查的是Python循环语句。sum=0,变量i的范围是1~10,如果是偶数,则执行sum=sum+i,故程序执行完,sum=sum+i=0+2+4+6+8+10=30。
23.正确
【详解】本题考查的是Python循环与选择语句。range(1,20)生成1~19的整数,阅读程序可知,只有i为1~19的偶数,才执行赋值语句sum=sum+i。故一共被执行了9次。题干中说法正确。
【点睛】
24.错误
【详解】本题考查循环。for 循环和 while 循环是两种不同类型的循环结构,它们用于不同的情况,但它们通常可以相互替换。for 循环通常用于已知循环次数的情况,例如遍历一个列表或迭代器中的元素。while 循环通常用于未知循环次数的情况,即当某个条件为真时继续执行循环。在某些情况下,可以使用 for 循环来模拟 while 循环,反之亦然,但这通常需要额外的控制语句。故说法错误。
25.正确
【详解】本题考查循环。空循环代表循环体没有执行语句。死循环循环条件永远为true。故正确
26. 2 f3=f0+f1 迭代
【详解】本题考查Python程序。
(1)当 n = 5 时,爬楼梯的方案数是 2,因为可以选择以下两种方式爬到顶端:先爬 2 级,然后再爬 3 级,总共 2 步。直接爬 3 级,然后再爬 2 级,总共 2 步。故答案为:2。
(2)这段代码的目的是计算爬 n 级台阶的方案数,其中 f0 表示爬到第 n-3 级的方案数,f1 表示爬到第 n-2 级的方案数,而 f3 表示爬到第 n 级的方案数。由于每次只能爬 2 级或 3 级,所以爬到第 n 级的方案数等于爬到第 n-2 级和第 n-3 级的方案数之和。故答案为:f3=f0+f1。这段代码使用了迭代算法,它使用循环来计算爬 n 级台阶的方案数。故答案为:迭代。
27. i%j==0 x=x//10 ss(i) and hw(i)或ss(i)=True and hw(i)=True 枚举算法
【详解】本题主要考查Python程序的综合应用。(1)①若i能够被j所整除,则表示该数不是素数,因此返回False,故此处填i%j==0。②处是实现回文的目的,根据i生成一个倒序的数k,此处更新x的值继续循环,故填x=x//10。③处需要同时检查素数和回文数,因此必须调用两个自定义函数。故填ss(i) and hw(i)或ss(i)=True and hw(i)=True。(2)根据算法特点,将所有数据进行列举,因此属于枚举算法。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$