必修一 数据与计算 课时5 算法的控制结构(课件 教案)2027届高中通用技术一轮复习

资源下载
  1. 二一教育资源

必修一 数据与计算 课时5 算法的控制结构(课件 教案)2027届高中通用技术一轮复习

资源简介

课时5 算法的控制结构
【学业要求】
知识点 学业水平等级
掌握分支和循环控制结构的应用。 4
  控制结构是算法的基本要素,在明确计算对象和计算方式后,需要借助选择结构和循环结构来控制算法的流程。2023年1月卷的第13题、2023年6月卷的第13题和2024年6月卷第7题共3次考查了多分支选择结构和多个分支选择结构的区别。在一个程序设计题中,往往会用循环结构去遍历某个数据集,在遍历的同时,还会用选择结构和双重循环进行算法的流程控制。
1.某校组织“天天跳绳”活动,一周跳绳总积分(s)累计达到35分及以上为“达标”,结束跳绳;否则为“未达标”。每天跳绳(t)大于等于160个计10分,大于等于50个少于160个计5分,少于50个计0分。判断是否达标的部分流程图如图所示,(1)~(4)处可选表达式为:①s≥35 ②t≥50 ③t≥160 ④i>7 则(1)~(4)处表达式序号依次为(  )
A.④③②① B.①②③④
C.④②③① D.①③②④
答案 C
解析 本题考查算法的表示。(1)处Y分支输出“未达标”,说明应该是7天都计算完了,没有输出,因此条件为i>7。(2)若t大于等于50个,先计5分。(3)若还满足条件t≥160,再加5分,共计10分。(4)当条件s≥35成立,输出“达标”,并终止算法。
2.(2025年6月浙江选考)将7~12月的pH数据存储于列表data中,要求出一个最长连续序列,其中每个pH值均在正常范围内。如果这样的序列有多个,则选择数值总和最小的序列(若仍有多个,选择最早出现的),输出其长度和起始下标。实现上述功能的部分Python程序如下,请在划线处填入合适的代码。
#读入pH数据,按采集的时间顺序存储于列表data中,代码略
maxn=start=maxt=0
①     
while i  if 6<=data[i]<=8:
    total=0
    k=i
    while i      total+=data[i]
      i+=1
    ②     
    if n>maxn:
      maxn=n
      start=k
      maxt=total
    elif ③      :
      star=k
      maxt=total
  i+=1
#输出最长连续序列的长度maxn和起始下标start,代码略
答案 ①i=0 ②n=i-k
③n==maxn and total解析 本题考查循环控制结构和多分支选择的算法实现。①指针i从0开始遍历列表data各个元素,因此需对i赋初值为0。②当条件i1.通过算法让计算机解决问题时,    、运算及控制结构就成为算法的要素。
2.用算法解决问题时,必须明确参与运算的初始数据、运算时产生的中间数据以及代表问题解决的    数据。
3.在对数据进行运算时,必须明确每一步的    是什么、对哪些数据进行运算等。例如,在洗衣机的控制算法中必须包含“洗涤时间的计时”“漂洗次数的统计”以及“判断加水是否到达50升”等运算。
4.控制结构用于指定操作或步骤的执行顺序。常见的控制结构包括顺序结构、    结构(如if-else语句)、    结构(如for循环、while循环)等。通过这些控制结构,算法能够处理复杂的问题,按照预定的逻辑流程逐步解决问题。
5.一个分支或循环结构可以某个功能模块,把整个结构看成是一条语句,一个程序可以理解为多条语句组成的顺序结构。
6.分支结构也称为    结构,分为    分支结构、    分支结构和    分支结构。也可以由多个分支的组成多条个选择结构,也可以分支结构内部嵌套一个或多个分支结构。
7.多分支选择结构有    个选择条件,从上往下依次检测条件是否成立,若成立执行下方语句后,分支结构只可能执行其中    个步骤,在else语句中也可能包含多个条件,若没有else语句,则满足多个条件但不作任何操作。
8.for循环称之为“取值循环”,其格式为for<循环变量>    <序列>:。遍历序列中的所有元素,循环次数取决于in后包含的值的个数。序列可以是    串、    和字典,也可以是range()函数产生的序列。
9.range函数的功能是产生一个    数列,格式range (start,stop,step),含义和字符串或列表切片类似。
10.while循环又叫条件循环,中文意思为当...的时候。顾名思义,当条件    的时候做什么事情。
11.循环结构中途可以结束当次循环或结束循环。    语句,结束并退出当前层循环,    语句,结束当前次循环,进入下一次循环。
12.若循环体中没有break语句,当循环结束后,可以执行    部分的语句。
13.循环语句 for i in range(0,n):和i=0;while i14.注意循环结构和选择结构的区别。如if i in u 和for i in u。选择结构语句只执行    次,判断的结果为真或假。循环结构依次取出集合中每个元素,循环的次数取决于集合中元素的    。
自我校对:1.数据 2.结果 3.运算 4.选择 循环 6.选择 单 双 多 7.多 一 8.in 字符 列表 9.等差 10.满足 11.break continue 12.else 13.n-1 n 14.一 个数
【典例1】 象限是平面直角坐标系(笛卡尔坐标系)中横轴和纵轴所划分的四个区域,每一个区域叫作一个象限。象限以原点为中心,x,y轴为分界线,原点和坐标轴上的点不属于任何象限。某同学根据输入的坐标点(x,y)来判断该坐标点的位置所在,以下实现该分类的Python程序段中正确的是(  )
A.if x==0 and y==0:result="原点"
if x==0 or y==0:result="数轴"
if x!=0 and y!=0:
  result="象限"
B.if x==0 or y==0:result="数轴"
if x==0 and y==0:
  result="原点"
else:
  result="象限"
C.if x!=0 and y!=0:
  result="象限"
if x==0 or y==0:
  result="数轴"
else:
  result="原点"
D.if x!=0 and y!=0:result="象限"
if x==0 and y==0:result="原点"
if x==0 or y==0:
  result="数轴"
思维点拨
明考向 本题考查Python基本控制结构。(0,0)是原点,即if x==0 and y==0表示原点;(0,y)或者(x,0)分别表示y轴与x轴
精点拨 A x==y==0时,第1个和第2个if均成立
B if x==0 or y==0且x与y不同时为0表示数轴,在第2个分支语句中,再次判断为"象限"
C 条件x!=0 and y!=0成立,判断为"象限",在第2个分支语句中,再次判断为"原点",因此原点的判断需在数轴之前
D 分三种情况,用3条分支语句来表达这种情况
答案 D
【变式1】 用Python语句描述城市主干道中机动车平均行驶速度v不低于30为畅通,小于20为堵塞,其余为拥挤,设v为机动车平均行驶速度(单位:km/h),则下列选项正确是(  )
A.if v>=30:
   print("畅通")
 elif v<30:
   print("拥挤")
 else:
   print("堵塞")
B.if v<20:
   print("堵塞")
 elif v>20:
   print("拥挤")
 else:
   print("畅通")
C.if 20<=v<30:
   print("拥挤")
 elif v>=30 and v<20:
   print("堵塞")
 else:
   print("畅通")
