题型:综合题 题类:常考题 难易度:困难
浙江省名校协作体2018届高三下学期信息技术3月选考试题
做法是比较中点与当前查找范围第1个数大小关系,用对分法使查找范围逼近拐点;当余下数组只有二个元素时,可根据此二元素大小关系得到拐点的位置。
依据上述描述设计了VB程序,界面如图所示。请回答下列问题:
Dim a(1 To 20) As Integer
Private Sub Command1_Click()
Dim Low As Integer, High As Integer
Low = 1
High = 20
Do While High > Low
If ① Then '当只余下两个元素时
If ② Then
Label1.Caption = "拐点元素为" + Str(a(1)) + ",下标为" + Str(1)
Else
Label1.Caption = "拐点元素为" + Str(a(High)) + ",下标为" + Str(High)
End If
Exit Do
End If
If a(m) >= a(Low) Then
Low = m
Else
③
End If
Loop
End Sub
Private Sub Form_Load()
'生成循环递增的数组a,代码略
End Sub
① ② ③
①检查产生号码是否重复:把产生的中奖号码放在数组a中,新产生的号码与已经产生的号码进行一一对比,如果找到相等的数,则重新产生新号码。
②找到新产生号码存放的数组下标:从下标为1的数组元素开始,新号码(第i个号码)分别与他们进行一一比较,找到第一个比新号码大的数,该数所在的下标就是新号码应存放的下标。如果在已经产生的数中没有找到比新号码大的数,则新号码应存放在下标为i的数组元素中。下表以产生第5个号码为例,如果产生的号码是150,第一个比他大的数是a(2),下标为2的数组元素应存放新号码;如果产生的号码是300,则新号码应存放在下标为5的数组元素中。
数组元素 | a(1) | a(2) | a(3) | a(4) |
数组元素的值 | 120 | 188 | 211 | 278 |
③移动数组元素到新的位置:如果在已经产生的号码中找到比新号码大的数,从上一个产生的号码开始,到新号码应存放的数组元素,依次把他们向后面移动。以②中产生150为例,从a(4)开始,让a(5)的值等于a(4),a(4)的值等于a(3),依次类推,直到新号码应存放的数组元素a(2)为止。
④将新产生的号码放在相应的数组元素中。
程序运行的界面如图所示,实现上述功能的VB程序代码如下:
Dim a(10) As Single
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Dim temp As Single, k As Integer ‘temp产生随机数,k随机数存放数组元素的下标
Randomize
a(1) = Int(Rnd() * 900 + 100)
For i = 2 To 10
temp = Int(Rnd() * 900 + 100)
If seach(temp, i - 1)= True Then
i = i – 1
Else
k = i For j = 1 To i - 1 If temp < a(j) Then k = j: Exit For Next j |
For j = i - 1 To k Step -1
a(j + 1) = a(j)
Next j
①
End If
Next i
List1.Clear
For i = 1 To 10
List1.AddItem Str(a(i))
Next i
End Sub
‘函数实现在数组a中,从下标为1的数组元素到下标为t数组元素,查找有无pp的数值
Function seach(pp As Single, t As Integer) As Boolean
Dim i As Integer
seach = False
For i = 1 To t
If ② Then seach = True : Exit For
Next i
End Function
位置 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
数据 |
64 |
67 |
45 |
145 |
|
269 |
|
|
|
119 |
1275 |
试题篮