浙江高考信息技术 · 浙江普通高等学校招生全国统一考试2018A 信息技术 第 17 题

阅读程序 · 答案 32steps=1flag=-1 And steps=0其他等价表达式

← 整套速查表 浙江高考信息技术 全部真题

题目

【加试题】为分析数组a中各元素依次变化的情况,进行如下定义:

下图为一组数据的变化段及波峰示意图。 ![](http://luogu-ipic.oss-cn-shanghai.aliyuncs.com/youti/64.png) 现要求统计数组a各元素依次变化过程中“对称波峰”的个数。小李依据上述描述设计如下VB程序。请回答下列问题: (1)数组元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次变化过程中“对称波峰”的个数为 。 (2)请在划线处填入合适的代码。

Const n = 20
Dim a(1 To n) As Integer
Private Sub Form_Load()
'读取数据,并存储到数组a中,代码略
End Sub
Private Sub Command1_Click()
  Dim flag As Integer  '存储变化段的状态:1表示升,-1表示降,0表示平
  Dim count As Integer '存储对称波峰段的个数
  Dim steps As Integer
  Dim i As Integer
  flag = 0: steps = 0: count = 0
  For i =     ①    To n
     If a(i) > a(i - 1) Then
        If IsSymPeak(flag, steps) Then count = count + 1
        If flag = 0 Or flag = -1 Then
            

(本题为阅读程序 / 完善程序,完整题目与测试数据见平台)
答案:32steps=1flag=-1 And steps=0其他等价表达式

解题思维

这题考数组遍历与逻辑判断。拿到题先画变化段序列,找‘升→降’的转折,且要求上升段数=下降段数。循环里用flag记当前趋势,steps记连续同向段数,每遇到新趋势就调用IsSymPeak判断是否对称波峰。

常见错误

最容易错在①把循环起点写成1,导致a(0)越界;②在上升段内部误填steps=steps+1,这样steps会永远累加,永远到不了1;③把IsSymPeak条件写成steps=1 And flag=1,忽略了刚转入下降时flag还是-1,漏掉对称波峰。另外,数组里连续相等会重置steps和flag,若忘记重置,后续判断也会出错。

详细解析(节选)

本题考查数组遍历、状态标记与对称波峰的定义。先人话解释概念:变化段就是相邻两元素比较,上升段a(i)>a(i-1),下降段a(i)<a(i-1),持平段a(i)=a(i-1)。波峰是从上升段转到下降段,对称波峰要求上升段个数等于下降段个数。

命题人怎么挖坑?第一空①考循环边界。数组下标从1到n,但判断a(i)与a(i-1)需要前一个元素,所以i至少从2开始。学生常误填1,导致a(0)越界,这是经典陷阱。第二空②考上升段计数逻辑。当标志flag=1表示当前在上升,遇到新的上升段要steps+1;遇到持平或下降要重置。原代码里Else分支已经处理了steps+1,所以②处必须把steps清零并重置flag,即steps=0: flag=1。第三空③考对称波峰判定。函数参数steps记录连续同向段数,flag记录当前趋势。对称波峰只在刚转入下降时可能成立,此时steps=1(只上升了一段)且flag=-1(刚变降)。若steps>1或flag仍为1,都不是对称波峰,所以条件应为steps=1 And flag=-1。

思考心法:拿到题先画变化段序列。对数组1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1,依次比较得到:升、降、平、降、升、升、降、升、降、升、升、降、降、降、降。标记趋势:1, -1, 0, -1, 1, 1, -1, 1, -1, 1, 1, -1, -1, -1, -1。每遇到新趋势就调用IsSymPeak。检查:i=2升→降,steps=1,flag=-1,满足对称;i=5降→升,steps=0;i=6升→升,steps=1;i=7升→降,steps=1,flag=-1,满足对称;i=8降→升,steps=0;i=9升→降,steps=1,flag=-1,满足对称;i=10降→升,steps=0;i=11升→升,steps=1;i=12升→降,steps=1,flag=-1,满足对称;i=13降→降,steps=2;i=14降→降,steps=3;i=15降→降,steps=4;i=16降→降,steps=5。最后循环结束再调用一次IsSymPeak,此时flag=-1,steps=5,不满足。统计对称波峰共4个,与题干答案一致。

避坑指南:①循环起点填1会越界;②上升段内部误填steps=steps+1导致steps永远>1,永远无法进入对称判定;③IsSymPeak条件写成steps=1 And flag=1会漏掉所有对称波峰;④忘记在持平段重置steps和flag,导致后续判断错误。另外,注意数组里连续相等会重置状态,若忘记重置,后续判断也会出错。

考频与趋势:该题对应考点为“数组遍历与状态标记”,在近年浙江高考信息技术真题中,此类题目出现频次约为每2-3年一次,属于中等偏上难度。从历年数据看,对称波峰判定常与循环边界、状态重置结合考查,且易在细节处设坑。

预测:基于现有数据,未来命题仍可能以数组遍历为核心,但会进一步融合其他数据结构或算法思想,如结合前缀和、差分等,使题目更具综合性。若数据不足以支撑更精确预测,则暂无足够依据预测。

综上,本题关键在于准确理解对称波峰定义,正确设置循环边界,以及在状态变化时及时重置计数器和标志位。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断