D.if v>=20:
 if v<30:
   print("拥挤")
 else:
   print("畅通")
 else:
   print("堵塞")
答案 D
解析 本题考查分支控制结构。A选项v<30中包含了堵塞和拥挤,不能区分。B选项在v>20中包含了畅通和拥挤,不能区分。C选项条件v>=30和v<20不可能同时满足。D选项先分为大于等于20和小于20的情况,再在大于等于20中区分拥挤和畅通。
【典例2】 运动会计分规则:根据已有名次计算前8分的得分,第1名至8名分别计9,7,6,5,4,3,2,1分,第8名之后计0分。将n位学生的排名依次存储在rank[0]至rank[n-1]中,计算每位学生的得分score的部分程序段如下,将空白处填写完整。
score=[0]*n
for i in①    :
 if rank[i]==1:
  score[i]=9
 ②    :
  score[i]=9-rank[i]
思维点拨
明考向 本题考查算法的控制结构
精点拨 ①从条件rank[i]==1,循环变量i是rank的下标,将n位学生的排名依次存储在rank[0]至rank[n-1]中,因此需遍历rank数组。②第2名至第8名的得分为9-rank[i],第9名之后得分为0,若用9-rank[i]计算得分,可能得到负数
答案 ①range(len(rank))或range(n)
②elif rank[i]<=8
【变式2】 纸牌5张及以上的连续单牌(不分花色)称为顺子,顺子最大到K,如“3,4,4,4,5,5,6,7,8”是长度为 6 的顺子。读取升序排列若干张牌,求最长的顺子。程序代码如下,请补充完整。
a=[3,3,4,4,4,6,7,7,9,9,9,10,11,11,12,13]
m=0
count=1
for i in ①    :
 if a[i]==a[i-1]+1:
   count+=1
 ②    :
   if count>m:
    m=count
   count=1
if count>m:
 m=count
print("最长顺子为",m)
答案 ①range(1, len(a)) ②if a[i]>a[i-1]+1或elif a[i]!=a[i-1]+1或其他等价答案
解析 本题考查算法的控制结构。①相邻两张牌a[i]和a[i-1]进行比较,因此i的初值为1,终值为len(a)-1。②根据牌面情况,可以分为3种情况,一是前后两张牌相差为1,此时count值增加1,二是前后两张牌相差大于1,此时要统计count的最值。三是两张牌相等,此时不用任何操作。
  算法=逻辑+控制,这是Pascal设计者Niklaus Wirth的一本著作的书名,它刻画了过程式尤其是结构化编程的思想。控制指的是程序设计中顺序、选择和循环三种基本控制结构。分支结构分为单分支结构、双分支结构和多分支结构,而分支结构的组合可以分为多个分支语句和分支的嵌套。多分支结构和多个分支语句的区别在于多分支结构只执行其中一个判断条件,而多个分支语句依次执行每个分支结构语句。遍历是算法最核心的思想,往往用循环结构来实现。可以按位置遍历,如 for i in range(20);也可以按元素进行遍历,如for i in [3,2,1,7]。用while语句往往实现满足某个条件时的遍历。
1.为实现按表中分数段进行等级划分,以下代码正确的是(  )
分数x x≥90 80≤x<90 x<80
等级level A B C
A.if x>=90:
   level="A"
 if x>=80:
   level="B"
 if x<80:
   level="C"
B.if x<80:
   level="C"
 elif:
   if x>=90:
    level="A"
   level="B"
C.level="A"
 if x>=80:
   level="B"
 else:
   level="C"
D.level="C"
 if x>=80:
   level="B"
 if x>=90:
    level="A"
答案 D
解析 A选项多个分支结构,条件x>=80包括了第一个分支结构的情况。B选项elif后面未添加条件,语法错误。C选项不可能出现level='A'的情况。
2.如下Python程序段中,实现功能与其它三个不一样的是(  )
A.flag=a>b
B.if a>b:
   flag=True
 else:
   flag=False
C.flag=True
 if a<=b:
   flag=False
D.if a<=b:
   flag=False
 flag=True
答案 D
解析 ABC选项实现若条件a > b成立,flag的值为True,否则为False。D选项无论a <= b是否成立,flag的值均为True。
3.如下程序实现的功能为去除字符串中的重复字符,对于重复出现的,仅保留首次出现位置的字符。
s=input("输入字符串")
i=1;j=len(s)
while ①    :
  if s[i] in s[:i]:
    s=s[:i]+s[i+1:j]
    j=len(s)
    ②   
  i+=1
print("去重后字符串:",s)
划线处应填的正确代码为(  )
A.①i<=j ②i-=1 B.①iC.①i<=j ②j-=1 D.①i答案 B
解析 语句s=s[:i]+s[i+1:j]的功能是去除字符串中索引位置i的字符。变量i指向去重后的最后一个索引位置,其初值为1,即至少要保留s[0]。当条件s[i] in s[:i]成立时,表示与后面有重复,去除后,还要再次检验新的索引位置i上字符是否有重复,因此②处为语句i-=1。变量j的值更新为len(s),因此当去重最后位置为len(s)-1时结束算法,因此①处为语句i4.编写一个计算字符串中最多连续相同字符个数的Python程序段如下:
s=input("请输入字符串:")
k=1;maxlen=0
for i in range(1,len(s)):
 if s[i]==s[i-1]:
   k=k+1
 else:
   if k>maxlen:
    maxlen=k
 k=1
print("最多连续相同字符个数为:",maxlen)
用以下输入数据测试该程序段,能测出程序错误的是(  )
A.AAABBCCD B.AABBBCDD
C.AABCCCDD D.ABBCCDDD
答案 D
解析 遍历字符,当相邻两个字符相同时k累计相同字符个数,相邻字符不同时才会进入else比较和更新最多连续相同字符个数,因此当最多连续相字符个数出现在最后时,将无法正确记录。D选项ABBCCDDD最多连续相同字符是DDD,个数为3,但按照代码运行最多连续相同字符个数为2。
5.(2026年1月浙江选考)有如下 Python 程序段:
c,i="", 0
while i=0:
  if s[i] == "e":
    t-=1
  else:
    c+=s[i]
  i+=1
若s为"keeper",t为2,执行该程序段后,c的值为 (  )
A."k" B."kp"
C."kpr" D."kper"
答案 B
解析 本题考查循环控制结构和字符串的遍历。变量i从索引0开始遍历字符串s,若遍历到的字符s[i]是"e",则变量t的值减去1,否则将字符s[i]连接到变量c中,直到遍历完字符串s并且变量t的值小于0。t的初值为2,若要减小到小于0,必须要遍历到3个"e",因此在此之前连接的字符串为"kp"。
6.以下程序实现与计算机玩“石头剪刀布”的游戏(分别用0,1,2代表石头、剪刀、布),游戏规则为:石头赢剪刀、剪刀赢布、布赢石头。代码如下:
import random
pc=random.randint(0,2)
player=int(input("请输入石头(0)、剪刀(1)、布(2):"))
if      :
  print("你赢了,恭喜!")
elif player==pc:
  print("平手")
else:
  print("你输了,再接再厉!")
