【加试题】小李要给全班学生拍合照,要求所有学生站成一排,中间高,两端低,小李采用如下排队方法:按身高信息从高到低排序,让身高第一位的同学单独站出来,身高第二位同学站在他的左手边,身高第三位同学站在他的右手边,再依次向两端安排其他人。每个学生的学号与身高信息已存人数据库中。小李编写了VB程序,从数据库中读取学号和身高信息,在“原始信息”下方的列表框List1中显示,单击“排队”按钮Command1,在“排好的队形”下方的列表框List2中显示排好的队形,程序界面如图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Const maxn=100
Dim id(1 To maxn)As Integer ‘存储每个学生的学号
Dim tall(1 To maxn)As Single ‘存储每个学生的身高
Dim n As Integer ‘存储学生的个数
Private Sub Form_Load()
‘从数据库得到学生的总人数n
‘从数据库读取学号信息,并存入id数组中
‘从数据库读取身高信息,并存入tall数组中
‘在列表框List1中显示学号与身高
End Sub
Private Sub Command1_Click()
Dim a(1 To maxn)As Integer ‘存储排好队形的学号
Dim b(1 To maxn)As Single ‘存储排好队形的身高
Dim i As Integer,j As Integer
Dim t1 As Integer,tr As Integer,mid As Integer
Dim tmp1 As Single,tmp2 As Integer
For i=1 To n-1
For j=n To i+1 Step-1
If Then ‘(1)
tmp1=tall(j):tall(j)=tall(j-1):tall(j-1)=tmp1
tmp2=id(j):id(j)=id(j-1):id(j-1)=tmp2
End If
Next j
Next i
If n Mod 2=0 Then ‘根据总人数的奇偶性,确定队形的中间位置
mid=n\2+1
Else
mid=(n+1)\2
End If
‘身高第一位的同学,安排在队形的中间位置
a(mid)=id(1)
b(mid)=tall(1)
t1=mid-1
tr=mid+1
For i=2 To n
If Then ‘(2)
a(tr)=id(i)
b(tr)=tall(i)
tr=tr+1
Else
a(t1)=id(i)
b(t1)=tall(i)
t1=t1-1
End If
Next i
List2.AddItem“位置”+“学号 ”+“身高”
For i=1 To n
List2.Addltem Str(i)+” ”+Str(a(i))+” ”+Str(b(i))
Next i
End Sub