题型:综合题 题类:常考题 难易度:困难
【bj】高中信息技术综合库——解析算法及程序实现1
①定义一个数组a(1 to 961)。产生一个3到6之间的随机整数k,将十进制数960均分成k份,字符在字符串中的位置除以k的余数决定该字符存放在第几份数据中(余数为1保存在第一份数据中,余数为2保存在第二份数据中……,余数为0保存在第k份数据中);
②用十进制数127减去每个字符的ASCII码值,得到的差作为该字符的密文,并保存在数组a中,同一段内的密文依次存放;
③将随机产生的数k加64后保存在数组元素a(961)中,并一起参与加密;
④将数组a中所有有密文值的数组元素从后往前依次存放到数组b中;
⑤将数组b中的每个密文用3位数字保存,不足3位的前面用0补足,然后依次连接保存在变量sc中;
⑥在文本框Text2中输出sc。
例如:
①若现有待加密的字符串为“zp123”,产生的随机数k=3,则960分成3份,每份可存放320个值,分别为a(1)至a(320),a(321)至a(640),a(641)至a(960);
②由于Asc(“z”) =122,则127-122=5。字符“z”在待加密字符串中的位置是1,除以k的余数为1,因此数字“5”放在第一份数据的第一个位置,即a(1)=5;同理可得,第一份数据为a(1)=5,a(2)=77;第二份数据为a(321)=15,a(322)=76;第三份数据为a(641)=78;
③将随机产生的k与十进制数64的和保存到a数组的最后一个值中,即a(961)=64+3=67;
④将数组a中所有有密文值的数组元素从后往前依次存放到数组b中,得到b(1)=67,b(2)=78,b(3)=76,b(4)=15,b(5)=77,b(6)=5;
⑤将数组b中的每个元素用0补足3位后依次连接并保存在sc中,得到sc=“067078076015077005”;
⑥输出sc。
注:(asc(“0”)=48,asc(“A”)=65,asc(“a”)=97)
Private Sub command1_Click()
Dim a(1 To 961) As Integer
Dim sr, sc As String
Dim i, j, k, m, n, t As Integer
Dim b(1 To 961) As Integer
Randomize
k = Int(Rnd * 4 + 3)
sr = text1.Text
For i = 1 To 961
a(i) = -1
Next i
a(961) = k + 64
t = 960 / k
For i = 1 To Len(sr)
m = i Mod k - 1
n = i \ k + 1
If i Mod k = 0 then n = n - 1: m = m + k
① = 127 - Asc(Mid(sr, i, 1)) ‘将密文存储到数组a中
Next i
For i = 1 To Len(sr) + 1
j = j + 1
Do While a(j) = -1
j = j + 1
Loop
b(Len(sr) + 2 - i) = a(j) ‘将有密文值的a数组元素存储到数组b中
Next i
For i = 1 To Len(sr) + 1
sc = ② ‘连接密文并保存到sc中
Next i
text2.Text = sc
End Sub
Function space(x As Integer) As String
For i = 1 To ③
space = space & "0"
Next i
End Function
① ② ③
⑴分别将十进制数x,y转换为二进制,并将转换的每位二进制数存储到数组a,b中;如果两个二进制位数不相等,则位数较少的前面用“0”补足,使之a,b数组元素个数一致;
⑵取出数组a,b中下标相同的数组元素进行运算,若值相同,则结果为0,否则为1;
根据上述运算方法,示例如表所示。
变量 | 十进制 | 二进制 | ||||
x | 19 | 1 | 0 | 0 | 1 | 1 |
数组a | a(1) | a(2) | a(3) | a(4) | a(5) | |
y | 9 | 0 | 1 | 0 | 0 | 1 |
数组b | b(1) | b(2) | b(3) | b(4) | b(5) | |
x xor y | 1 | 1 | 0 | 1 | 0 |
小明编写了一个VB程序,功能如下:在文本框Text1、Text2中分别输入x、y的值,单击“异或”按钮Command1,程序对数据进行异或运算,并将结果显示在列表框List1中。
试题篮