试题

试题 试卷

logo

题型:综合题 题类:常考题 难易度:普通

浙江省高中信息技术 加密问题练习

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

加密算法如下:

1)将明码中每个字符的八位二进制ASCII码(不足八位的左端补0,凑足八位)分成两段(左4位一段,右4位为另一段),如字符“C”的二进制ASCII值为01000011,分段后为0100,0011;

2)将高位段(左边4位)左移一位,并将原第一位数码移到第4位(如0100转化为1000),再转化为十六进制数(如1000化为8);

3)对另一段(右4位)执行2)所示算法,如0011→0110→6;

4)顺次连接两位十六进制数,得到该字符的暗码,如“C”的暗码为“86”;

5)将每个字符的暗码按照明码的顺序连接。

实现上述功能的VB程序如下,请回答下列问题:

(1)、按照加密算法,字符“J”的密文是
(2)、请在划线处填入合适代码。

  Private Sub Command1_Click()

  Dim i As Integer, j As Integer

  Dim m As Integer, k As Integer, c As String

  Dim x As Integer, y As Integer

  Dim d(1 To 8) As Integer     ‘数组d存储字符ASCII码二进制从左到右的各位数码

  Dim mw As String      ‘mw存储暗码

  mw =“”

  For i = 1 To Len(Text1.Text)

   c = Mid(Text1.Text,i,1)

   For j = 1 To 8

    d(j) = 0

   Next j

   m = Asc(c)

 

   Do While m > 0

    d(k) = m Mod 2

    m = m \ 2

    k =k-1

   Loop

  x = d(1) :y = d(5)

  For j = 1 To 3

   d(j) =d(j+1)

 

  Next j

  d(4) = x:d(8) = y

  mw = mw + btoh(d)

  Next i

  Text2.Text = mw

  End Sub

  ‘将数组元素中的二进制数转换成对应的十六进制数

  Function btoh(d() As Integer) As String

  Dim s As Integer, i As Integer, str1 As String, ch As String

  str1 = “0123456789ABCDEF”: s = 0: ch =“”

  For i = 1 To 8

   s = s * 2 + d(i)

   If i = 4 Then

    ch = Mid(str1,s+1,1)

    s = 0

   End If

   Next i

 

  End Function

举一反三
有N堆纸牌,编号分别为①,②,…。每堆上有若干张,但纸牌总数必为N的倍数。可以在任一堆上取若干张纸牌,然后移动。

移牌规则:在编号为①的堆上取的纸牌,只能移到编号为②的堆上;在编号为N(N≥2)的堆上取的纸牌,只能移到编号为N-1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。

现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。

例如N=4,4堆纸牌数分别为:

9

8

17

6

移动3次可达到目的:从③取4张牌放到④(9 8 13 10)→从③取3张牌放到②(9 11 10 10)→从②取1张牌放到①(10 10 10 10)。

现编写如下代码解决4堆任意张数牌的移动问题,请按提示补充划线句的代码:

Private Sub Command1_Click()

Dim aver As Single

Dim st As Integer     ‘统计移动的步数

Dim ssum, i, j As Integer

Dim a( 1 To 100) As Integer

a(1) = Val(Text1.Text)     ‘读取各堆牌张数,求总张数aver

a(2) = Val(Text2.Text)

a(3) = Val(Text3.Text)

a(4) = Val(Text4.Text)

ssum =a(1) + a(2) + a(3) + a(4)

aver=ssum \ 4     ‘求牌的平均张数aver

For i=1 To 4

  ① 

Next i

i=1     ‘过滤初端和末端的0

j = 4

Do While a(i) = 0 And i < 4

 i=i+1

Loop

Do While a(j) = 0 And j > 1

 j = j-1

Loop

st = 0

Do While i < j      ‘开始移动牌使数组a元素值均为0并过滤掉

  ② 

 a(i) = 0

 st = st + 1

 i=i+1

 Do While a(i) = 0 And i<j      ‘过滤掉数组a元素值均为0

   ③ 

 Loop

Loop

Print st      ‘输出移动次数

End Sub

返回首页

试题篮