16.小明基于選擇排序算法編寫了一個(gè)VB程序,功能如下:某班有50個(gè)學(xué)生,從中選擇10個(gè)身高最高的同學(xué),要求被選的任何兩個(gè)人不能身高一樣(所給的數(shù)據(jù)保證能選10個(gè))。 實(shí)現(xiàn)上述功能的VB程序如下,但加框處代碼有錯(cuò),請改正。 Const n=50 Dim d(0 To n) As single,name(1 to n) as string '讀入50個(gè)學(xué)生的身高,依次存入d(1)…d(50),最高身高小于2,姓名存入name(1)…name(50) '代碼略 Private Sub Command1_Click ( ?。?br />Dim i As Integer,j As Integer,temp As single,k As Integer,r as string d(0)=2 For i=1 To 10
For j=i To n If d(j)<d(i-1)Then IfThen k=j End If End If Next j If k<>i Then temp=d(k):d(k)=d(i):d(i)=temp r=name(k):name(k)=name(i):name(i)=r End If Next i For i=1 To 10‘輸出被選的10個(gè)人的名字和身高。 List2.AddItem name(i) & d(i) Next i End Sub
(2)請?jiān)跈M線處填入合適的代碼。 Const n=5000 Dim a(0To n) As Integer'a(i)保存第i條記錄的開始房間號(hào) Dim b(0To n) As Integer'b(i)保存第i條記錄的房間數(shù) Dim c As Integer,k As Integer,sp As Integer'k為原始記錄數(shù) '讀取原始k條記錄的數(shù)據(jù),依次存入a(1),b(1),a(2),b(2)…a(k),b(k),代碼略 '為了程序處理方便,虛設(shè)了下面2條記錄 a(0)=0:b(0)=0:sp=k+1:a(sp)=10000:b(sp)=0 Private Sub Command1_Click ( ?。?br />Dim i As Integer c=Val(Text1Text)'c為退掉的房間號(hào) i=1 Do While a(i)<c'查找房間c,應(yīng)該登記在某位置 i=i+1 Loop i=i-1 '下面為處理退房登記問題 If a(i)+b(i)=c Then If ①
Then'第4種情況,上下靠 b(i)=b(i)+1+b(i+1) For j=i+1To sp-1 a(j)=a(j+1):b(j)=b(j+1) Next j sp=sp-1 Else'第1種情況,上靠 b(i)=b(i)+1 End If ElseIf c+1=a(i+1)Then'第2種情況,下靠 a(i+1)=c:b(i+1)=b(i+1)+1 Else'第3種情況,上下不靠 For j=②
a(j)=a(j-1):b(j)=b(j-1) Next j a(i+1)=c:b(i+1)=1:sp=sp+1 End If ‘下面為輸出登記的記錄,不包括虛設(shè)的兩條記錄 For i=1to ③
List3.AddItem“第“& Str(i) &“記錄(“& Str(a(i)) &“,“& Str(b(i)) &“)“ Next i End Sub