第 14 题
答案与解析
第(1)小题
2
“任意连续 k 个数据”表示每次向后移动一个数据取一组,相邻组可以重叠。6 个数据中,每组取连续 3 个,共有 6-3+1=4 组。
平均值大于 50,等价于三个数据之和大于 3×50=150,可直接比较各组的和,避免平均值取近似数影响判断。
| 数据位置 | 三个温度值 | 总和 | 平均值是否大于 50 |
|---|---|---|---|
| 第 1~3 个 | 49.90、50.10、49.80 | 149.80 | 否 |
| 第 2~4 个 | 50.10、49.80、50.20 | 150.10 | 是 |
| 第 3~5 个 | 49.80、50.20、49.90 | 149.90 | 否 |
| 第 4~6 个 | 50.20、49.90、50.20 | 150.30 | 是 |
共有 2 个平均值大于阈值。本小题只统计超过阈值的平均值个数,不要求这些平均值连续出现。
第(2)小题
total = 0
lst[v] = tmp
ave > pt
程序分析
lst = [0.0] * k
i = 0
c = 0
①
while True:
# 获取实时监测温度值tmp,代码略
...
i = i + 1lst 有 k 个位置,初值均为 0;i、c 的初值也为 0。每轮接收并处理一个温度值后,i 增加 1,因此处理当前数据时,已经收到 i+1 个温度值。
v = i % k
total = total + tmp - lst[v]
②v=i % k 按 0、1、…、k-1 循环取值,每隔 k 轮回到同一位置。total 的更新语句加入当前温度 tmp,并减去 lst[v] 中原有的值;空②位于这一计算之后。
if i >= k - 1:
ave = total / k
if ③:
c = c + 1
else:
c = 0
if c >= m:
# 发出温度过高警报,代码略
c = 0i≥k-1 时,已经收到至少 k 个温度值,才计算平均值。空③的条件成立时 c 加 1,否则 c 清零,因此 c 记录连续满足该条件的次数。达到 m 次便报警,并重新从 0 开始计数。
填空分析
①
total / k 用于计算一组数据的平均值,所以 total 需要保存这一组的总和。接收数据前,各位置均为 0,总和也为 0;第一轮更新又会读取 total,须先初始化:
total = 0
②
total 已按“加入 tmp、减去 lst[v] 旧值”更新,接着应把 tmp 存入同一位置:
lst[v] = tmp
这样,k 轮后再次访问该位置时,减去的正是本轮温度。前 k 轮依次填满列表,此后每轮替换最早的数据,使列表保留最近 k 个温度值,total 保持为它们的总和。赋值位于总和计算之后,才能保留本次应减去的旧值。
③
题目要求平均值严格大于阈值时才累计超温次数,填写:
ave > pt
等于或小于阈值时条件为假,进入 else 清零,表示连续超温中断。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_04_G3_shaoxingzhenduan_q014
