内容正文:
2.2 做出判断的分支
一、选择题
1.下列伪代码中体现出来的程序算法结构是( )
A.顺序结构 B.循环结构 C.选择结构 D.三种结构都有
2.智能停车场收费系统,远距离红外读卡器的有效读卡距离设置为10~20米,时速40公里及以下的车辆可以不停车读卡,用逻辑型变量x标记是否读卡成功,用dis表示车辆距离读卡器的距离,用v表示此时车辆的车速,则下列分支语句不正确的是( )
A.
if v>40 and dis<10 or dis>20:
x=True
else:
x=False
B.
x=False
if 10<=dis<=20 and v<=40:
x=True
C.
if dis<10 or dis>20:
x=False
elif v<=40:
x=True
else:
x=False
D.
if 10<=dis<=20:
if v<=40:
x=True
else:
x=False
else:
x=False
A.A B.B C.C D.D
3.下列标识符中合法的是( )。
A.i'm B._ C.3Q D.for
4.在Python中,下列关于if选择结构说法错误的是( )
A.if语句中可以没有else子句
B.同一级别的if语句中可以有多个else子句
C.同一级别的if语句中可以有多个elif子句
D.if选择结构可以多层嵌套
5.下列代码如果从键盘输入81,那运行结果是( )。
score=int(input("请输入分数:"))
if score<=100 and score>=00:
if score>=90:
print("优秀")
elif score>=75:
print("良好")
elif score>=60:
print("合格")
else:
print("不合格")
else:
print("分数不对")
A.运行不了,提示有错 B.良好 C.没有任何输出 D.良好分数不对
6.有如下Python程序段:
a=[5,2,7,10,17,25,42,66]
c=0
for i in range(2,len(a)):
if a[i-1]+a[i-2]==a[i]:
c=c+1
print(c)
运行程序后,输出的内容是( )
A.2 B.3 C.6 D.7
7.已知 18.5<=BMI<=24.9 为正常标准,某同学的BMI值存储在变量BMI中,编写程序判断该同学的身体状况信息,并保存到变量 result 中,则下列程序段无法实现该功能的是( )
A. B. C. D.
8.列表list1=[i for i in range(1,7)if i %2==0]中有( )个元素。
A.4 B.2 C.3 D.1
9.有如下程序段:
a=[[2,2,1],[8,0,4],[3,3,0],[6,-1,2],[8,1,-1]]
ans=head=3
p=a[head][2]
while p!=-1:
if a[ans][0] < a[p][0] :
ans=p
p=a[p][2]
print(ans,a[ans][0],sep=",")
则程序运行后,下列说法正确的是( )
A.链表数据值依次为2->8->3->6->8
B.程序输出结果为4,8
C.a[0][2]的值为1,双向链表a的头节点数据值为2
D.a[1][1]的值为0,双向链表a的尾节点数据值为8
10.费马平方和定理:质数能表示为两个平方数之和的充分必要条件是该质数被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)
11.有如下Python程序段:
s=input("输入字符串:")
n=len(s)
i=0;j=n-l
ans=" "
while i<n//2 and j>=n//2: -
if s[i]>=s[j]:
ans+=s[i];j-=l
elif s[i]<s[j]:
ans+=s[j];i+=l
print(ans)
执行该程序段,分别输入下列选项中的字符串,输出结果不为“ppp”的是( )
A."python" B."public" C."purple" D."bookshop"
12.在Python语言中, 以下程序运行后,输入“74”, 显示的结果是( )
c= int(input("评价输入测试成绩:"))
if c<70:
print("请继续努力")
elif c<80:
print("你很棒!")
elif c<=100:
print("你太棒了!")
else:
print("请输入正确的数据——")
A.请继续努力 B.你很棒! C.你太棒了! D.请输入正确的数据——
13.有一组正整数,要求对其中的奇偶数进行交换。交换后偶数在前,奇数在后,并保持相对顺序不变。将划线处的代码补充完整,正确的是( )
a=[5,10,21,7,24,14,9,11,36,37]
n=len(a) ;b=[0]*n
num=0;k=0
while k <10:
if ① :
b[num]=a[k]
num+=1
else:
②
k+=1
for j in range(n-num,n):
③
print(a)
A.①a[k]%2==1 ②a[k-num]=a[k] ③a[j]=b[j-n+num]
B.①a[k]%2==0 ②b[k-num]=a[k] ③a[j]=b[j+num]
C.①a[k]%2==0 ②a[k-num]=a[k] ③a[j]=b[j+num]
D.①a[k]%2==1 ②b[k-num]=a[k] ③a[j]=b[j-n+num]
14.有如下python程序段:
def fab(a,b):
if a%b==0:
return
elif a>b:
fab(a-b,b)
print(1,end="")
else:
fab(a,b-a)
print(2,end="")
fab(126,156)
程序运行后,输出的2的个数是( )
A.3 B.4 C.5 D.6
15.为优化英文字符串的存储空间,现规定:用一个字符和一个数值代替字符串中的连续升序段(相邻字符的ASCII码值增量为1)。例如输入字符串“abcmnk”,压缩后为“a3m2k1”。实现上述功能的Python 程序如下:
s=input("请输入字符串:")
n=len(s);flag=False;ans="";c=1
for i in range(0,n-1):
if (1) :
ans=ans+s[i]
flag=True
c=c+1
elif ord(s[i])+1!=ord(s[i+1]):
ans=ans+str(c)
flag=False
c=1
else:
c=c+1
if (2) :
ans=ans+str(c)
else:
ans=ans+s[i+1]+str(c)
print("压缩后的字符串为:",ans)
划线处可选语句有:
①flag=True ②flag=False
③ord(s[i])+1==ord(s[i+1]) and flag==False
④ord(s[i])+1==ord(s[i+1]) and flag==True 下列代码顺序正确的是( )
A.④① B.④② C.③① D.③②
16.有如下python程序段:
def ds (s, i):
if "a" <=s[i]<="z" :
s=s[:i]+s[i+1:]
elif "0" <=s[i]<="9" :
s=s[:i]+str((int(s[i])+6)%10)+s[i+1:]
return s
s="Yy23mm4";i=0
while i<len(s):
s=ds(s, i)
i+=1
print(s)
执行上述程序段后,s的值为( )
A."89mm0" B."Y89m0" C."Y29m0" D."y23m4"
17.有如下Python程序,当程序运行后输入15000,则程序输出结果为( )
salary=float(input())
if salary<=5000:
tax=0
elif salary<=7000:
tax=(salary-5000 )*0.1
elif salary<=10000:
tax=200+( salary-7000)*0.2
else:
tax=800+( salary-10000 )*0.4
print(salary-tax)
A.2800 B.2800.0 C.12200 D.12200.0
二、填空题
18.阅读程序代码,写出运行结果。
运行结果是: 。
19.某Python程序段如下:
def isdigit(x):
if "0" <= x <= "9":
return True
else:
return False
d = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
s = "1*8%6$3@0#19&0"
ans = ""
t = 0
for i in s:
if isdigit(i):
t = t * 10 + int(i)
else:
ans += d[t]
t = 0
print(ans)
运行该程序段,输出结果是
20.下面程序的运行结果为: ,
for num in range(2,10):
if num % 2==0 :
continue
print(num,end=”、”)
21.以下Python程序段的运行结果是 。
n = 36
s = 0
for i in [2,3,4,5,6,7,8]:
if n % i == 0:
s = s + 1
print (s)
22.以下Python程序运行后,当输入20时,输出结果是 。
三、操作题
23.用python编辑器打开“Y:\94”下的文件”判断BMI.py”,进行以下操作并保存结果.
(1) 请填空,完善该程序,实现功能,输入身高和体重,计算出体重指数BMI的值。体重计指数的计算方法:体重÷(身高*身高),说明:体重的单位为千克,身高的单位为米。
(2) 如果体重指数BMI范围是18.5-23.9,输出符合标准,否则不符合标准。
(3) 编写完成后,原名保存并关闭应用软件。
注:程序修改时,请把下划线及序号删除;不能删除注释语句。
#请删除序号及下划线,填写正确的代码,使程序完善。
height=float (( ) ("请输入你的身高(米):"))
weight=float (( ) ("请输入你的体重(千克):"))
BMI=
if :
print("你的体重指数BMI为:",BMI,"符合标准!")
else:
print("你的体重指数BMI为:",BMI,"不符合标准!")
24.判断身份证校验位是否正确
第一步:将身份证号码的第1位数字与7相乘;将身份证号码的第2位数字与9相乘;将身份证号码的第3位数字与10相乘;将身份证号码的第4位数字与5相乘;将身份证号码的第5位数字与8相乘;将身份证号码的第6位数字与4相乘;将身份证号码的第7位数字与2相乘;将身份证号码的第8位数字与1相乘;将身份证号码的第9位数字与6相乘;将身份证号码的第10位数字与3相乘;将身份证号码的第11位数字与7相乘;将身份证号码的第12位数字与9相乘;将身份证号码的第13位数字与10相乘;将身份证号码的第14位数字与5相乘;将身份证号码的第15位数字与8相乘;将身份证号码的第16位数字与4相乘;将身份证号码的第17位数字与2相乘。
第二步:将第一步身份证号码1~17位相乘的结果求和,全部加起来。
第三步:用第二步计算出来的结果除以11,这样就会出现余数为0,余数为1,余数为2,余数为3,余数为4,余数为5,余数为6,余数为7,余数为8,余数为9,余数为10共11种可能性。
第四步:如果余数为0,那对应的最后一位身份证的号码为1;如果余数为1,那对应的最后一位身份证的号码为0;如果余数为2,那对应的最后一位身份证的号码为X;如果余数为3,那对应的最后一位身份证的号码为9;如果余数为4,那对应的最后一位身份证的号码为8;如果余数为5,那对应的最后一位身份证的号码为7;如果余数为6,那对应的最后一位身份证的号码为6;如果余数为7,那对应的最后一位身份证的号码为5;如果余数为8,那对应的最后一位身份证的号码为4;如果余数为9,那对应的最后一位身份证的号码为3;如果余数为10,那对应的最后一位身份证的号码为2。
(1)如果身份证的前17位是34052419800101001,则该身份证的校验位是 。
(2)实现上述功能的代码如下,请在划线处填入合适的代码,使程序正常运行。
(3)实现上述功能的代码如下,但加框处代码有错,请改正。
def check(s):
s1=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
s2='10X98765432'
k=0
for i in ①:
k=k+int(s[i])*s1[i]
return
sfz=input('请输入身份证号:') ②
if t !=18:
print('位数有误,请重新输入!')
else:
if sfz[-1]=='x':
sfz=sfz[:-1]+"X"
if ③:
print('合法身份证号')
else:
print('非法身份证号')
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.C
【详解】本题考查程序结构。这段伪代码中,根据年龄的不同情况进行判断,选择执行不同的输出语句,这体现了选择结构(也叫分支结构),而整个过程是依次按条件判断执行,没有循环过程,也不存在先执行后面的语句再回头执行前面语句的情况,所以主要体现的是选择结构,答案选C。
2.A
【详解】本题考查分支语句。A选项中,当v>40且dis<10或dis>20时,x被设置为True,这与题目要求不符,应该是当车速v≤40且读卡距离在10到20米之间时读卡成功,即x=True,所以A选项不正确。故答案为:A。
3.B
【详解】本题考查标识符命名规则相关的知识点
标识符是由字母、下划线、数字组成,但不能以数字开头,且不能是关键字,不能含有特殊符号。故本题选B选项
4.B
【详解】本题主要考查Python选择结构。if语句中可以没有else子句;同一级别的if语句中可以有多个elif子句,但只有一个else语句;if选择结构可以多层嵌套,故本题选B选项。
5.B
【详解】本题主要考查Python多分支结构。从键盘输入81,满足条件75<=score<=90,输出“良好”,故本题选B选项。
6.B
【详解】本题主要考查Python程序的执行。分析程序可知,如果满足a[i-1]+a[i-2]==a[i],则执行c=c+1,即相邻3项,前两项和等于第三项,满足条件的有5+2=7,7+10=17,17+25=42,故c=3,故本题选B选项。
7.B
【详解】本题考查Python分支结构的应用。选项B中,当BMI<18.5时,会输出result="正常",显然错误,其余选项均可以实现该功能。故选B。
8.C
【详解】本题主要考查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)。list1=[i for i in range(1,7)if i %2==0]满足if条件的i有2、4、6,即一共有3个元素,故本题选C选项。
9.D
【详解】本题主要考查链表及Python程序。分析程序可知,a是双向链表,ans=head=3,故链表数据值依次为6->3->2->8->8;程序运行结束后,ans=1,a[ans][0]=8;a[0][2]的值为1,head=3,双向链表a的头节点数据值为6;a[1][1]的值为0,双向链表a的尾节点数据值为8,故本题选D选项。
10.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选项。
11.D
【详解】本题主要考查Python程序的执行。分析程序可知,比较字符串s左右两端的字符,其中比较小的一端进行移动并再次比较,将值大的字符拼接到变量ans中,选项D中,字符"b"、"o"、"o"、"k"均小于字符"p",因此输出的结果是"pppp",故本题选D选项。
12.B
【详解】本题考查的是Python多分支语句。输入“74”,不满足 c<70,满足c<80,执行 print(" 你很棒 !"),故显示的结果:你很棒!故本题应选B。
13.A
【详解】本题主要考查Python程序的综合应用。要求对其中的奇偶数进行交换。交换后偶数在前,奇数在后。该算法的思想是将偶数保存到列表a中,奇数保存到列表b中,最后再将列表b中的奇数并到列表a中偶数的后面。第一空判断a[k]是否为奇数,即a[k]%2==1。第二空如果a[k]是偶数则保存到列表a前面,即a[k-num]=a[k]。最后再把列表b并到列表a存放到偶数的后面,即a[j]=b[j-n+num],故本题选A选项。
14.C
【详解】本题考查Python程序执行与调试。fab(126,156)→执行fab(126,30),并输出2。fab(126,30)→执行fab(96,30),并输出1。fab(126,30)→执行fab(66,30),并输出1。fab(66,30)→执行fab(36,30),并输出1。fab(36,30)→执行fab(6,30),并输出1。fab(6,30)→执行fab(6,24),并输出2。fab(6,24)→执行fab(6,18),并输出2。fab(6,18)→执行fab(6,12),并输出2。fab(6,12)→执行fab(6,6),并输出2。fab(6,6)满足if判断条件,执行return。因此程序运行后,输出的2的个数是5。故选C。
15.C
【详解】本题主要考查Python程序的执行与调试。Flag初值为False,当第一次出现连续的升序段时,执行ans=ans+s[i],同时赋值flag为True,后续再出现连续升序段时,只需要执行else部分,c递增1即可,因此①处判断条件是ord(s[i])+1==ord(s[i+1]) and flag==False。此处if分支结构用于处理最后一个字符的情况,如果flag=False,则执行ans=ans+s[i+1]+str(c),即将最后一个字符和数字拼接到变量ans中,故此处if判断条件是flag=True,故本题选C选项。
16.C
【详解】本题考查Python程序的执行。分析程序,ds函数中,当字符s[i]是小写字母时,则在字符串s中跳过该字母,即删除该字符;当s[i]是数字时,该数字变为int(s[i])+6)%10,即循环后移6个单位。s="Yy23mm4",当i=0时,s=ds(s, i)="Yy23mm4";当i=1时,s=ds(s, i)="Y23mm4";当i=2时,s=ds(s, i)="Y29mm4";当i=3时,s=ds(s, i)="Y23m4";当i=4时,s=ds(s, i)="Y23m0",循环结束。因此执行上述程序段后,s的值为"Y29m0"。故选C。
17.D
【详解】本题考查的是Python分支语句。15000不满足<=5000,也不满足<=7000,也不满足<=10000,故执行tax=800+( salary-10000 )*0.4=800+(15000-10000)*0.4=800+2000=2800.0,salary-tax=15000-2800.0=12200.0。故本题应选D。
18.114
【详解】本题主要考查Python程序的执行。分析程序可知,该程序实现对列表data中的偶数进行求和赋给变量sum,故sum=sum+i=0+34+78=114,故运行结果是114。
19.BIGDAT
【详解】本题主要考查Python程序的执行。分析程序可知,依次从s中取出数字,将该数字作为索引从字符串d中取出对应的字母,s中的数字依次是1、8、6、3、0、19、0,因为最后一个数字0后面再无其他字符,故不会执行ans += d[t],对应d中的字符分别是B、I、G、D、A、T,故输出结果是BIGDAT。
20.3、5、7、9、
【详解】本题主要考查Python程序执行。分析程序可知,变量num的取值范围是2~9,如果num是偶数跳过本次,如果num是奇数,将num用顿号连接符连接打印显示出来,故程序的运行结果为3、5、7、9、。
21.4
【详解】本题主要考查Python程序执行。分析程序可知,变量s统计列表[2,3,4,5,6,7,8]中是36因子的个数,满足的数有2、3、4、6,故运行的结果是4。
22.20
【详解】本题考查的是Python选择语句。当输入20时,x=20,满足x%5==0,执行print(x),故输出20。
23. input input weight/(height* height) 18.5<=BMI<=23.9
【详解】本题主要考查Python程序的综合应用。①输入函数是input(),故此处填input。②同理此处使用input()函数输入体重,故此处填input。③体重计指数的计算方法:体重÷(身高*身高),故此处填weight/(height* height)。④如果体重指数BMI范围是18.5-23.9,输出符合标准,否则不符合标准,故此处if判断条件是18.5<=BMI<=23.9。
24. X range(0,17) t=len(sfz) check(sfz)==sfz[-1] s2[k%11]
【详解】本题主要考查Python程序的综合运用。①如果身份证的前17位是34052419800101001,校验码字符值计算如下:则该身份证的校验位是
189 Mod 11=2,查表得出校验码字符值a1为X。②此处是将身份证号码1~17位分别与加权因子相乘后并求和,赋给变量k,range(start, stop, [step]),start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束,但不包括 stop,故此处填range(0,17)。③此处判断身份证sfz的长度是否为18位,通过len函数可以求得字符串sfz的长度,用变量t保存,故填t=len(sfz)。④check(s)函数用来计算身份证s的校验码,判断身份证sfz最后一位与计算得到的校验码是否相等,故填check(sfz)==sfz[-1]。⑤变量s2保存校验码与余数对照表,余数是k%11,根据余数从变量s2中取出对应的校验码,故此处填s2[k%11]。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$