插入排序。小明用VB设计程序,主要功能如下:随机产生10个介于1到100之间的正整数数列,按升序排序后显示在List1列表框中,在文本框Text1中输入1个100以内的正整数,单击“插入”按钮Command1后将其插入到数列中,并保持数列仍然有序,显示在列表List2中,同时在标签Label4中显示插入的位置,程序界面如下图所示。

实现上述功能的VB程序代码如下,但是有两个地方有误,请改正。
Dim a(1 To 15) As Integer
Dim i, j As Integer
Const n=10
Private Sub Form_Load()
Private Sub Command1_Click()
a(j-1) = a(j+1) ‘(2)
Next j
a(i) = key

实现上述功能的VB程序代码如下,但是有两个地方有误,请改正。
Dim a(1 To 15) As Integer
Dim i, j As Integer
Const n=10
Private Sub Form_Load()
Randomize '随机生成n个1到100之间的正整数
For i = 1 To n
a(i) = Int(Rnd * 100) + 1
Next i
'将10个数从小到大排序
For i = 1 To n-1
k = i
For j = i + 1 To n
If a(k) < a(j) Then k = j ‘(1)
Next j
If i <> k Then
t = a(i): a(i) = a(k): a(k) = tEnd If
Next i
'将排好序的数输出在列表框Listl中
List1.Clear
For i = 1 To n
List1.AddItem Str(a(i))
Next i
End SubPrivate Sub Command1_Click()
Dim key As Integer
key = Val(Text1.Text)
i = 1
Do While key > a(i) And (i <= n)
i = i + 1
Loop
Label4.Caption = "该数插入的位置是:" + Str(i)
If i = 11 Then
a(i) = keyElse
For j = n+1 To i + 1 Step -1a(j-1) = a(j+1) ‘(2)
Next j
a(i) = key
End If
List2.Clear
For i = 1 To 11
List2.AddItem a(i)
Next i
End Sub某 VB 程序代码如下:
For i = 1 To 3
For j = 5 To i Step -1
If a(j) < a(j + 1) Then
t = a(j): a(j) = a(j + 1): a(j + 1) = t
End If
Next j
List1.AddItem Str(a(i)) Next i
数组元素 a(1)到 a(6)的数据依次为“1,5,7,6,9,3”,经过该程序段加工后,列表框 list1 中显示的内容是( )
For i = 1 To 3
For j = 5 To i Step -1
If a(j) < a(j + 1) Then
t = a(j): a(j) = a(j + 1): a(j + 1) = t
End If
Next j
List1.AddItem Str(a(i)) Next i
数组元素 a(1)到 a(6)的数据依次为“1,5,7,6,9,3”,经过该程序段加工后,列表框 list1 中显示的内容是( )
A.9 7 6 | B.1 3 5 | C.9 7 6 1 5 3 | D.9 7 6 5 3 1 |
小王用 VB 编写一个自动统计离散数据的“极大值”(如图 a 所示)个数的程序。 功能如下:在列表框 List1 中随机产生 n 个介于[1,99]的正整数,单击“统计极大值”命令按钮 Command1,程序自动统计出极大值,并将其输出到列表框 List2,且将其中的最大值输出在标签 Label1 中。程序界面如图 b 所示,实现上述功能的 VB 程序如下。(假设:数据的左右两个端点不 计入极大值,且相等的两个值也不计入极大值)。请回答以下问题:

图 a 图 b
(1)当 n=6,原始数据为“8 39 24 5 71 25”,此时极大值有: 。
(2)请在划线处填入合适的代码。 Const n = 10
Dim a(1 To n) As Integer '存储原始数据 Dim Max(1 To n) As Integer '存储极大值数据
Private Sub Form_Load() '原始数据初始化
Randomize
For i = 1 To n
a(i) = ① '产生[1,99]间随机整数
List1.AddItem Str(a(i))
Next i End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Dim count As Integer, Maxa As Integer
count = 0
List2.Clear
For i = 2 To n - 1 '统计极大值,左右两边端点值除外
If ② Then
count = count + 1
③ = a(i)
End If
Next i
Maxa = 0
For i = 1 To count
List2.AddItem Str(Max(i))
If Maxa < Max(i) Then
Maxa = Max(i)
End If
Next i
Label1.Caption = "极大值中的最大值为:" + Str(Maxa) End Sub

