Dim i As Integer
Dim a(1 To 9) As Integer
a(1) = 1: a(2) = 2
For i = 3 To 10
a(i) = a(i - 1) * i
Next i
Text1.Text = Str(a(i))
运行程序,单击命令按钮Command1后,出现的错误提示为( )
i = 1: j = 9: flag = False
Key = Val(Text1.Text)
Do While i < j
m = (i + j + 1) \ 2
If a(m) > Key Then j = m - 1 Else i = m + 1
If a(m) = Key Or a(m + 1) = Key Then flag = True: Exit Do
Loop
If flag Then
If a(m) = Key Then Text2.Text = Str(m) Else Text2.Text = Str(m + 1)
Else
Text2.Text = "找不到"
End If
程序运行时,数组元素a(1)到a(9)中的数据为12,24,27,34,39,46,68,73,84,在文本框Text1中输入“68”,执行该程序段,则下列表达式正确的是( )
k = 1: start = 1: end = 8: flag = 1
Do While k <= 3
For i = start To end - flag Step flag
If a(i) > a(i + flag) Then
t = a(i): a(i) = a(i + flag): a(i + flag) = t
End If
Next i
end = end – flag : flag = -flag : k = k + 1
t = start: start = end: end = t
Loop
For i = 1 To 8
List1.AddItem Str(a(i))
Next i
已知a(1)到a(8)的值是39,18,24,14,2,76,65,59,运行之后a(1)到a(8)的值是( )
i = 0: s = "": n = 0
Do While i <= 3
k = i: j = i + 1
Do While j <= 7
If a(j) < a(k) Then k = j
j = j + 1
Loop
If i <> k Then
t = a(i): a(i) = a(k): a(k) = t
n = n + 1
End If
s = s + Str(a(i)): i = i + 1
Loop
Label1.Caption = Str(n) + ":" + s
数组a(0)到a(7)依次为16, 19, 8, 20, 4, 12,6, 15,程序运行后,标签框Label1中显示的值为( )
图a |
图b |
图c |
代码和程序运行界面如下所示,请在划线处填入合适的代码,并且在加框处代码有错误,请改正:
Const n = 1000
Dim mw(0 To 1000) As String '存放转换后密文的字符
Function zh(s As String) As String '按字母表后移3位进行转换
Dim p As Integer,flag As Boolean
If s >= "a" And s <= "z" Then
p = Asc(s) - 96: flag = True
Else
p = Asc(s) - 64: flag = False
End If
①
If flag Then zh = Chr(p + 96) Else zh = Chr(p + 64)
End Function
Private Sub Command1_Click()
Dim i As Integer, j As Integer, t As String, a As Integer
Dim tmp As String, k As Integer, s As String
s = Text1.Text
k = 1: a = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
If t = " " Then
k = 0: mw(i) = t
Else
If k < 3 Then
mw(i + a) = t: a = -a
Else
tmp = zh(t)
j = i
Do While
②
j = j + 1
Loop
mw(j) = tmp
③
End If
End If
k = k + 1
Next i
For i = 1 To Len(s)
Text2.Text = Text2.Text + mw(i)
Next i
End Sub
请回答下列问题:
① ② ③
①每次将第i个数据和第2*i以及第2*i+1个位置的数据进行比较,将较大值交换到第i个位置上;
②从数组的第i(未排序数据个数一半位置)个位置重复步骤①一直比较到最前面,这样就可以将最大值交换到第1个位置;
③最终将1号位置上的值与未排序数据的最后一个进行交换,得到最大值;
④反复执行①②③三个步骤就可以将数据按升序排序;
过程如下图所示,其中a(1)=11,a(2)=25,a(3)=52,a(4)=39,a(5)=46,开始比较的位置从i=k\2个位置开始:
第一次排序过程:
步骤①:
步骤②:
步骤③:
第二次排序过程:
现要求在文本框Text1中输入一个整数k,对k个随机生成的两位奇数按上述排序方法进行排序,代码和程序运行界面如下所示,请在划线处填入合适的代码,并且在加框处代码有错误,请改正:
Dim a(1 To 100) As Integer
Dim k As Integer
Private Sub Command1_Click()
Dim i As Integer
k = Val(Text1.Text)
Randomize
For i = 1 To k
a(i) = ①
List1.AddItem Str(a(i))
Next i
End Sub
Private Sub Command2_Click()
Dim i As Integer, j As Integer, t As Integer, flag As Integer
For i = 1 To k - 1
For j = To 1 Step -1
If Not judge(i, j) Then
If ② Then
t = a(j): a(j) = a(2 * j): a(2 * j) = t
Else
t = a(j): a(j) = a(2 * j + 1): a(2 * j + 1) = t
End If
End If
Next j
t = a(1): a(1) = a(k - i + 1): a(k - i + 1) = t
Next i
For i = 1 To k
List2.AddItem Str(a(i))
Next i
End Sub
Function judge(t As Integer, s As Integer) As Boolean
③
If a(s) > a(2 * s) And a(s) > a(2 * s + 1) Or a(s) > a(2 * s) And 2 * s > k - t Then
judge = True
End If
End Function
根据以上代码回答问题:
① ② ③