解决该问题,上述程序划线处填入语句正确的是(  )
A.pc>player
B.pcC.pc-player==1 and player-pc==2
D.pc-player==1 or player-pc==2
答案  D
解析 本题考查多分支选择结构。你赢的可能性有3种,一是石头对剪刀,二是布对石头,三是剪刀对布,其中前2种可能中,pc-player==1,第3种可能性中,player-pc==2。
7.输入一个小于10万的正整数金额,转换成相应的大写人民币形式。例如:“1336”转为“壹仟叁佰叁拾陆元整”。金额中包含 0 时输出规则如下:
①金额数字中间有 0 时省略相应位置的“拾”,“佰”,“仟”;
②金额数字中间有连续多个 0 时,只需保留一个“零”;
③金额数字末尾是 0 时,省略“零”。
(1)输入数字“1207”转化成大写是     。
(2)算法一:将输入的金额作为字符串来处理,从高位数字开始转换,最后一位数字单独处理,请将空白处填写完整。
sn="零壹贰叁肆伍陆柒捌玖拾佰仟萬"
s=input("输入一个大于0但小于10万的正整数:")
ans=""
for i in ①    :
  t1=int(s[i])
t2=int(s[i+1])
  if t1!=0:
   jedx=sn[len(s)-2+10-i]
   ans+=sn[t1]+ jedx
 ②     :
   ans+=sn[0]
t1=int(s[-1])
if t1!=0:
  ans+=sn[t1]
print("转换的大写形式为:"+ans+"元")
(3)算法二:将输入的金额作为整数处理,从个位数字开始处理,请将空白处填写完整。
n=int(input("请输入一个正整数:"))
s1="零壹贰叁肆伍陆柒捌玖"
s2="元拾佰仟萬"
res="" ;c=0
flag=True
while ①    :
  if n % 10!=0:
   res=s1[n%10]+s2[c]+res
   flag=True
  ②    :
   res='零'+res
   flag=False
  c+=1
  n∥=10
if res[-1]=='零': #处理最后一位数字是零的情况
  res=res[:-1]+'元'
print(res+'整')
答案 (1)壹仟贰佰零柒元整
(2)①range(len(s)-1) ②elif t2!=0
(3)①n>0 ②elif flag
解析 本题考查算法控制结构。(1)略。(2)①从高位数字开始转换,最后一位数字单独处理,因此从下标0开始遍历到倒数第二位。②连续获取两个数字,有3种可能,一是第1位不为0,二是第1位为0,但第2位不为0,三是两个数字均为0。第3种可能性时,不加任何处理,如果条件t1!=0不成立,第2位不为0,需加一个零。(3)①表达式n % 10取出个位数,语句n∥=10去除个位数,因此当n大于0时,需不断地循环计算。②连接一个零后,flag 的值为False,不能再添加连续的0,因此只有当flag为True时,才可以添加零。
8.某园区从8点钟开始记录每分钟的进出园区人数,当人流量超过某个阈值td时,将发生预警信号,闭园后,统计超过阈值的总持续时间ans,编写相关的程序实现该功能,请将空白处填写完整。
#读取阈值人数,存储到变量td中
cnt,ans=0,0
t=-1
for tim in range(480,1021):
 #变量tim存储8点到17点之间的分钟数
 #读取当前时间的入园和出园人数,存储在数组dou[0]至dou[1]中,代码略
 cnt+=dou[0]- dou[1]
 #统计当前时间的在园区人数
 if ①      :
    if t==-1:
     t=tim
     #发出预警信号,代码略
 elif t>-1:
    ②      
    t=-1
    #取消预警信号,代码略
#输出超过阈值的总持续时间ans,代码略
答案 ①cnt>td ②ans+=tim-t
解析 ①cnt为当前时间在园区人数,若人数第1次超出阈值td,则记录超过阈值开始时间。t的初值若为-1,表示当前时间前一分钟人数未超出阈值,将当前时间tim设置为超过阈值开始时间。若t的值不为-1,则不进行任何操作。②当条件cnt>td不成立时,表示持续超出阈值的时间段结束,用tim-t计算持续的时间,并累加到ans中。
1.用Python语言实现“每满100减30,每满200减70,可以累计上不封顶”的优惠金额计算,设s为购买商品的原价,计算优惠金额t,下面选项正确的是(  )
A.t=s∥200*70
 if s%200>100:
   t=t+30
B.t=s∥100*30
 if s∥200>0:
   t+=s∥200*70
C.if s>=200:
   t=s∥200*70
 else:
   t=s∥100*30
D.if s>=100:
   t=t∥100*30
 else:
   t=t∥200*70
答案 A
解析 优先计算“满 200”优惠的额度,不足 200 的,按“满 100”的计算。不足 200 部分可用 s%200 计算而得。
2.已知某同学的BMI值存储在变量X中,小蓝编写程序判断该同学的身体状况信息,并保存到变量Y中,则下列程序段无法实现该功能的是(  )
A.Y="偏瘦"
 if X>=18:
   Y="正常"
 elif X>24:
   Y="偏胖"
B.Y="偏胖"
 if X<18:
   Y="偏瘦"
 elif X<24:
   Y="正常"
C.if X>24:
   Y="偏胖"
 elif X>18:
   Y="正常"
 else:
   Y="偏瘦"
D.if 18<=X<=24:
   Y="正常"
 else:
   Y="偏瘦"
   if X>18:
    Y="偏胖"
答案 A
解析 本题考查 Python分支结构基本语法。A 选项只要变量 X 的值大于等于 18,输出结果均为“偏胖”,与题干要求不符。
3.有如下Python程序段:
list=[2,1,3,4,5,7,12,14,26,37,63]
c=0
for i in range(2,11,2):
 if list[i-2]+list[i-1]==list[i]:
  c+=1
print(c)
该程序段运行结果为(  )
A.2 B.4
C.6 D.8
答案 B
解析 本题考查数组元素的遍历。从索引号为2的数组元素开始,统计当前元素是否是前面2个元素之和的个数。
4.在传递信息的过程中,通常会将一些敏感信息进行加密,以下是对数据进行加密的Python程序段,若输入数据为“my789”,则输出的内容为(  )
s=input("输入明文:")
t=""
for ch in s:
 if "0"<=ch<="9":
   x=int(ch)+3
   if x>=10:
    x=x%10
   ch=str(x)
 t=t+ch
print (t)
A.my123 B.my012
C.pa012 D.pa123
答案 B
解析 本题考查读取Python程序的能力。逐个访问字符串将其中的数字加3,如果该数大于等于10,对结果进行除10取余。
5.某Python代码如下,执行后输出的结果是(  )
count=0
L=["apple","banana","pear","orange","peach","strawberry"]
for i in [1,5,2]:
 count+=len(L[i])
print(count)
A.12 B.16
C.20 D.22
答案  C
解析 本题考查循环结构和列表的索引。i的值依次为1,5,2,取出"banana""strawberry"和"pear" ,长度之和为20。
6.有Python程序如下。
lst= [1,6,2,9,3,5,2]
k,s=1,0
m=len(lst)∥2
for i in range(m):
  s+=lst[m+k]-lst[m-k]
  k+=1
