16.【加試題】n個數(shù)據(jù)的冒泡排序需要經(jīng)過n-1遍加工,每一遍加工自下而上比較相鄰兩個數(shù)據(jù),把較小者交換到上面.小劉發(fā)現(xiàn):當某一遍加工過程中沒有數(shù)據(jù)交換,說明數(shù)據(jù)已經(jīng)有序,無需進一步加工.為此,小劉對算法進行優(yōu)化,編寫了一個VB程序,功能如下:運行程序時,在列表框List1中顯示排序前數(shù)據(jù),單擊“排序”按鈕Commaiid1,在列表框List2 中顯示這些數(shù)據(jù)按升序排序后的結(jié)果,在標簽Label3中顯示排序過程的加工遍數(shù).運行效果如圖所示. 實現(xiàn)上述功能的VB代碼如下,但加框處代碼有錯,請改正. Dim a(1To 8)As Integer Dim n As Integer Private Sub Form_Load
'n=8,排序前數(shù)據(jù)存儲在數(shù)組a中,并在列表框Listl中顯示 '代碼略 End Sub Private Sub Command1_Click
Dim flag As Boolean'flag值為True表示一遍加工中發(fā)生過交換 i=1 flag=True Do While'(1)i<=n-1Or flag=True
flag=False For j=n To i+1Step-1 If a(j)<a(j-1)Then k=a(j):a(j)=a(j-1):a(j-1)=k flag=True End If Next j i=i+1 Loop Str(i) Label3.Caption=“排序過程的加工遍數(shù)為“+'(2) For i=1To n List2.AddItem Str(a(i)) Next i End Sub.
小明按照上述方法,設(shè)計了一個字符串(僅包含ASCII字符)加密的VB程序,功能如下:單擊“加密”按鈕Commandl,程序依次將文本框Textl中每個字符的ASCII碼值作為1個字節(jié)轉(zhuǎn)換為兩個加密字符,連接這些加密字符,最后在文本框Text2中輸出加密結(jié)果.如圖1顯示了字符串中一個字符的加密過程: 程序運行效果如圖2所示. 實現(xiàn)上述功能的VB程序如下: (1)請?zhí)钊牒线m代碼. Private Sub Command1_Click ( ?。?br />Dim n As Integer,s As String,i As Integer,ss As String Dim a As Integer'存儲加密前字符的ASCII碼 Dim b1As Integer,b2As Integer'分別存儲分割、轉(zhuǎn)換后的兩個十進制數(shù) s=Text1.Text ①
For i=1To n a=Asc(Mid(s,i,1)) b1=a\16 b2=a Mod 16 ss=ss+Code2Char(b1)+Code2Char(b2) Text2.Text=ss Next i End Sub '十進制值轉(zhuǎn)換為加密字符的函數(shù) Function Code2Char(c As Integer) As String Dim s As String s=“IlikeCHNpostcard” Code2Char=②
End Function (2)若將“密碼表”中值為“0”對應的加密字符“I”改成“i”,加密后的密文可能無法解密,原因是