图 a 图 b
(1)当 n=6,原始数据为“8 39 24 5 71 25”,此时极大值有: 。
(2)请在划线处填入合适的代码。 Const n = 10
Dim a(1 To n) As Integer '存储原始数据 Dim Max(1 To n) As Integer '存储极大值数据
Private Sub Form_Load() '原始数据初始化
Randomize
For i = 1 To n
a(i) = ① '产生[1,99]间随机整数
List1.AddItem Str(a(i))
Next i End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Dim count As Integer, Maxa As Integer
count = 0
List2.Clear
For i = 2 To n - 1 '统计极大值,左右两边端点值除外
If ② Then
count = count + 1
③ = a(i)
End If
Next i
Maxa = 0
For i = 1 To count
List2.AddItem Str(Max(i))
If Maxa < Max(i) Then
Maxa = Max(i)
End If
Next i
Label1.Caption = "极大值中的最大值为:" + Str(Maxa) End Sub
小孟为提高效率,对选择排序算法进行了如下改进:在数组的所有元素中找出最小和最大数据的元素,然后将这两个元素分别与第一个和最后一个元素交换数据,在余下的元素中找出最小和最大数据的元素,分别与第二个和倒数第二个元素交换数据,以此类推,直到所有元素的数据按升序排列。小赵编写的VB程序段如下:
p = 1: q = 10
Do While p < q
iMin = p: iMax = p
For i = p + 1 To q
If a(i) < a(iMin) Then
iMin = i
elseIf a(i) > a(iMax) Then
iMax = i
endif
Next i
t = a(iMax): a(iMax) = a(q): a(q) = t
①
t = a(iMin): a(iMin) = a(p): a(p) = t
p = p + 1:q = q -1
Loop
要使程序实现上述算法思想,则方框中的语句是
p = 1: q = 10
Do While p < q
iMin = p: iMax = p
For i = p + 1 To q
If a(i) < a(iMin) Then
iMin = i
elseIf a(i) > a(iMax) Then
iMax = i
endif
Next i
t = a(iMax): a(iMax) = a(q): a(q) = t
①
t = a(iMin): a(iMin) = a(p): a(p) = t
p = p + 1:q = q -1
Loop
要使程序实现上述算法思想,则方框中的语句是
A.If iMax = q Then iMax = iMin | B.If iMin = q Then iMin = iMax |
C.If iMax = q Then iMin = iMax | D.If iMin = q Then iMax = iMin |
如下VB程序段:
Dim a(1 To 8) As Integer
a(1) = 13: a(2) = 18: a(3) = 9: a(4) = 32
a(5) = 12: a(6) = 11: a(7) = 7: a(8) = 20
start = 1: k = 1
For i = start + 1 To 8
If a(i) < a(start) Then
k = k + 1
t = a(i): a(i) = a(k): a(k) = t
End If
Next i
t = a(start): a(start) = a(k): a(k) = t
For i = k + 1 To 8
List1.AddItem Str(a(i))
Next i
执行上面代码段后,列表框List1中依次输出的数组元素值为
Dim a(1 To 8) As Integer
a(1) = 13: a(2) = 18: a(3) = 9: a(4) = 32
a(5) = 12: a(6) = 11: a(7) = 7: a(8) = 20
start = 1: k = 1
For i = start + 1 To 8
If a(i) < a(start) Then
k = k + 1
t = a(i): a(i) = a(k): a(k) = t
End If
Next i
t = a(start): a(start) = a(k): a(k) = t
For i = k + 1 To 8
List1.AddItem Str(a(i))
Next i
执行上面代码段后,列表框List1中依次输出的数组元素值为
A.322018 | B.32122018 |
C.203218 | D.321820 |
(加试题)有如下程序段:
c=0
For i=1 to 5
f=False
For j=1 to 6-i
If a(j) > a(j+1) Then
f=True : c=c+1
t=a(j) : a(j)=a(j+1) : a(j+1)=t
End If
Next j
If f=False Then Exit For Next i
数组元素 a(1)到 a(6)的值依次为“19,65,27,53,48,36”,经过该程序段“加工”后,变量 c 的值为( )
c=0
For i=1 to 5
f=False
For j=1 to 6-i
If a(j) > a(j+1) Then
f=True : c=c+1
t=a(j) : a(j)=a(j+1) : a(j+1)=t
End If
Next j
If f=False Then Exit For Next i
数组元素 a(1)到 a(6)的值依次为“19,65,27,53,48,36”,经过该程序段“加工”后,变量 c 的值为( )
A.5 |
B.6 |
C.7 |
D.8 |
(加试题)小明基于冒泡排序思想设计了一个改进的排序算法。该算法先用冒泡法将数组a中奇数位置的元素、偶数位置的元素分别进行排序,然后再进行后续处理。算法的VB程序段如下,但加框处代码有错,请改正。
’待排序数据存储在数组a中(a(1)~ a(n)),要求升序排列
For i = 1 To (n - 1) \ 2
For j = 1 To n - i * 2
If a(j) > a(j + 1) Then ____________________________
t = a(j): a(j) = a(j + 2): a(j + 2) = t
End If
Next j
Next i
For i = 1 To n \ 2
j = 2 * i - 1
If a(j) > a(j+1) Then t = a(j): a(j) = a(j+1): a(j+1) = t
Next i
For i = 1 To n Step 2 ________________________
t = a(i): j = i - 1
Do While t < a(j)
a(j + 1) = a(j): j = j - 1
Loop
a(j + 1) = t
Next i
’待排序数据存储在数组a中(a(1)~ a(n)),要求升序排列
For i = 1 To (n - 1) \ 2
For j = 1 To n - i * 2
If a(j) > a(j + 1) Then ____________________________
t = a(j): a(j) = a(j + 2): a(j + 2) = t
End If
Next j
Next i
For i = 1 To n \ 2
j = 2 * i - 1
If a(j) > a(j+1) Then t = a(j): a(j) = a(j+1): a(j+1) = t
Next i
For i = 1 To n Step 2 ________________________
t = a(i): j = i - 1
Do While t < a(j)
a(j + 1) = a(j): j = j - 1
Loop
a(j + 1) = t
Next i
(加试题)所谓双向排序是在一遍加工中先从上到下把最大的元素送到最下的位置,再从下到上把最小的元素送到最上的位置。实现上述功能的vb代码如下:
Dim a(1 to 100) as integer
Const n=10
Private Sub form_load()
’生成n个随机数,存储在数组a中,代码略
End Sub
Private Sub command1_click()
Dim I as integer,j as integer
For ①
For j=i to n-i
If a (j)>a(j+1) then
t=a(j):a(j)=a(j+1):a(j+1)=t
End If
Next j
For ②
If a(j)<a(j-1) then
t=a(j):a(j)=a(j-1):a(j-1)=t
End If
Next j
Next i
for i=1 to n
List2.additem str(a(i))
Next i
End Sub
程序中①②处最合适的语句是( )
Dim a(1 to 100) as integer
Const n=10
Private Sub form_load()
’生成n个随机数,存储在数组a中,代码略
End Sub
Private Sub command1_click()
Dim I as integer,j as integer
For ①
For j=i to n-i
If a (j)>a(j+1) then
t=a(j):a(j)=a(j+1):a(j+1)=t
End If
Next j
For ②
If a(j)<a(j-1) then
t=a(j):a(j)=a(j-1):a(j-1)=t
End If
Next j
Next i
for i=1 to n
List2.additem str(a(i))
Next i
End Sub
程序中①②处最合适的语句是( )
A.① i=1 to n-1 ②j=n to i+1 step -1 |
B.① i=1 to n\2 ②j=n-i to i+1 step -1 |
C.① i=1 to n\2 ②j=n to i+1 step -1 |
D.① i=1 to n-1 ②j=n-i to i+1 step -1 |
(加试题)下列 VB 程序段的功能是将数组元素 a(1)到 a(n)按非递减序排序:
For i = 1 To n - 1
For j = 补充代码
If a(j) > a(j + 1) Then
t = a(j): a(j) = a(j + 1): a(j + 1) = t
End If
Next j
Next i
方框中的代码将会是以下四句中的一句:
① i To n - 1 ② n - 1 To i Step -1
③ 1 To n - i ④ n To i+1 Step -1
正确的选项是
For i = 1 To n - 1
For j = 补充代码
If a(j) > a(j + 1) Then
t = a(j): a(j) = a(j + 1): a(j + 1) = t
End If
Next j
Next i
方框中的代码将会是以下四句中的一句:
① i To n - 1 ② n - 1 To i Step -1
③ 1 To n - i ④ n To i+1 Step -1
正确的选项是
A.①② | B.③④ | C.①④ | D.②③ |
(加试题)实现某排序算法的部分VB程序如下:
For i=1 To 5
k=i
For j=i+1 To 6
If a(k)<a(j) Then k=j
Next j
If i<>k Then
t=a(i):a(i)=a(k):a(k)=t
End If
Next i
在排序过程中,经过某一遍排序“加工”后,数组元素a(1)到a(6)的数据依次为“96,90,91,88,95,94”。则下一遍排序“加工”后数组元素a(1)到a(6)的数据依次是( )
For i=1 To 5
k=i
For j=i+1 To 6
If a(k)<a(j) Then k=j
Next j
If i<>k Then
t=a(i):a(i)=a(k):a(k)=t
End If
Next i
在排序过程中,经过某一遍排序“加工”后,数组元素a(1)到a(6)的数据依次为“96,90,91,88,95,94”。则下一遍排序“加工”后数组元素a(1)到a(6)的数据依次是( )
A.96,95,91,90,88,94 | B.96,95,94,91,88,90 |
C.96,95,91,88,90,94 | D.96,95,94,91,90,88 |