print(s)
运行该程序,输出结果是(  )
A.1 B.-1
C.14 D.-14
答案 A
解析 本题考查列表的遍历。m=len(lst)∥2,是中间位置3。m+k 和m-k表示中间两侧对称的索引号。循环3次,依次是3-2,5-6,2-1,把这些差值进行累加。
7.有如下程序段:
s=input("请输入字符串:")
count=0
for i in s:
 if i>="0" and i<="9":
   count=count+1
print(s[count:count+3])
若输入的字符串为"AB12CCC222GGBD",则程序运行结果为(  )
A.CCC B.GGBD
C.CC2 D.C22
答案 C
解析 本题考查字符统计处理及列表切片的相关知识。前面程序统计字符串中数字个数为5,列表切片从索引号5到7(8为截止不取)取三个。
8.有如下Python程序段:
ch="2nd-ucDOSy3t"
res=""
for i in range(len(ch)):
 if "a" <=ch[i]<="z":
   res=res+ch[i]
print(res)
该程序段的功能是输出字符串ch中的(  )
A.所有小写字母   B.小写字母的个数
C.所有数字之和 D.所有非数字字符
答案 A
解析 本题考查range函数的使用以及程序基本代码的阅读能力。根据range函数的参数,是从字符串ch中从索引0开始,依次取出下标为0、1、2……位置的字符,如果字符是小写,将它顺序依次拼接到字符串res中。所以答案为A。
9.有如下Python程序段:
a=[1,5,9,2,6,8,3,4,7]
n=0;flag=False
if a[0] flag=True
for i in range(len(a)-1):
 if a[i]   n+=1;flag=False
 elif a[i]>a[i+1] and flag==False:
   flag=True
print(n)
执行上述程序段后,输出的值为(  )
A.1 B.2
C.3 D.4
答案 C
解析 本题考查程序控制结构。程序的功能是计算上升序列的个数。遍历数组a,若当前位置元素比后面元素小,且falg的值为True,则对n进行计数,同时将flag的值设置为False。若当前位置元素比后面元素大,设置falg的值为True。
10.某些数据中存在“数字山峰”,例如数据“21432748”中存在“1432”、“274”两座“数字山峰”(必须包含上坡与下坡),下面程序用于求数据中“数字山峰”的数量:
num=input("请输入数字串:");c=0
(1)   
for i in range(1,len(num)):
 if (2)     and f==False:
   f=True
 elif (3)     and f==True:
   c=c+1
   f=False
print("有",c,"座数字山峰")
方框(1)(2)(3)的代码由以下部分组成:
①f=True ②f=False ③num[i-1]>num[i] ④num[i-1]下列选项中代码顺序正确的是(  )
A.①③④ B.①④③
C.②③④ D.②④③
答案  D
解析 变量f表示是否是上坡的标志,初值False表示未找到上坡,变量i从1开始遍历,当找到第1个num[i]大于num[i-1],表示找到了上坡,将f设置为True。若状态为上坡,当找到第1个num[i]小于num[i-1]时,表示找到了下坡,变量c进行计数,同时将f的设置为False,在此状态下,即使出现多个num[i]小于num[i-1]时,也不会计数。
11.某次测试的答题结果存储在asht.txt文件中,该文件每行记录1个考生10道单选题的答案,每题有A,B,C,D四个选项,空白的答案标记为'K'。评分标准:正确得3分,错误得-1分,空白得0分。实现评分的Python程序如下。
ANS='ACBBCDADBC' #ANS 为标准答案
score=[]
for line in open('asht.txt','r'):
  score.append(0)
  i=len(score)-1
  j=0
  while j    if ①      :
     score[i]+=3
    elif line[j]!='K':
     ②      
    j+=1
print(score)
(1)若标准答案为:'ACBBCDADBC',则答案'ACBBDDADKC'的得分为    。
(2)完善上述①②处代码。
答案  (1)23 (2)①line[j]==ANS[j]
②score[i]-=1
解析 本题考查顺序查找算法。line表示asht.txt文件中每一条记录,每条记录有10道单选题答案。语句score.append(0)表示每读取一条记录,该列表增加一个值为0的元素,i表示score列表中最后一个元素的索引值。j初值为0,终值为len(ANS)-1,表示在标准答案中比对当前记录中答案,如果line[j]==ANS[j]表示当前答案与标准答案一致,得3分,不正确将扣1分。
12.在一个包含数字和其他非数字字符混合的原始数据中,提取其中的连续数字,当数据中存在多个数字串,以“,”间隔不同数字串。如字符串China86USA0HK852中包含86,0,852三个数字串。部分程序段如下,将空白处填写完整。
(1)算法一:用变量t存储临时取得的数字串
s="China86USA0HK852"
t="";ans=""
for i in s:
 if "0" <=i<="9":
  t= t+i
      :
  ans+=t+","
  t=""
if t=="":
 print("提取的数字有:"+ans[:-1])
else:
 print("提取的数字有:"+ans+t)
(2)算法二:用变量t存储临时取得的数字串的个数
s="China86USA0HK852"
t=0;ans=""
for i in range(len(s)):
 if "0" <=s[i]<="9" :
  t= t+1
      :
  ans+=s[i-t:i]+","
  t=0
if t==0:
 print("提取的数字有:"+ans[:-1])
else:
 print("提取的数字有:"+ans+s[i-t+1:])
(3)算法三:用标志变量flag存储是否是字母后第1个数字
s="China86USA0HK852"
flag=False;t="";ans=""
for ch in s:
 if "0" <=ch<="9":
  t+=ch;flag=True
 elif flag:
  ans+=t+","
  t="";flag=False
if     :
 print("提取的数字有:"+ans[:-1])
else:
 print("提取的数字有:"+ans+t)
(4)算法四:用双重循环来遍历整个字符串,变量j记录数字串的开始位置。
s="China86USA0HK852"
ans=""
i=0
while i j=i
 while     :
  i+=1
 if i-j>0:
  ans+=s[j:i]+","
 i+=1
print("提取的数字有:"+ans[:-1])
(5)算法五:用双重循环来遍历整个字符串,变量j记录数字串的结束位置。
s="China86USA0HK852"
ans=""
i=0
while i j=i
 while j   j+=1
 if j-i>0:
   ans+=s[i:j]+","
     
