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