【加试题】小李要给全班学生拍合照,要求所有学生站成一排,中间高,两端低,小李采用如下排队方法:按身高信息从高到低排序,让身高第一位的同学单独站出来,身高第二位同学站在他的左手边,身高第三位同学站在他的右手边,再依次向两端安排其他人。每个学生的学号与身高信息已存人数据库中。小李编写了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
(1)
处加框代码应改为;
(2)
处加框代码应改为。
答案: 【1】tall(i)>tall(j-1)或其他等价表达式
【1】i Mod 2=1或其他等价表达式