print("提取的数字有:"+ans[:-1])
答案 (1)elif len(t)>0或elif t!=""
(2)elif t>0 (3)not flag
(4)i解析 本题考查算法的控制结构。遍历字符串s,可能会出现3种情况,一是数字,二是数字后的第1个字母,三是字母,但位置不是数字后面第1个。当遍历到数字时,需记录临时数字串的内容,或者数字串的开始位置、数字串的长度,但还不能确定数字串是否结束。遍历到数字后面第1个字母,或者结束位置是字母时,可以取出数字串。第3种情况是无需任何处理。(1)当临时字符串t不为空时,表示已经取出数字串,取出数字串后,立即初始化为空。(2)当t不为0时,表示已经取出字符串。(3)当flag的值为False,直接输出结果。否则还要连接最后一次取得的数字。(4)从条件i-j>0来看,i-j表示取得数字串的长度,变量i表示已经不是数字的位置,即数字串结束后的第1个位置。变量j数字串的开始位置。如果当前位置i是数字,继续向后遍历,但要注意边界。(5)由于当前位置j是字母,下次可以从当前位置j向后遍历。(共69张PPT)
必修一 数据与计算
课时5 算法的控制结构
知识点 学业水平等级
掌握分支和循环控制结构的应用。 4
目 录
CONTENTS
真题剖析
01
知识梳理
02
课堂突破
03
当堂检测
04
课后作业
05
真题剖析
1
  控制结构是算法的基本要素,在明确计算对象和计算方式后,需要借助选择结构和循环结构来控制算法的流程。2023年1月卷的第13题、2023年6月卷的第13题和2024年6月卷第7题共3次考查了多分支选择结构和多个分支选择结构的区别。在一个程序设计题中,往往会用循环结构去遍历某个数据集,在遍历的同时,还会用选择结构和双重循环进行算法的流程控制。
1.某校组织“天天跳绳”活动,一周跳绳总积分(s)累计达到35分及以上为“达标”,结束跳绳;否则为“未达标”。每天跳绳(t)大于等于160个计10分,大于等于50个少于160个计5分,少于50个计0分。判断是否达标的部分流程图如图所示,(1)~(4)处可选表达式为:①s≥35 ②t≥50 ③t≥160 ④i>7 则(1)~(4)处表达式序号依次为(  )
A.④③②①        B.①②③④
C.④②③①        D.①③②④
C
解析 本题考查算法的表示。(1)处Y分支输出“未达标”,说明应该是7天都计算完了,没有输出,因此条件为i>7。(2)若t大于等于50个,先计5分。(3)若还满足条件t≥160,再加5分,共计10分。(4)当条件s≥35成立,输出“达标”,并终止算法。
2.(2025年6月浙江选考)将7~12月的pH数据存储于列表data中,要求出一个最长连续序列,其中每个pH值均在正常范围内。如果这样的序列有多个,则选择数值总和最小的序列(若仍有多个,选择最早出现的),输出其长度和起始下标。实现上述功能的部分Python程序如下,请在划线处填入合适的代码。
#读入pH数据,按采集的时间顺序存储于列表data中,代码略
maxn=start=maxt=0
①__________
while i  if 6<=data[i]<=8:
    total=0
    k=i
    while i      total+=data[i]
      i+=1
    ②__________
    if n>maxn:
      maxn=n
      start=k
      maxt=total
    elif ③____________:
      star=k
      maxt=total
  i+=1
#输出最长连续序列的长度maxn和起始下标start,代码略
答案 ①i=0 ②n=i-k ③n==maxn and total解析 本题考查循环控制结构和多分支选择的算法实现。①指针i从0开始遍历列表data各个元素,因此需对i赋初值为0。②当条件i知识梳理
2
1.通过算法让计算机解决问题时,_______、运算及控制结构就成为算法的要素。
2.用算法解决问题时,必须明确参与运算的初始数据、运算时产生的中间数据以及代表问题解决的________数据。
3.在对数据进行运算时,必须明确每一步的________是什么、对哪些数据进行运算等。例如,在洗衣机的控制算法中必须包含“洗涤时间的计时”“漂洗次数的统计”以及“判断加水是否到达50升”等运算。
4.控制结构用于指定操作或步骤的执行顺序。常见的控制结构包括顺序结构、________结构(如if-else语句)、________结构(如for循环、while循环)等。通过这些控制结构,算法能够处理复杂的问题,按照预定的逻辑流程逐步解决问题。
数据
结果
运算
选择
循环
5.一个分支或循环结构可以某个功能模块,把整个结构看成是一条语句,一个程序可以理解为多条语句组成的顺序结构。
6.分支结构也称为________结构,分为________分支结构、________分支结构和________分支结构。也可以由多个分支的组成多条个选择结构,也可以分支结构内部嵌套一个或多个分支结构。
7.多分支选择结构有________个选择条件,从上往下依次检测条件是否成立,若成立执行下方语句后,分支结构只可能执行其中________个步骤,在else语句中也可能包含多个条件,若没有else语句,则满足多个条件但不作任何操作。
选择





8.for循环称之为“取值循环”,其格式为for<循环变量>________<序列>:。遍历序列中的所有元素,循环次数取决于in后包含的值的个数。序列可以是________串、________和字典,也可以是range()函数产生的序列。
9.range函数的功能是产生一个________数列,格式range (start,stop,step),含义和字符串或列表切片类似。
10.while循环又叫条件循环,中文意思为当...的时候。顾名思义,当条件________的时候做什么事情。
11.循环结构中途可以结束当次循环或结束循环。________语句,结束并退出当前层循环,________语句,结束当前次循环,进入下一次循环。
in
字符
列表
等差
满足
break
continue
12.若循环体中没有break语句,当循环结束后,可以执行________部分的语句。
13.循环语句 for i in range(0,n):和i=0;while i14.注意循环结构和选择结构的区别。如if i in u 和for i in u。选择结构语句只执行________次,判断的结果为真或假。循环结构依次取出集合中每个元素,循环的次数取决于集合中元素的________。
else
n-1
n

个数
课堂突破
3
【典例1】 象限是平面直角坐标系(笛卡尔坐标系)中横轴和纵轴所划分的四个区域,每一个区域叫作一个象限。象限以原点为中心,x,y轴为分界线,原点和坐标轴上的点不属于任何象限。某同学根据输入的坐标点(x,y)来判断该坐标点的位置所在,以下实现该分类的Python程序段中正确的是(  )
A.if x==0 and y==0:result="原点"
if x==0 or y==0:result="数轴"
if x!=0 and y!=0:
  result="象限"
B.if x==0 or y==0:result="数轴"
if x==0 and y==0:
  result="原点"
else:
  result="象限"
C.if x!=0 and y!=0:
  result="象限"
if x==0 or y==0:
  result="数轴"
else:
  result="原点"
D.if x!=0 and y!=0:result="象限"
if x==0 and y==0:result="原点"
if x==0 or y==0:
  result="数轴"
答案 D
思维点拨
明考向 本题考查Python基本控制结构。(0,0)是原点,即if x==0 and y==0表示原点;(0,y)或者(x,0)分别表示y轴与x轴
精点拨 A x==y==0时,第1个和第2个if均成立
B if x==0 or y==0且x与y不同时为0表示数轴,在第2个分支语句中,再次判断为"象限"
C 条件x!=0 and y!=0成立,判断为"象限",在第2个分支语句中,再次判断为"原点",因此原点的判断需在数轴之前
D 分三种情况,用3条分支语句来表达这种情况
【变式1】 用Python语句描述城市主干道中机动车平均行驶速度v不低于30为畅通,小于20为堵塞,其余为拥挤,设v为机动车平均行驶速度(单位:km/h),则下列选项正确是(  )
D
A.if v>=30:
   print("畅通")
 elif v<30:
   print("拥挤")
 else:
   print("堵塞")
B.if v<20:
   print("堵塞")
 elif v>20:
   print("拥挤")
 else:
   print("畅通")
