数组a中的n个元素可构成n-1个依次排列的变化段。
l波峰:
从上升段转到下降段形成一个波峰。
波峰的起点是峰顶前所有连续上升段中的第1个,终点是峰顶后所有连续下降段中的最后1个。
l对称波峰:
上升段与下降段个数相同的波峰称为对称波峰。
下图为一组数据的变化段及波峰示意图。
现要求统计数组a各元素依次变化过程中“对称波峰”的个数。
小李依据上述描述设计如下VB程序。
请回答下列问题:
(1)数组元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次变化过程中“对称波峰”的个数为。
(2)请在划线处填入合适的代码。
Constn=20
Dima(1Ton)AsInteger
PrivateSubForm_Load()
'读取数据,并存储到数组a中,代码略
EndSub
PrivateSubCommand1_Click()
DimflagAsInteger'存储变化段的状态:
1表示升,-1表示降,0表示平
DimcountAsInteger'存储对称波峰段的个数
DimstepsAsInteger
DimiAsInteger
flag=0:
steps=0:
count=0
Fori=①Ton
Ifa(i)>a(i-1)Then
IfIsSymPeak(flag,steps)Thencount=count+1
Ifflag=0Orflag=-1Then
②
Else
steps=steps+1
EndIf
ElseIfa(i)=a(i-1)Then
IfIsSymPeak(flag,steps)Thencount=count+1
steps=0
flag=0
Else
steps=steps-1
flag=-1
EndIf
Nexti
IfIsSymPeak(flag,steps)Thencount=count+1
Text1.Text=Str(count)
EndSub
FunctionIsSymPeak(flagAsInteger,stepsAsInteger)AsBoolean
If③Then
IsSymPeak=True
Else
IsSymPeak=False
EndIf
EndFunction
【答案】
(1)3
(2)①2②steps=1③flag=-1Andsteps=0
【解析】
(2)①根据题意得知,第一次比较的是a
(2)和a
(1),所以循环变量i的初值为2。
②拐点后Steps重新从1计数,升Steps加1,降Steps减1。
如果是一个对称波峰,到达对称波峰的终点时Steps的值肯定为0。
如果前面下降段且Steps为0,并且当前位置是“V”拐点,则代表前面刚好是一个对称波峰。
③下降段过程中且Steps为0,函数IsSymPeak为True,否则为False。
第10页共10页