深耕专业教研,探索前沿技术
信息技术来源:湖州、衢州、丽水2026年4月三地市高三教学质量检测

第 14 题

答案与解析

第(1)小题

参考答案

B

每组数据对应同一分钟的两个传感器读数,用差的绝对值判断是否超过40。异常要求连续至少3分钟超限,不能把不连续的超限分钟数相加。

数据序号 差的绝对值 是否超过40 截至当前连续超限分钟数
1 48 是 1
2 32 否 0
3 96 是 1
4 46 是 2
5 27 否 0

两段连续超限分别持续1分钟和2分钟,均未达到3分钟,因此不存在数据采集异常。

第(2)小题

参考答案
  1. abs(d[0]-d[1])>M

  2. cnt+=1

  3. flag=False

程序分析

res=[];flag=False
i=0
while i<len(data):
    d=data[i]
    if ①:
        if flag:
            ②
            if cnt>=N:
                # 根据i值计算时间节点并存入列表res,代码略
        else:
            cnt=1
            flag=True
    else:
        ③
    i+=1

i从0开始,每轮取出data[i],处理后增加1,因此程序按时间顺序逐分钟检查。d[0]和d[1]分别是两个光线传感器在同一分钟采集的读数,res用于保存符合异常条件的时间节点。

flag初值为False。进入外层if后,flag为False时执行cnt=1、flag=True;flag为True时,经过空②后将cnt与N比较,达到要求就记录当前时间节点。结合题目要求,cnt需要记录截至当前连续超限的分钟数,flag需要区分本分钟是连续段的开始还是延续;三处空缺共同维持这一状态。

填空分析

①

题目要求同一分钟的两读数之差超过M。两读数的大小关系不固定,应取差的绝对值;“超过”对应严格大于,填写:

abs(d[0]-d[1])>M

差值等于M时进入外层else,不计入连续超限段。

②

当前分钟已经超限,且flag为True,需在此前的连续超限分钟数上增加1,再由cnt>=N判断是否记录当前节点,填写:

cnt+=1

例如N=3时,新段首分钟令cnt=1,第二、三分钟分别增加到2、3,从第三分钟起记录;随后每连续超限一分钟,都记录相应节点。

③

当前分钟未超限,连续段中断。将flag恢复为False,可使下一次超限时进入cnt=1的分支,重新计数,填写:

flag=False

下一段开始时cnt=1会覆盖旧计数,因此此处无需另设cnt=0。

原程序未限制N必须大于1,但新连续段的首分钟只执行cnt=1和flag=True,没有检查cnt>=N。若N=1,该分钟已经满足异常条件,却不会被记录。例如只有一条超限记录时,res仍为空。这是原固定代码的边界缺陷,上述三处填空不能消除。