题库 高中信息

题干

n个数据的冒泡排序需要经过n-1遍加工,每一遍加工自下而上比较相邻两个数据,把较小者交换到上面。小刘发现:当某一遍加工过程中没有数据交换,说明数据已经有序,无需进一步加工。为此,小刘对算法进行优化,编写了一个VB程序,功能如下:运行程序时,在列表框List1中显示排序前数据,单击“排序”按钮Commaiid1,在列表框List2 中显示这些数据按升序排序后的结果,在标签Label3中显示排序过程的加工遍数。运行效果如第16题图所示。

实现上述功能的VB代码如下,但加框处代码有错,请改正。
Dim a(1 To 8) As Integer
Dim n As Integer
Private Sub Form_Load()
'n=8,排序前数据存储在数组a中,并在列表框Listl中显示
'代码略
End Sub
Private Sub Command1_Click()
Dim flag As Boolean 'flag值为True表示一遍加工中发生过交换
i = 1
flag = True
Do While    '(1)  
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" + 1
Loop
Label3.Caption = "排序过程的加工遍数为" +     '(2)
For i =" 1" To n
List2.AddItem Str(a(i))
Next i
End Sub
上一题 下一题 0.99难度 填空题 更新时间:2017-02-15 04:45:03

答案(点此获取答案解析)

同类题3

(加试题)小明编写了一个数据加密的VB程序功能如下:在文本框Text1中输入明文,单击“加 密”按钮Command1后在文本框Text2中显示加密后的密文,运行界面如下图所示。

其中加密算法如下:
①将明文中的ASCII码每3个字节为一组(该明文字符串均为ASCII码,且字节数为3的倍数),顺次连接 后得到24位二进制数
②将①中的24位二进制数每8位进行一次翻转操作,比如原来的“0101 0001”变为“1000 1010”
③将②所得24位二进制数逐位取反,比如原来的“1110”变为“0001”
④将③中所得的24位二进制数每6位一组转换为相应的十进制数,即得到对应的密文
⑤将所有密文顺序连接并输出 实现上述功能的VB程序如下,请回答下列问题:
(1)按照上述加密算法进行加密,则“ABC”的密文是________(已知“A”的ASCII码值为65)
(2)请在划线处填入合适代码:
Dim a(1 To 24) As Integer, k As Integer
Private Sub Command1_Click()
Dim mw As String, ch1 As Integer, ch2 As String, ch3 As String, s As String
Dim m As Integer, i As Integer, j As Integer
s = ""
mw = Text1.Text    ‘mw存储明文字符串
For i = 1 To Len(mw) Step 3
For j = 1 To 24    ‘初始化数组,用于存储三个字节的二进制数
a(j) = 0
Next j k=1
ch1 = Asc(Mid(mw, i, 1))
ch2 = Asc(Mid(mw, i + 1, 1))
ch3 = Asc(Mid(mw, i + 2, 1))
Convert (ch1)    ‘调用自定义过程Convert
Convert (ch2)
Convert (ch3)
For j = 1 To 24    ‘逐位取反
①____________
Next j
For j = 1 To 4 m = 0
For p =  ②____________ To j * 6    ‘每6位一组进行权值相加
m = m * 2 + a(p) Next p
s = s & m‘&连接运算符,连接数字和字符串时,会将数字自动转换为字符串 Next j
Next i
Text2.Text = s
End Sub
Sub Convert(x As Integer)
Dim i As Integer, j As Integer
Do While x > 0
a(k) = x Mod 2
x = x \ 2
k = k + 1
Loop
j = ③_____    ‘8位二进制数,高位补“0”
k = k + j
End Sub

同类题4

(二进制转十六进制)从文本框 TextB 输入一串不带符号位的二进制整数,单击“转换”按钮,将二进制转换为十六进制并显示在文本框 TextH 中。程序界面如图所示:

转换方法:先从右往左将二进制数分割成 4 位一组,若最左边的一组不足4位,则用 0 将高位补足,然后将每 4 位二进制数转换为 1 位十六进制数。
(1)观察程序代码,可知“转换”按钮的对象名为____________。(单选,填字母:
A.TextB/ B.TextH/B.Command1/C.Convert/D.转换)
(2)为实现上述功能,请在划线处填入合适的代码。
Private Sub Convert_Click()
Dim a(1 To 100) As Integer, temp As Integer
Dim s As String, res As String, n As Integer, r As Integer
res = ""
s=TextB.text
n = Len(s)
For i = 1 To n
a(i) = Val(Mid(s, i, 1))
Next i
t = n \ 4
r =       
temp = 0
For i = 1 To r '将最高的 r 位转换为十六进制
      
Next i
If temp > 9 Then
res = Chr(temp + 55)
ElseIf temp > 0 Then
res = CStr(temp) ‘Cstr()函数用于将数值转换为字符串,同时删除前导空格
End If
For i = 1 To t '将t组4位二进制转换为十六进制
Temp=0
For j=1 to 4
temp = temp+a(j+r+4*(i-1))*2^(4-j)
Next j
If temp > 9 Then
res = res + Chr(temp + 55)
Else
res = res + CStr(temp)
End If
Next i
TextH.Text = res
End Sub
第①处代码为______________________________________________ 
第②处代码为______________________________________________    
(3)若在文本框 TextB 中输入“101000111”,则单击”转换”按钮后的输出结果为:_________。