1. 【加密与解密问题】某数据加密方法描述如下:

⑴以字节为单位进行加密处理;

⑵将1个字节的8位二进制数分割成前4位与后4位两个二进制数;

⑶分别将上述两个4位二进制数转换为十进制数;

⑷将每个十进制数转换为1个加密字符,对应的“密码表”如下:

值(十进制)

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

加密字符

I

l

i

k

e

C

H

N

p

o

s

t

c

a

r

d

小明按照上述方法,设计了一个字符串(仅包含ASCⅡ字符)加密的VB程序,功能如下:单击“加密”按钮Command1,程序依次将文本框Text1中每个字符的ASCⅡ码值作为1个字节转换为两个加密字符,连接这些加密字符,最后在文本框Text2中输出加密结果。下表展示了字符串中一个字符的加密过程:

实现上述功能的VB程序如下:

程序运行效果如图所示。

(1) 请在划线处填入合适的代码。

Private Sub Command1_Click ( )

Dim n As Integer, s As String, i As Integer, ss As String

Dim a As Integer    ‘存储加密前字符的 ASCII码

Dim b1 As Integer, b2 As Integer    ‘分别存储分割、转换后的两个十进制数

s = Text1. Text

n = Len (s)

For i = 1 To n

  a =     ①     

  b1 = a\16

  b2 =a Mod 16

  ss= ss + Code2 Char(b1) + Code2 Char(b2)

  Text2. Text=ss

Next i

End Sub

‘十进制值转换为加密字符的函数

Function Code 2 Char(c As Integer) As string

Dim s As String

s = “IlikeCHNpostcard”

Code2Char =     ②     

End Function

 ② 

(2) 若将“密码表”中值为“0”对应的加密字符“I”改成“i”,加密后的密文可能无法解密,原因是
【考点】
运算符、基本运算与表达式; 常量、变量及变量的赋值;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 普通
能力提升
换一批
1. 【游戏问题】在某打牌游戏中,一开始每个玩家各有17张牌,牌型从小到大分别为“3~10、J、Q、K、A、2”,每种牌最多4张,现在按指定规则的顺序打牌,打完为止。规则如下:

⑴先打顺子牌(顺子指连续的5个及以上牌型如45678,顺子最大到A),若有多个顺子,先长后短,长度相同按先小后大的顺序打出。

⑵然后按4张、3张、2张、1张的顺序出牌,同一个牌型从小到大。

小刘依据上述算法设计了VB程序,其中牌型“1”用数字“0代替表示,运行界面如图所示,程序代码如下,请回答下列问题。

(1) 若初始牌型为344445566790JQKA2,第2次出的牌为
(2) 请在划线处填入合适代码,使程序完整。

Private Sub Command1_ Click ( )

Dim i As Integer, j As Integer

Dim aa (1 To 13) As Integer, max As Integer

Dim t As Integer, last As Integer

Dim sa As String, stem As string

Dim flag As Boolean

Const s = “34567890JQKA2”     ‘为方便计算,牌10用0代替

‘ 在标签1abe11显示初始牌型,洗牌后数组a各元素分别存储牌型3~2的数量

‘ 代码略

t=17    ‘刚开始牌有17张

Do While t > 0    ‘打牌

  flag = True

  Do While flag     ‘寻找牌中有没有顺子牌

    max = 0:k = 1:flag False

    For i=1 To 11

      If     ①      Then

        k = k+1

        If k > max Then

          max = k

          last = i+1     ‘ 记录连续牌的最后一张

        End If

      Else

        k=1

      End If

    Next i

    If max > = 5 Then    ‘ 有顺子牌,把最长的这把顺子打出来

      flag = True: sa = “”

      For j =      ②        To last

        stem = Mid (s, j, 1)

        sa = sa + stem + “”

        aa(j)= aa(j)-1

      Next j

      List1. AddItemsa     ‘ 顺子在列表框显示

      t = t-max

      End If

  Loop

  For i = 1 To 13      ‘ 出4个一样的牌

    If aa(i) = 4 Then

      stem = Mid (s, i, 1)

      List1. AddItemstem + stem + stem + stem

      aa(i) = 0

            ③      

    End If

  Next i

   ‘ 3张、2张、单张出牌,具体代码略

Loop

End sub

 ② ③ 

综合题 普通
3. 【约瑟夫问题】猴子选大王。有n(n≤100)猴子举行选大王大会,由于大家谁也不服谁,因此有猴子提议使用玩游戏的方式来选出大王。首先将n只猴子进行随机编号(编号为1到n,猴子编号不重复),然后产生一个随机数k,游戏规则如下n只猴子按编号从小到大的顺序围成一圈,并从编号为1的猴子开始报数(1,2,3…),报到k的猴子出圈(出圈即被淘汰);接着再由出圈的猴子的下一只猴子重新开始报数(1,2,3…),报到k的猴子又出圈,如此继续,直到圈中只剩下一只猴子,它就是猴子大王。要求依次输出出圈的猴子的编号及猴子大王的编号。

例如n=8,k=6,则依次出圈的猴子的编号为6、4、3、5、8、7、2,最后剩下的猴子的编号为1,即猴子大王的编号为1。

程序运行时,在文本框Text1中输入猴子的总数n,单击“产生随机数k”按钮Command1将生成一个随机整数k(1≤k≤n),并在标签 Label3中显示k的值,单击“选大王”按钮Command2后,将在文本框Text2中显示依次出圈的猴子的编号,在标签Label6中显示猴子大王的编号。程序运行结果如图所示。

实现上述功能的VB程序如下,请在划线处填入合适的代码。

Dim k As Integer, n As Integer

Private Sub Command1_Click ( )

  Randomize

  n= Val(Text1. Text)

  k = Int (Rnd n) + 1

  Label3. Caption Str(k)

End Sub

Private Sub Command2_Click ( )

  Dim a (1 To 100) As Integer    ‘a(i) = 1 表示编号为i的猴子在圈上,a(i) = 0表示出圈

  Dim b (1 To 100) As Integer    ‘ 数组元素b(i)=x,表示第i只出圈的猴子的编号为x

  Dim i As Integer, st As String, j As Integer

  Dim p As Integer, sum As Integer    ‘ p表示出圈的猴子数,sum表示报数的数值

  For i = 1 To n

    a(i) = 1

  Next i

  p = 0

  j = 0

  Do While p <> n-1

          ①    

    Do While sum < k    ‘ 依次报数,直到报到k为止

      j=j+1

      If j > n Then j = 1    ‘ 报数至最后时,将重头继续报

      sum = sum + a(j)

    Loop

    a(j) = 0: p =p+1

          ②    

  Loop

  For i=1 To p

    st= st str(b(i)

  Next i

  Text2. Text = st

  i=1

  Do While a(i) <> 1

    i=i+1

  Loop

  Label16. Caption =     ③    

End Sub

 ② ③ 

综合题 普通