题库 高中信息

题干

(加试题)维吉尼亚密码。如下图所示,分别用行和列表示待加密的字符(明文)和当前字符的密钥,行和列的交叉点的字符即为加密后的结果(密文)。在加密时,密文与明文的字母大小写形式保持一致,如:明文字母为大写,则加密后的密文字母也为大写;当密钥长度不足时重复使用密钥。

 

例如:当明文M=HelloWorld,密钥K=abc时,密文C=HfnlpYosnd。运算过程如下所示:
明文:HelloWorld
密钥:abcabcabca
密文:HfnlpYosnd
依据上述算法描述设计了如下VB程序。请回答下列问题:
(1)若明文是Jia,密钥是Pass,则输出的密文是:_________
(2)请在划线处填上合适的代码
Const MIN_ASC = 65
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
上一题 下一题 0.99难度 填空题 更新时间:2019-04-06 11:23:32

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

同类题5

字符串删除与插入:给定一个长度不超过100位的字符串S,现有以下两种操作指令:
指令1(删除):给出一个字符串S1,在字符串S中找到最左边的一个字符串S1,将其删除,若在S中不存在字符串S1,则字符串S不变。
例如:S=“China is a big family,it is big”   S1=“big”
则执行指令1后,S=“China is a family,it is big”
若S1=“small”,则S不变。
指令2(插入):给出一个字符串S2,和一个整数w,将S2插入到S中以w开始的位置。
例如:S=“a big family”   S2=“very ”   w=3
则执行指令2后,S=“a very big family”
注意S中“a”后有一个空格,S2中“y”后有一个空格
实现上述功能的VB程序如下。请在划线处填入合适代码。
Dim S As String
Private Sub Command1_Click()  ’单击Command1实现删除指令
Dim S1 As String
S = Text1.Text
S1 =" Text2." Text
S = del(S1)
Text5.Text = S
End Sub
Private Sub Command2_Click()  ’单击Command2实现插入指令
Dim S2 As String, W As Integer
S = Text1.Text
S2 = Text2.Text
W = Val(Text4.Text)
S =     (1) ’调用函数,实现插入指令
Text5.Text = S
End Sub
Function del(S1 As String) As String  ’在字符串S中查找并删除S1
Dim S3 As String
For i =" 1" To Len(S) - Len(S1) + 1
S3 = ""   ’S3表示从位置i开始,取出长度和S1相同的字符串
For j =" i" To i + Len(S1) - 1
S3 =" S3" + Mid(S, j, 1)
Next j
If     (2)  Then   ’如果找到S1,则将S1删除
S =" Mid(S," 1, i - 1) + Mid(S, i + Len(S1), Len(S) - Len(S1) - i+ 2)
del = S
Exit Function    ’删除左边的第一个S1后,退出函数,以保证只删除一次
End If
Next i
End Function
Function add(S2 As String, W As Integer) As String
S =  Mid(S, 1, W - 1) + S2 + (3)       ’将S2插入W开始的位置
add = S
End Function