1. 维吉尼亚(Vigenere)密码。如下图所示,分别用行和列表示待加密的字符(明文)和当前字符的密钥,行和列的交叉点的字符即为加密后的结果(密文)。在加密时,密文与明文的字母大小写形式保持一致,如,明文字母为大写,则加密后的密文字母也为大写;当密钥长度不足时重复使用密钥。例如:当明文M=HelloWorld,密钥K=abc时,密文C=HfnlpYosnd。运算过程如下所示:

明文:HelloWorld

密钥:abcabcabca

密文:HfnlpYosnd

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

B

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

C

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

D

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

E

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

F

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

G

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

H

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

I

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

J

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

K

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

L

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

M

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

N

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

O

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

P

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

Q

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

R

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

S

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

T

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

U

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

V

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

W

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

X

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

Y

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Z

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

依据上述算法描述设计了如下VB程序。请回答下列问题:

(1) 若明文是Jia,密钥是Pass,则输出的密文是:
(2) 请在横线处填上合适的代码。

Const MIN_ASC = 65       ′字母“A”的ASCII值

Function X2D(x As String) As String     ′字符串小写转成大写

Dim s As String, zf As String, i As Integer

s = “”

For i = 1 To Len(x)

zf = Mid(x, i, 1)

If zf >= “a” And zf <= “z” Then

            s = s +

Else

      s = s + zf
          End If
    Next i
    X2D = s

End Function

Private Sub Command1_Click()

Dim M As String, K As String, C As String, flag As Boolean

Dim i As Integer, t As Integer, ch As Integer, pos As Integer, j As Integer

M = Text1.Text             ′明文

K = Text2.Text              ′密钥

t = Len(K)

K = X2D(K)                   ′将密钥全部转成大写

C = “ ”                      ′加密后的结果

For i = 1 To Len(M)

ch = Asc(Mid(M, i, 1))

flag = False

If ch >= 97 And ch <= 122 Then ch = ch - 32: flag = True

  pos =                ′密钥的字符位置值

If pos = 0 Then pos = t

      j = Asc(Mid(K, pos, 1))               ′密钥字符的ASCII值

     ch = ch - MIN_ASC

     j = j - MIN_ASC

      ch =

      ch = ch + MIN_ASC

  If flag Then ch = ch + 32         ′设置字母的大小写形式

     C = C & Chr(ch)

Next i

Text3.Text = C

End Sub

【考点】
运算符、基本运算与表达式; 常量、变量及变量的赋值; 过程与自定义函数; 加密与解密算法;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
换一批
3. 编写一个VB抽奖程序,功能如下:从数据库读取相关数据并显示在列表框List1中,在文本框Text1中输入中奖人数,单击“抽奖”按钮Command1,在列表框List2中输出结果。

抽奖规则:中奖人数为1人,男女不限:

中奖人数超1人,男女对半(奇数时女性多1人)。

程序运行界面如图所示。

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

Dim xm(1 To 500) As String, xh(1 To 500) As String, xb(1 To 500) As String

Dim n As Integer      '学生总人数

Dim a(1 To 100) As Integer     '抽中序号

Private Sub Form_ LoadO

'本过程读取n位同学的序号、姓名和性别,

'分别存储在数组xh、xm、xb中

并在列表框List1中显示,代码略

End Sub

Private Sub Command1_ ClickO

  Dim rs As Integer, m As Integer, x As Integer, girl As Integer, I As Integer

  Dim xbs(1 To 500) As Integer

  Randomize

  List2.Clear

  List2.AddItem "姓名" & " " & "性别"

  rs=   ① 

  For i=1 To n

    If xb(i)="女" Then xbs<(i)=1 Else xbs(i)=0

  Next i

  m=0

  girl=0

  If rs= 1 Then

  x= Int(Rnd* n)+ 1

  List2.AddItem xm(x) &" "&xb(x)

Else

  Do While m<rs

    x = Int(Rnd* n)+ 1

    If checkf(x) Then

      m=m+1: a(m)=x

      girl = girl + xbs(a(m))

      If   ②   Then

        a(m)=0: m=m-1

      ElseIf girl> (rs+1)\2 Then

        a(m)=0: m=m-1

          ③ 

      End If

    End If

  Loop

  For i=1 To m

    List2.AddItem

  Next i

End If

End Sub

Function checkf(p As Integer) As Boolean

  '核对重复中奖,未中过奖返回True

  '代码略

End Function

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

 ② ③ 

(2) 程序中加框代码有错,请改正。
综合题 普通