C.if 20<=v<30:
   print("拥挤")
 elif v>=30 and v<20:
   print("堵塞")
 else:
   print("畅通")
D.if v>=20:
 if v<30:
   print("拥挤")
 else:
   print("畅通")
 else:
   print("堵塞")
解析 本题考查分支控制结构。A选项v<30中包含了堵塞和拥挤,不能区分。B选项在v>20中包含了畅通和拥挤,不能区分。C选项条件v>=30和v<20不可能同时满足。D选项先分为大于等于20和小于20的情况,再在大于等于20中区分拥挤和畅通。
【典例2】 运动会计分规则:根据已有名次计算前8分的得分,第1名至8名分别计9,7,6,5,4,3,2,1分,第8名之后计0分。将n位学生的排名依次存储在rank[0]至rank[n-1]中,计算每位学生的得分score的部分程序段如下,将空白处填写完整。
score=[0]*n
for i in①________:
 if rank[i]==1:
  score[i]=9
 ②________:
  score[i]=9-rank[i]
答案 ①range(len(rank))或range(n)  ②elif rank[i]<=8
思维点拨
明考向 本题考查算法的控制结构
精点拨 ①从条件rank[i]==1,循环变量i是rank的下标,将n位学生的排名依次存储在rank[0]至rank[n-1]中,因此需遍历rank数组。②第2名至第8名的得分为9-rank[i],第9名之后得分为0,若用9-rank[i]计算得分,可能得到负数
【变式2】 纸牌5张及以上的连续单牌(不分花色)称为顺子,顺子最大到K,如“3,4,4,4,5,5,6,7,8”是长度为 6 的顺子。读取升序排列若干张牌,求最长的顺子。程序代码如下,请补充完整。
a=[3,3,4,4,4,6,7,7,9,9,9,10,11,11,12,13]
m=0
count=1
for i in ①________:
 if a[i]==a[i-1]+1:
   count+=1
 ②________:
   if count>m:
    m=count
   count=1
if count>m:
 m=count
print("最长顺子为",m)
答案 ①range(1, len(a)) ②if a[i]>a[i-1]+1或elif a[i]!=a[i-1]+1或其他等价答案
解析 本题考查算法的控制结构。①相邻两张牌a[i]和a[i-1]进行比较,因此i的初值为1,终值为len(a)-1。②根据牌面情况,可以分为3种情况,一是前后两张牌相差为1,此时count值增加1,二是前后两张牌相差大于1,此时要统计count的最值。三是两张牌相等,此时不用任何操作。
  算法=逻辑+控制,这是Pascal设计者Niklaus Wirth的一本著作的书名,它刻画了过程式尤其是结构化编程的思想。控制指的是程序设计中顺序、选择和循环三种基本控制结构。分支结构分为单分支结构、双分支结构和多分支结构,而分支结构的组合可以分为多个分支语句和分支的嵌套。多分支结构和多个分支语句的区别在于多分支结构只执行其中一个判断条件,而多个分支语句依次执行每个分支结构语句。遍历是算法最核心的思想,往往用循环结构来实现。可以按位置遍历,如 for i in range(20);也可以按元素进行遍历,如for i in [3,2,1,7]。用while语句往往实现满足某个条件时的遍历。
当堂检测
4
1.为实现按表中分数段进行等级划分,以下代码正确的是(  )
D
解析 A选项多个分支结构,条件x>=80包括了第一个分支结构的情况。B选项elif后面未添加条件,语法错误。C选项不可能出现level='A'的情况。
分数x x≥90 80≤x<90 x<80
等级level A B C
A.if x>=90:
   level="A"
 if x>=80:
   level="B"
 if x<80:
   level="C"
B.if x<80:
   level="C"
 elif:
   if x>=90:
    level="A"
   level="B"
C.level="A"
 if x>=80:
   level="B"
 else:
   level="C"
D.level="C"
 if x>=80:
   level="B"
 if x>=90:
   level="A"
D
解析 ABC选项实现若条件a > b成立,flag的值为True,否则为False。D选项无论a <= b是否成立,flag的值均为True。
A.flag=a>b
B.if a>b:
   flag=True
 else:
   flag=False
C.flag=True
 if a<=b:
   flag=False
D.if a<=b:
   flag=False
 flag=True
3.如下程序实现的功能为去除字符串中的重复字符,对于重复出现的,仅保留首次出现位置的字符。
s=input("输入字符串")
i=1;j=len(s)
while ①________:
  if s[i] in s[:i]:
    s=s[:i]+s[i+1:j]
    j=len(s)
    ②______
  i+=1
print("去重后字符串:",s)
划线处应填的正确代码为(  )
A.①i<=j ②i-=1 B.①iC.①i<=j ②j-=1 D.①iB
解析 语句s=s[:i]+s[i+1:j]的功能是去除字符串中索引位置i的字符。变量i指向去重后的最后一个索引位置,其初值为1,即至少要保留s[0]。当条件s[i] in s[:i]成立时,表示与后面有重复,去除后,还要再次检验新的索引位置i上字符是否有重复,因此②处为语句i-=1。变量j的值更新为len(s),因此当去重最后位置为len(s)-1时结束算法,因此①处为语句i4.编写一个计算字符串中最多连续相同字符个数的Python程序段如下:
s=input("请输入字符串:")
k=1;maxlen=0
for i in range(1,len(s)):
 if s[i]==s[i-1]:
   k=k+1
 else:
   if k>maxlen:
    maxlen=k
 k=1
print("最多连续相同字符个数为:",maxlen)
D
解析 遍历字符,当相邻两个字符相同时k累计相同字符个数,相邻字符不同时才会进入else比较和更新最多连续相同字符个数,因此当最多连续相字符个数出现在最后时,将无法正确记录。D选项ABBCCDDD最多连续相同字符是DDD,个数为3,但按照代码运行最多连续相同字符个数为2。
5.(2026年1月浙江选考)有如下 Python 程序段:
c,i="", 0
while i=0:
  if s[i] == "e":
    t-=1
  else:
    c+=s[i]
  i+=1
若s为"keeper",t为2,执行该程序段后,c的值为 (  )
A."k" B."kp"
C."kpr" D."kper"
B
解析 本题考查循环控制结构和字符串的遍历。变量i从索引0开始遍历字符串s,若遍历到的字符s[i]是"e",则变量t的值减去1,否则将字符s[i]连接到变量c中,直到遍历完字符串s并且变量t的值小于0。t的初值为2,若要减小到小于0,必须要遍历到3个"e",因此在此之前连接的字符串为"kp"。
6.以下程序实现与计算机玩“石头剪刀布”的游戏(分别用0,1,2代表石头、剪刀、布),游戏规则为:石头赢剪刀、剪刀赢布、布赢石头。代码如下:
import random
pc=random.randint(0,2)
player=int(input("请输入石头(0)、剪刀(1)、布(2):"))
if __________:
  print("你赢了,恭喜!")
elif player==pc:
  print("平手")
else:
  print("你输了,再接再厉!")
