16.小吳為了探究冒泡排序過程中數據的“移動”情況,編寫了一個VB程序,功能如下:在列表框List1中顯示排序前數據(存儲在數組a中),在文本框Text1中輸入初始位置(即下標值),單擊“排序”按鈕Command1后,在標簽Label1中顯示指定初始位置的數據在排序過程中的位置變化情況,排序后的數據顯示在列表框List2中。程序運行界面如圖所示。 實現上述功能的VB程序如下,但加框處代碼有錯,請改正。 Dim a(1To 8)As Integer Dim n As Integer Private Sub Form_Load ( ) 'n=8,排序前的8個數據存儲在數組a中,并在列表框Listl中顯示 '代碼略 End Sub Private Sub Command1_Click ( ) Dim i As Integer,j As Integer,k As Integer Dim pos As Integer'變量pos存儲指定數據的位置(即下標值) Dim s As String'變量s存儲pos變化情況 s=Text1.Text pos=Val(Text1.Text) For i=1To n-1 For j=n To i+1Step-1 If a(j)<a(j-1)Then ‘(1) a(j-1)=a(j) a(j)=k '如果pos位置的數據參與交換,則更新pos值,記錄pos變化情況 If pos=j Then pos=j-1 s=s+”→”+Str(pos) ‘(2) pos=j s=s+”→”+Str(pos) End If End If Next j Next i Label1.Caption=”位置變化情況:”+s For i=1To n List2.AddItem Str(a(i)) Next i End Sub
。 (2)請在橫線處填入合適的代碼。 Dim sName(1To 50)As String'存放學生姓名 Dim sScore(1To 50)As Integer'存放學生分數 Dim recCount As Integer'存放學生人數 Private Sub Form_Load ( ) '本過程從數據庫中讀取學生數據,存儲在相應的變量中,并在List1中顯示 '代碼略 End Sub '整數轉換成長度固定的字符串 Function ads(x As Integer,n As Integer) As String Dim sx As String,nx As Integer,i As Integer sx=Str(x):nx=Len(sx) For i=1To n-nx sx=””+sx Next i
①
End Function Private Sub Command1_Click ( ) Dim A(0To 100)As Integer'存放每個分數的個數 Dim B(0To 100)As Integer'存放每個分數的名次 Dim mc As Integer,score As Integer,i As Integer For i=0To 100 A(i)=0 Next i For i=1To recCount'計算每個分數的個數 ②
Next i mc=1 For i=100To 0Step-1'計算每個分數的名次 If A(i)<>0Then B(i)=mc ③
End If Next i List2.Clear List2.AddItem”姓名 分數 名次” List2.AddItem”--------------” For i=1To recCount score=sScore(i) mc=B(sScore(i)) List2.AddItem sName(i)+ads(score,5)+”第”+ads(mc,3)+”名” Next i End Sub