【文章內(nèi)容簡介】
自下而上比較相鄰兩個數(shù)據(jù),把較小者交換到上面。小劉發(fā)現(xiàn):當某一遍加工過程中沒有數(shù)據(jù)交換,說明數(shù)據(jù)已經(jīng)有序,無需進一步加工。為此,小劉對算法進行優(yōu)化,編寫了一個VB程序,功能如下:運行程序時,在列表框List1中顯示排序前數(shù)據(jù),單擊“排序”按鈕Commaiid1,在列表框List2 中顯示這些數(shù)據(jù)按升序排序后的結(jié)果,在標簽Label3中顯示排序過程的加工遍數(shù)。運行效果如第16題圖所示。第16題圖實現(xiàn)上述功能的VB代碼如下,但加框處代碼有錯,請改正。Dim a(1 To 8) As IntegerDim n As IntegerPrivate Sub Form_Load()39。n=8,排序前數(shù)據(jù)存儲在數(shù)組a中,并在列表框Listl中顯示 39。代碼略End SubPrivate Sub Command1_Click()Dim flag As Boolean 39。flag值為True表示一遍加工中發(fā)生過交換i = 1flag = TrueDo While 39。(1) i = n 1 Or flag = True flag = False For j = n To i + 1 Step 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 + 1LoopStr(i) = 排序過程的加工遍數(shù)為 + 39。(2)For i = 1 To n Str(a(i))Next iEnd Sub17.【加試題】某數(shù)據(jù)加密方法描述如下:(1)以字節(jié)為單位進行加密處理;(2)將1個字節(jié)的8位二進制數(shù)分割成前4位與后4位兩個二進制數(shù);(3)分別將上述兩個4位二進制數(shù)轉(zhuǎn)換為十進制數(shù);(4)將每個十進制數(shù)轉(zhuǎn)換為1個加密字符,對應的“密碼表”如下:值(十進制)0123456789101112131415加密字符IlikeCHNP0stcard小明按照上述方法,設計了一個字符串(僅包含ASCII字符)加密的VB程序,功能如下:單擊“加密”按鈕Commandl,程序依次將文本框Textl中每個字符的ASCII碼值作為1個字節(jié)轉(zhuǎn)換為兩個加密字符,連接這些加密字符,最后在文本框Text2中輸出加密結(jié)果。下表顯示了字符串中一個字符的加密過程:程序運行效果如第17題圖所示。實現(xiàn)上述功能的VB程序如下:(1)請在劃線處填入合適代碼。Private Sub Command1_Click()Dim n As Integer, s As String, i As Integer, ss As StringDim a As Integer 39。存儲加密前字符的ASCII碼Dim b1 As Integer, b2 As Integer 39。分別存儲分割、轉(zhuǎn)換后的兩個十進制數(shù)s = ① For i = 1 To n a = Asc(Mid(s, i, 1)) b1 = a \ 16 b2 = a Mod 16 ss = ss + Code2Char(b1) + Code2Char(b2) = ssNext iEnd Sub39。十進制值轉(zhuǎn)換為加密字符的函數(shù)Function Code2Char(c As Integer) As StringDim s As Strings = IlikeCHNpostcardCode2Char = ② End Function(2)若將“密碼表”中值為“0”對應的加密字符“I”改成“i”,加密后的密文可能無法解密,原因是