解决该问题,上述程序划线处填入语句正确的是(  )
A.pc>player
B.pcC.pc-player==1 and player-pc==2
D.pc-player==1 or player-pc==2
D
解析 本题考查多分支选择结构。你赢的可能性有3种,一是石头对剪刀,二是布对石头,三是剪刀对布,其中前2种可能中,pc-player==1,第3种可能性中,player-pc==2。
7.输入一个小于10万的正整数金额,转换成相应的大写人民币形式。例如:“1336”转为“壹仟叁佰叁拾陆元整”。金额中包含 0 时输出规则如下:
①金额数字中间有 0 时省略相应位置的“拾”,“佰”,“仟”;
②金额数字中间有连续多个 0 时,只需保留一个“零”;
③金额数字末尾是 0 时,省略“零”。
(1)输入数字“1207”转化成大写是________ 。
(2)算法一:将输入的金额作为字符串来处理,从高位数字开始转换,最后一位数字单独处理,请将空白处填写完整。
sn="零壹贰叁肆伍陆柒捌玖拾佰仟萬"
s=input("输入一个大于0但小于10万的正整数:")
ans=""
for i in ①________:
  t1=int(s[i])
t2=int(s[i+1])
  if t1!=0:
   jedx=sn[len(s)-2+10-i]
   ans+=sn[t1]+ jedx
 ②________ :
   ans+=sn[0]
t1=int(s[-1])
if t1!=0:
  ans+=sn[t1]
print("转换的大写形式为:"+ans+"元")
(3)算法二:将输入的金额作为整数处理,从个位数字开始处理,请将空白处填写完整。
n=int(input("请输入一个正整数:"))
s1="零壹贰叁肆伍陆柒捌玖"
s2="元拾佰仟萬"
res="" ;c=0
flag=True
while ①________:
  if n % 10!=0:
   res=s1[n%10]+s2[c]+res
   flag=True
  ②________:
   res='零'+res
   flag=False
  c+=1
  n∥=10
if res[-1]=='零': #处理最后一位数字是零的情况
  res=res[:-1]+'元'
print(res+'整')
答案 (1)壹仟贰佰零柒元整 (2)①range(len(s)-1) ②elif t2!=0 (3)①n>0 
②elif flag
解析 本题考查算法控制结构。(1)略。(2)①从高位数字开始转换,最后一位数字单独处理,因此从下标0开始遍历到倒数第二位。②连续获取两个数字,有3种可能,一是第1位不为0,二是第1位为0,但第2位不为0,三是两个数字均为0。第3种可能性时,不加任何处理,如果条件t1!=0不成立,第2位不为0,需加一个零。(3)①表达式n % 10取出个位数,语句n∥=10去除个位数,因此当n大于0时,需不断地循环计算。②连接一个零后,flag 的值为False,不能再添加连续的0,因此只有当flag为True时,才可以添加零。
8.某园区从8点钟开始记录每分钟的进出园区人数,当人流量超过某个阈值td时,将发生预警信号,闭园后,统计超过阈值的总持续时间ans,编写相关的程序实现该功能,请将空白处填写完整。
#读取阈值人数,存储到变量td中
cnt,ans=0,0
t=-1
for tim in range(480,1021):
 #变量tim存储8点到17点之间的分钟数
 #读取当前时间的入园和出园人数,存储在数组dou[0]至dou[1]中,代码略
 cnt+=dou[0]- dou[1]
 #统计当前时间的在园区人数
 if ①____________:
    if t==-1:
     t=tim
     #发出预警信号,代码略
 elif t>-1:
    ②____________
    t=-1
    #取消预警信号,代码略
#输出超过阈值的总持续时间ans,代码略
答案 ①cnt>td ②ans+=tim-t
解析 ①cnt为当前时间在园区人数,若人数第1次超出阈值td,则记录超过阈值开始时间。t的初值若为-1,表示当前时间前一分钟人数未超出阈值,将当前时间tim设置为超过阈值开始时间。若t的值不为-1,则不进行任何操作。②当条件cnt>td不成立时,表示持续超出阈值的时间段结束,用tim-t计算持续的时间,并累加到ans中。
课时作业
5
1.用Python语言实现“每满100减30,每满200减70,可以累计上不封顶”的优惠金额计算,设s为购买商品的原价,计算优惠金额t,下面选项正确的是(  )
A
解析 优先计算“满 200”优惠的额度,不足 200 的,按“满 100”的计算。不足 200 部分可用 s%200 计算而得。
A.t=s∥200*70
 if s%200>100:
   t=t+30
B.t=s∥100*30
 if s∥200>0:
   t+=s∥200*70
C.if s>=200:
   t=s∥200*70
 else:
   t=s∥100*30
D.if s>=100:
   t=t∥100*30
 else:
   t=t∥200*70
A.Y="偏瘦"
 if X>=18:
   Y="正常"
 elif X>24:
   Y="偏胖"
A
解析 本题考查 Python分支结构基本语法。A 选项只要变量 X 的值大于等于 18,输出结果均为“偏胖”,与题干要求不符。
B.Y="偏胖"
 if X<18:
   Y="偏瘦"
 elif X<24:
   Y="正常"
C.if X>24:
   Y="偏胖"
 elif X>18:
   Y="正常"
 else:
   Y="偏瘦"
D.if 18<=X<=24:
   Y="正常"
 else:
   Y="偏瘦"
   if X>18:
    Y="偏胖"
3.有如下Python程序段:
list=[2,1,3,4,5,7,12,14,26,37,63]
c=0
for i in range(2,11,2):
 if list[i-2]+list[i-1]==list[i]:
  c+=1
print(c)
该程序段运行结果为(  )
A.2        B.4        C.6        D.8
B
解析 本题考查数组元素的遍历。从索引号为2的数组元素开始,统计当前元素是否是前面2个元素之和的个数。
4.在传递信息的过程中,通常会将一些敏感信息进行加密,以下是对数据进行加密的Python程序段,若输入数据为“my789”,则输出的内容为(  )
s=input("输入明文:")
t=""
for ch in s:
 if "0"<=ch<="9":
   x=int(ch)+3
   if x>=10:
    x=x%10
   ch=str(x)
 t=t+ch
print (t)
A.my123      B.my012      C.pa012      D.pa123
解析 本题考查读取Python程序的能力。逐个访问字符串将其中的数字加3,如果该数大于等于10,对结果进行除10取余。
B
5.某Python代码如下,执行后输出的结果是(  )
count=0
L=["apple","banana","pear","orange","peach","strawberry"]
for i in [1,5,2]:
 count+=len(L[i])
print(count)
A.12        B.16        C.20        D.22
C
解析 本题考查循环结构和列表的索引。i的值依次为1,5,2,取出"banana""strawberry"和"pear" ,长度之和为20。
6.有Python程序如下。
lst= [1,6,2,9,3,5,2]
k,s=1,0
m=len(lst)∥2
for i in range(m):
  s+=lst[m+k]-lst[m-k]
  k+=1
print(s)
运行该程序,输出结果是(  )
A.1         B.-1        C.14        D.-14
A
解析 本题考查列表的遍历。m=len(lst)∥2,是中间位置3。m+k 和m-k表示中间两侧对称的索引号。循环3次,依次是3-2,5-6,2-1,把这些差值进行累加。
7.有如下程序段:
s=input("请输入字符串:")
count=0
for i in s:
 if i>="0" and i<="9":
   count=count+1
print(s[count:count+3])
若输入的字符串为"AB12CCC222GGBD",则程序运行结果为(  )
A.CCC      B.GGBD      C.CC2      D.C22
C
解析 本题考查字符统计处理及列表切片的相关知识。前面程序统计字符串中数字个数为5,列表切片从索引号5到7(8为截止不取)取三个。
8.有如下Python程序段:
ch="2nd-ucDOSy3t"
res=""
for i in range(len(ch)):
 if "a" <=ch[i]<="z":
   res=res+ch[i]
print(res)
该程序段的功能是输出字符串ch中的(  )
A.所有小写字母   B.小写字母的个数
C.所有数字之和 D.所有非数字字符
A
解析 本题考查range函数的使用以及程序基本代码的阅读能力。根据range函数的参数,是从字符串ch中从索引0开始,依次取出下标为0、1、2……位置的字符,如果字符是小写,将它顺序依次拼接到字符串res中。所以答案为A。
9.有如下Python程序段:
a=[1,5,9,2,6,8,3,4,7]
n=0;flag=False
if a[0] flag=True
for i in range(len(a)-1):
 if a[i]   n+=1;flag=False
 elif a[i]>a[i+1] and flag==False:
   flag=True
print(n)
执行上述程序段后,输出的值为(  )
A.1      B.2      C.3      D.4
C
解析 本题考查程序控制结构。程序的功能是计算上升序列的个数。遍历数组a,若当前位置元素比后面元素小,且falg的值为True,则对n进行计数,同时将flag的值设置为False。若当前位置元素比后面元素大,设置falg的值为True。
10.某些数据中存在“数字山峰”,例如数据“21432748”中存在“1432”、“274”两座“数字山峰”(必须包含上坡与下坡),下面程序用于求数据中“数字山峰”的数量:
num=input("请输入数字串:");c=0
(1)______
for i in range(1,len(num)):
 if (2)________ and f==False:
   f=True
 elif (3)________ and f==True:
   c=c+1
   f=False
print("有",c,"座数字山峰")
方框(1)(2)(3)的代码由以下部分组成:
①f=True ②f=False ③num[i-1]>num[i] ④num[i-1]下列选项中代码顺序正确的是(  )
A.①③④ B.①④③
C.②③④ D.②④③
D
解析 变量f表示是否是上坡的标志,初值False表示未找到上坡,变量i从1开始遍历,当找到第1个num[i]大于num[i-1],表示找到了上坡,将f设置为True。若状态为上坡,当找到第1个num[i]小于num[i-1]时,表示找到了下坡,变量c进行计数,同时将f的设置为False,在此状态下,即使出现多个num[i]小于num[i-1]时,也不会计数。
11.某次测试的答题结果存储在asht.txt文件中,该文件每行记录1个考生10道单选题的答案,每题有A,B,C,D四个选项,空白的答案标记为'K'。评分标准:正确得3分,错误得-1分,空白得0分。实现评分的Python程序如下。
ANS='ACBBCDADBC' #ANS 为标准答案
score=[]
for line in open('asht.txt','r'):
  score.append(0)
  i=len(score)-1
  j=0
  while j    if ①____________:
     score[i]+=3
    elif line[j]!='K':
     ②____________
    j+=1
print(score)
(1)若标准答案为:'ACBBCDADBC',则答案'ACBBDDADKC'的得分为________。
(2)完善上述①②处代码。
答案  (1)23 (2)①line[j]==ANS[j]   ②score[i]-=1
解析 本题考查顺序查找算法。line表示asht.txt文件中每一条记录,每条记录有10道单选题答案。语句score.append(0)表示每读取一条记录,该列表增加一个值为0的元素,i表示score列表中最后一个元素的索引值。j初值为0,终值为len(ANS)-1,表示在标准答案中比对当前记录中答案,如果line[j]==ANS[j]表示当前答案与标准答案一致,得3分,不正确将扣1分。
12.在一个包含数字和其他非数字字符混合的原始数据中,提取其中的连续数字,当数据中存在多个数字串,以“,”间隔不同数字串。如字符串China86USA0HK852中包含86,0,852三个数字串。部分程序段如下,将空白处填写完整。
(1)算法一:用变量t存储临时取得的数字串
s="China86USA0HK852"
t="";ans=""
for i in s:
 if "0" <=i<="9":
  t= t+i
 ________ :
  ans+=t+","
  t=""
if t=="":
 print("提取的数字有:"+ans[:-1])
else:
 print("提取的数字有:"+ans+t)
(2)算法二:用变量t存储临时取得的数字串的个数
s="China86USA0HK852"
t=0;ans=""
for i in range(len(s)):
 if "0" <=s[i]<="9" :
  t= t+1
 ________ :
  ans+=s[i-t:i]+","
  t=0
if t==0:
 print("提取的数字有:"+ans[:-1])
else:
 print("提取的数字有:"+ans+s[i-t+1:])
(3)算法三:用标志变量flag存储是否是字母后第1个数字
s="China86USA0HK852"
flag=False;t="";ans=""
for ch in s:
 if "0" <=ch<="9":
  t+=ch;flag=True
 elif flag:
  ans+=t+","
  t="";flag=False
if ________:
 print("提取的数字有:"+ans[:-1])
else:
 print("提取的数字有:"+ans+t)
(4)算法四:用双重循环来遍历整个字符串,变量j记录数字串的开始位置。
s="China86USA0HK852"
ans=""
i=0
while i j=i
 while ________:
  i+=1
 if i-j>0:
  ans+=s[j:i]+","
 i+=1
print("提取的数字有:"+ans[:-1])
(5)算法五:用双重循环来遍历整个字符串,变量j记录数字串的结束位置。
s="China86USA0HK852"
ans=""
i=0
while i j=i
 while j   j+=1
 if j-i>0:
   ans+=s[i:j]+","
 __________
print("提取的数字有:"+ans[:-1])
答案 (1)elif len(t)>0或elif t!=""  (2)elif t>0 (3)not flag
(4)i解析 本题考查算法的控制结构。遍历字符串s,可能会出现3种情况,一是数字,二是数字后的第1个字母,三是字母,但位置不是数字后面第1个。当遍历到数字时,需记录临时数字串的内容,或者数字串的开始位置、数字串的长度,但还不能确定数字串是否结束。遍历到数字后面第1个字母,或者结束位置是字母时,可以取出数字串。第3种情况是无需任何处理。(1)当临时字符串t不为空时,表示已经取出数字串,取出数字串后,立即初始化为空。(2)当t不为0时,表示已经取出字符串。(3)当flag的值为False,直接输出结果。否则还要连接最后一次取得的数字。(4)从条件i-j>0来看,i-j表示取得数字串的长度,变量i表示已经不是数字的位置,即数字串结束后的第1个位置。变量j数字串的开始位置。如果当前位置i是数字,继续向后遍历,但要注意边界。(5)由于当前位置j是字母,下次可以从当前位置j向后遍历。

展开更多......

收起↑

资源列表