浙江省五年(2015-2019)高中学考、高考选考信息技术VB真题分类汇编

浙江省五年(2015-2019)高中学考、高考选考信息技术VB真题分类汇编

1.(2019年4月)给定m个区间和1个数组(有n个元素),现要求根据各区间限定的取值范围,将该数组依次分割成m + 1个段。具体分割方法如下:

●第1段是从数组首个元素开始、元素值都属于第1区间的最长连续元素段。如果首个元素不属于第1

区间,则第1段元素个数为0;

●第1段分割后的剩余元素,用同样的方法来依次分割第2段、第3段、…、第m段;

●第m段分割后的剩余元素分割到第m + 1段(剩余段)。

若第p(1≤p≤m-1)段末尾连续元素的值也同时属于第p+1区间,则这块连续元素称为第P段“重叠块”,该段其余部分称为第P段“非重叠块”。由于不存在第m+1区间,这里特别规定:第m段的全部元素都分割到第m段“非重叠块”,第m段“重叠块”的元素个数为0。一个数组分段示例如下图。图中数组第1个元素10不属于第1区间[0,5],因此第1段的元素个数为0。10和20属于第2区间,而33不属于第2区间,因此第2段只包含10和20两个元素。第3段末尾连续3个元素的值也同时属于第4区间。因此,第3段“非重叠块”包含33、58、46,第3段“重叠块”包含55、62、69。

(1)给定2个区间依次为[110,50]、[30,80],数组各元素为“12,44,34,45,66,50,45,70”,则第1段“重叠块”中的元素个数为个。

(2)小李根据上述描述,设计了一个统计各段“非重叠块”、“重叠块”和剩余段中元素个数的算法。算法的VB程序如下,请在划线处填入合适的代码。

Const n = 18, m = 6

Dim a(1To n) As Integer

Dim b(1To2 * m) As Integer

'b(1)、b(2)为第1区间的下限和上限,b(3)、b(4)为第2区间的下限和上限,...

Dim c (1To2*m + 1) As Integer'数组用于保存统计结果:

'c(1)、c(2)分别存储第1段“非重叠块”和“重叠块”的元素个数

'c(3)、c(4)分别存储第2段“非重叠块”和“重叠块”的元素个数

'c(2m-1)存储第m段“非重叠块”元素个数,c(2m)存储第m段“重叠块”元素个数(值为0)

'c(2m + l)存储剩余段元素个数

Private Sub Command1 _Click()

Dim i As Integer,p As Integer,L As Integer,LL As Integer '读取n个数据并保存在数组a中.代码略

'读取m个区间的下限和上限并保存在数组b中,代码略

For i = 1To2 * m+1

c(i) = 0

Next i

i = 1: p = 1

L = 0 :LL = 0

Do While

If IsIn (i,p) Then

If IsIn (i, p + 1) Then

LL=LL+ 1

Else

LL=0

End If

i = i + 1

Else

c(2*p -1) = L

c(2*p )= LL

L = 0 :LL = 0

p = p + 1

End If

Loop

If i <= n Then

c(2 * p- 1)=n - i + 1

Else

c(2*p - 1) = L

c(2*p) = LL

End If

‘输出统计结果,代码略

End Sub

'函数IsIn用来判断a(i)值是否属于笫p区间

Function Isln (i As Integer, p As Integer) As Boolean

If p>m Then

Isln = False

Else

If Then Isln = True Else Isln = False

End If

End Function

【答案】(1)3(2)i<=n And p<=m L=L+LL+1a(i)>=b(2*p-1)And a(i)<=b(2*p) 【解析】本题考查算法及其程序实现。

(1)给定区间[30,80],可以看出元素44,34,45属于重叠块,故为3个。

(2)①自定义函数的注释语句“函数IsIn用来判断a(i)的值是否属于第p区间”是本题的突破口。变量i 代表数组a的下标,p代表第几个区间。Do循环过程中i和p都不断递增,这两个都不能超越最大值,得出循环条件为:i<=n And p<= m。②变量LL存储重块的元素个数,L存储非重叠块的元素个数。题干要求重叠元素必须是第p块末尾连续的一段,如果第i个元素不属于p+1段,则前面累计到LL中的个数要算在非重叠块元素个数L中,故这一空为:L=L+LL+1。③参考注释语句“自定义函数IsIn用来判断a(i)值是否属于第p区间”,区间的下限和上限分别为b(2 *p-1)、b(2* p),则判断a(i)是否属于此区间的条件为:a(i)>=b(2* p-1) And a(i)<=b(2* p)。

2.(2018年11月)某种数据加密方法描述如下(加密前后的数值都是0-255):

?以m个数据为一段,将n个待加密数据依次分割成若干个数据段,剩余数据(个数小于m)为独立数据段。

?数据加密规则:

数据个数等于m的数据段,先进行值变换,再进行位置变换,得到加密数据段。

数据个数小于m的数据段,只进行值变换,直接得到加密数据段。

?依次合并加密数据段,即为最后的加密数据。

值变换:用值变换密钥数组x(元素个数为m,值为0~255的整数),将待加密数据段中的数据进行值变换,方法如下:

值变换后第i个元素=(待加密数据段第i个元素+x(i))Mod256,其中i=1,2,……,m

位置变换:用位置变换密钥数组y(元素个数为m,值为1~m的不重复整数),将上述值变换后的m个元素进行段内位置变换,方法如下:

加密后数据段第y(i)个元素=值变换后第i个元素,其中i=1,2,……,m

例如,n=5,m=3的数据加密过程如下:

(1)已知m = 3,数组x与数组y中的数据如下表所示。则待加密数据段“155,1,250”加密后的数据段为_____ _,填数据,用逗号分隔,,

x(1) x(2) x(3) y(1) y(2) y(3)

102030312

(2)小张根据上述加密算法,设计了一个对应的解密程序,其VB代码如下,请在划线处填入合适的代码(解密与加密使用相同的密钥数据)

Private Sub Command1_Click()

Const n = 100

Const m = 6

Dim i As Integer, j As Integer

Dim a(1To n) As Integer, b(1To n) As Integer

Dim x(1To n) As Integer, y(1To n) As Integer

'读取值变换与位置变换密钥数据,分别保存在数组x与y中,代码略

'读取待解密数据,保存在数组a中,代码略

'下面进行位置变换:位置变换后数据保存到数组b中

For i = 1To①

For j = 1To m

Next j

Next i

For i = (n \ m) * m + 1To n

b(i) = a(i)

Next i

'下面进行值变换:值变换后数据仍保存到数组b中

j = 1

For i = 1To n

b(i) = ③

j = j + 1

If j > m Then j = 1

Next i

'输出解密后数据,代码略

End Sub

【答案】(1)21,24,165

(2)①n\m或Int(n/m)或其他等价表达式

②b((i- 1) * m+j)=a((i-1)*m+y(j))或其他等价语句

③(b(i)+256- x(j)) Mod256或(b(i)+ 256- x((i- 1)m+1))Mod256或其他等价语句

【解析】本题考查数组在实际问题中的使用。程序使用到了4个数组,数组a为待解密数组,数组b用来存放解密后的数组,数组x为值变换密钥数组,数组y为位置变换密钥数组。解密和加密的过程相反,解密过程包含3个循环,第一个外循环先把n个数据按每段m个进行分段,内循环进行位置变换,第二个循环处理的是分组剩下的元素,第三个循环是进行值的变换。

(1)数据加密过程为“155,1,250”各自加上x(i)变为“165,21,280”,除256取余后为“165,21,24”,根据数组y变换位置后为“21,24,165”,故填:21,24,165。

(2)①外循环把n个数据按m个数据为一段,进行分段,故填:n\m或Int(n/m)。②从加密过程中知道b(1)对应a(y(1)),得到初步的对应关系,下标的表示需要知道元素在第几段,并且是这段中的第几个。这段内循环的循环体中i和j的含义是当前元素为第i段的第j个,则下标可以表示为(i-1)*m+j,数组a位置变换后放人数组b,故填:b((i- 1)*m+j)=a((i-1)*m+y(j))或其他等价语句。③所在循环体第一行,进行第i个数据的值变换,第二行和第三行使j一直保持在1到m之间,故j是用来做数组x中元素的下标。b(i)加密时加了x(j),所以要减去,但是加密前的b(i)可能小于x(j),而b(i)的值在0到255之间,则先加上256,再减x(j),结果可能超过255,最后再除以256取余,故填:(b(i)+ 256- x(j)) Mod256或(b(i)+256-x((i-1)mod m+1)) Mod256或其他等价语句。

3.(2018年4月)为分析数组a中各元素依次变化的情况,进行如下定义:

●变化段:数组中相邻两个元素构成一个变化段。变化段有上升段(a(i)>a(i-1))、下降段(a(i)

和持平段(a(i)=a(i-1))。数组a中的n个元素可构成n-1个依次排列的变化段。

●波峰:从上升段转到下降段形成一个波峰。波峰的起点是峰顶前所有连续上升段中的第1个,终点是

峰顶后所有连续下降段中的最后1个。

●对称波峰:上升段与下降段个数相同的波峰称为对称波峰。

下图为一组数据的变化段及波峰示意图。

现要求统计数组a各元素依次变化过程中“对称波峰”的个数。小李依据上述描述设计如下VB程序。请回答下列问题:

(1)数组元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”依次变化过程中“对称波峰”的个数为。(2)请在划线处填入合适的代码。

Const n = 20

Dim a(1To n) As Integer

Private Sub Form_Load()

'读取数据,并存储到数组a中,代码略

End Sub

Private Sub Command1_Click()

Dim flag As Integer '存储变化段的状态:1表示升,-1表示降,0表示平

Dim count As Integer '存储对称波峰段的个数

Dim steps As Integer

Dim i As Integer

flag = 0: steps = 0: count = 0

For i = ①To n

If a(i) > a(i - 1) Then

If IsSymPeak(flag, steps) Then count = count + 1

If flag = 0Or flag = -1Then

Else

steps = steps + 1

End If

flag = 1

ElseIf a(i) = a(i - 1) Then

If IsSymPeak(flag, steps) Then count = count + 1

steps = 0

flag = 0

Else

steps = steps - 1

flag = -1

End If

Next i

If IsSymPeak(flag, steps) Then count = count + 1

Text1.Text = Str(count)

End Sub

Function IsSymPeak(flag As Integer, steps As Integer) As Boolean

If③Then

IsSymPeak = True

Else

IsSymPeak = False

End If

End Function

【答案】(1)3(2)①2②steps=1③flag=-1And steps=0或其他等价表达式【解析】本题考查算法及其程序实现。

(1)根据题意可知,数组元素“1,4,3,3,2,6,8,7,9,3,4,7,9,6,3,1”中共有3个“对称波峰”。

(2)①根据"Ifa(i)>a(i-1)”知,变量为数组元素在数组a中存放的位置,为了比较所有的数组元素,的值应该从2开始,故答案是2。②分析代码可知,代码中上升段steps值加1,下降段steps值减1。如果是对称波峰,到达对称波峰的终点时steps的值必定为0。如果当前段属于上升段,而前面为下降段或持平段,则当前位置刚好处于拐点,即steps = 1,表示拐点后变量steps重新从1开始计数,故答案是steps=1。③自定义函数IsSymPeak()的主要作用是判断是否属于“对称波峰”,当前面处于下降段且变量steps的值为0时,则说明前面刚好是一个对称波峰,因此函数IsSymPeak的返回值为True,否则为False,故答案是flag=-1 AndsteDs=0。

4.(2017年11月)由数组a生成数组b的方法描述如下:

(1)将数组a中的n个元素依次分割出若干个数据块,每个数据块有m×m个元素,m最大值为8,最小值为2。分割时,按尽可能大的数据块进行分割;

(2)对每个分割出的数据块用“方阵转换法”进行转换,每次转换后得到的数据块依次存储在数据b中;(3)数组a分割后的剩余元素(个数小于4),直接依序存储到数组b中。

例如n=140时,可依次分割出3个数据块,元素的个数分别为64(8×8)、64(8×8)、9(3×3),剩余元素为3个。

“方阵转换法”过程如下:将数据块中m×m个元素按行序排列成一个数字方阵,从该数字方阵中按列序得到转换后元素的次序。以3×3数据块为例,转换过程如下图所示:

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

(1)当n=120时,分割出的第3个数据块元素个数为。

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

Const n = 120

Dim a(1To n) As Integer

Dim b(1To n) As Integer

Private Sub Command1_Click()

Dim m As Integer, i As Integer

Dim Start As Integer '当前未分割数据的第1个元素下标

Dim Left As Integer '当前未分割数据的个数

Dim pa As Integer '数组a的下标

Dim pb As Integer '数组b的下标

'读取n个转换前的数据,依次存储到a(1)、a(2)、……a(n)中,代码略m = 8

Start = 1

Left = n

Do While Left > 3

If Left < m * m Then

m = ①

Else

pa = Start

pb = Start

For i = 1To m * m

b(pb) = a(pa)

pb = pb + 1

If i Mod m = 0Then

Else

pa = pa + m

End If

Next i

Start = Start + m * m

End If

Loop

For i = Start To n

b(i) = a(i)

Next i

'依次输出转换后数据b(1)、b(2)、……b(n)中,代码略

End Sub

【答案】(1)4(2)①m-1②pa = Start+i\m③Left=Left—m* m

【解析】本题考查“方阵转换法”算法及其程序实现。

(1)当n=120时,可依次分割出3个数据块,元素的个数分别为64(8 * 8)、49(7 * 7)、4(2 * 2),剩余3个元素。所以第3个数据块为4个元素。

(2)①根据题意可知,如果left无法分割出m*m的数据块,则应该尝试(m-1)* (m-1)的数据块,所以此处应减小m的值,故答案是m-1。

②要在b数组逐个放人a数组中的值,此处必然要确定a数组的下标pa的值。经过分析,在m*m方阵的行列转换过程中,每行的第一项(i Mod m= 0)数组下标为Pa= Start+i\m,则后面的数的下标依次为Pa=Pa+ m。

③一个数据块处理完后,Left的值减少,其值为Left=Left-m*m。

5.(2017年4月)小王编写了一个依据成绩计算名次的VB程序,成绩为0到100之间的整数。算法的基本思想:先统计每个分数的个数,然后按照分数从高到低依次计算每个有效分数(该分数的个数不为0)对应的名次,分数相同时名次并列。最高分为第1名,该分数的名次与个数之和为下一个有效分数的名次,以此类推。程序用数组A存放每个分数对应的个数,数组B存放每个分数对应的名次。例如,下表中最高分100有2个,并列第1名,则分数96的名次为分数100的名次加上分数100的个数,即第3名。

程序运行时,学生数据显示在列表框List1中,单击“计算”按钮Command1,计算结果显示在列表框List2中,程序运行界面如图所示。

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

(1)如表所示,若分数93的个数为2,则该分数对应的名次为__________________________。(2)请在划线处填入合适的代码。

Dim sName(1To50) As String' 存放学生姓名

Dim sScore(1To50) As Integer' 存放学生分数

Dim recCount As Integer' 存放学生人数

Private Sub Form_Load()

'本过程从数据库中读取学生数据,存储在相应的变量中,并在List1中显示

'代码略

End Sub

' 整数转换成长度固定的字符串

Function ads(x As Integer, n As Integer) As String

Dim sx As String, nx As Integer, i As Integer

sx = Str(x): nx = Len(sx)

For i = 1To n - nx

sx = " " + sx

Next i

End Function

Private Sub Command1_Click()

Dim A(0To100) As Integer '存放每个分数的个数

Dim B(0To100) As Integer '存放每个分数的名次

Dim mc As Integer, score As Integer, i As Integer

For i = 0To100

A(i) = 0

Next i

For i = 1To recCount '计算每个分数的个数

Next i

mc = 1

For i = 100To0Step -1 '计算每个分数的名次

If A(i) <> 0Then

B(i) = mc

End If

Next i

List2.Clear

List2.AddItem " 姓名分数名次 "

List2.AddItem " ---------------- "

For i = 1To recCount

score = sScore(i)

mc = B(sScore(i))

List2.AddItem sName(i) + ads(score, 5) + "第" + ads(mc, 3) + "名"

Next i

End Sub

【答案】(1)7(2)①ads=sx②A(sScore(i)) = A(sScore(i)) + 1

③mc==mc+A(i) (或mc=B(i) + A(i))

【解析】本题考查算法及其程序实现。

(1)93分的名次是前一位94分的个数和名次之和3 + 4 = 7,因此是第7名。

(2)①函数语句中必须有一个形如“函数名=表达式”的语句,才能将表达式的计算结果作为函数的返回值传回函数调用处,因此答案是ads = sx。

②A 数组存放每个分数的个数,其下标sScore (i )就是分数,因为之前每个分数的个数都初始化为0个,故针对每个人的分数,若有多个人同分则统计同分的人数,不同分则统计为1次,该分数不存在则仍为0个,即初始值,所以答案是A (sScore (i ))=A (sScore (i )) +1。

③B 数组存放的是每个分数的名次,当前分数的名次为mc ,下一个分数的名次为当前分数对应的当前名次加上当则分数的人数个数。故答案为mc = A (i ) + B (i )或 mc =mc +A (i )。

6.(2016年10月)小李与小王合作编写一个成绩统计的VB 程序:小王编写一个过程,该过程从数据库读取某一指定科目的相关数据,存储在数组a 中;小李编写一个过程,该过程依据数组a 中的相关数据统计各班平均分。小李与小王约定的数组a 各元素含义如图所示。

程序功能如下:在文本框text1中输入科目名称,单击“读取数据库”按钮command1,程序从数据库读取数据;单击“开始统计”按钮command2,程序进行统计处理,结果输出在列表框list1中。程序运行界面如下图所示。

数组元素 数组元素的含义 a (1) 存储班级数n

a (2) 从a (2)到a (n +1) 依次存储第1、2、…第n 个班级人数

… a (n +1) a (n +2) 从a (n +2) 依次存储第1班每个学生的单科成绩、第2班每个学生的单科成绩、…第n 班每个学生的单科成绩

… …

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

(1)根据程序运行界面中的数据及数组a 各元素的含义,数组元素a (5)的值为 (填写数值)。

(2)分析程序,可知数据库的文件名为

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

Dim a(1to600) as integer‘数组大小满足处理要求

Private sub command1_click()

‘本过程由小王完成,从数据库读取指定科目的各相关数据,存储在数组a中

Dim conn As New ADODB.Conncction

Dim rs As New ADODB.Recordset

Conn ConncctionString=”provider=Microsoft.ACE.OLEDB.12.0;data source=”+”Score.accdb”

Conn.Open

Set rs.ActiveConnection=conn

‘本过程的其他语句略

End sub

Private sub command2_click()

‘依据数组a中的相关数据统计各班级平均分

Dim i As Integer, j As Integer, n As Integer

Dim p As Integer, sum As Integer, aver As Single

p = n + 2

For i = 1To n

sum = 0

For j = 1To a(i + 1)

p = p + 1

Next j

aver = sum / a(i + 1)

list1.additemstr(i)+" "+str(a(i+1))+" "+str(aver)

Next i

End sub

【答案】(1)33(2)Score.accdb(3)①n=a(1) ②sum =sum+ a(p)(或其他等价代码)

【解析】本题考查创建ADO对象,建立数据库连接和用VB访问数据库中的数据,用二重循环对数据库中取出存放在数组中的元素进行运算的思路和方法。

(1)a(1)存放班级数n,a(2)到a(n+1)依次存放每班人数,则a(2)放1班人数,a(3)放2班人数,a(4)放3班人数,a(5)放4班人数,所以a(5)=33。

(2)“Dimconn As New ADODB. Connection”为定义ADO的Connection对象实例conn,“Dim rs As New ADODB. Recordset”为定义ADO的Recordset对象实例rs,conn. ConnectionString= "provider =Microsoft. ACE. OLEDB.12.0; data source= " +"Score. accdb"”中的Score. accdb即是连接的数据库文件。

(3)①首先要获取班级的个数,班级个数存放在a(1)中,n为存放班级个数的变量,所以n赋值为a(1),即n=a(1)。②第一重循环“Fori=1Ton”,即从第一个班循环到最后一个班级,当循环到第一个班级时,i=1,Forj=1 Toa(2),而a(2)存放的为1班的人数,即可将1班的学生单科成绩不断循环的加到sum变量中,而单科成绩是从数组a(n+2)开始的,n+2赋值给p,所以sum应该不断的加上a(p)赋值给sum,同时p不断地增加1,从而获得这”个班学生的单科总成绩;当循环到第二个班级时,i= 2,For j=1To a(3),sum清零后加第二个班的成绩,加的成绩是从上一个班结束时的p值加1开始,以此循环直到求出所有班级为止。

7.(2016年4月)某数据压缩方法描述如下:

1)原始数据中,某数不为0且相邻无重复,压缩数据用该数据表示;

2)原始数据中,某数为0且相邻无重复,压缩数据用两个数表示,第1个位0,第2个为0;

3)原始数据中,某数据相邻有重复,压缩数据用3个数表示:第1个位0,第2个为重复数的个数,第3个为该数本身;

根据上述压缩方法,对应的解压缩方法示例如图a所示。

图a

小明编写了一个解压送VB程序,功能如下:窗体加载时,自动读取压缩数据,依次存储在数组元素a(1)、a(2)、a(3)……中,压缩数据的个数存储在变量n中,压缩数据显示咋文本框Text1中。单击“解压缩”按钮Command1,程序对压缩数据依次进行解压缩处理,解压缩数据显示在文本框Text2中。程序运行界面如

图b所示。

图b

(1)如果压缩数据为“23,0,21,66,0,0,77,0,5,0”,则解压缩数据的个数是。(2)实现上述功能的VB程序如下。请在划线处填入合适代码。

Dim a(1To100) As Integer '存储压缩数据,最大处理个数为100

Dim b(1To1000) As Integer '存储解压缩数据,最大处理个数为1000

Dim n As Integer '存储压缩数据的个数

Private Sub Form_Load()

'压缩数据由上述压缩方法生成

'本过程用于读取压缩数据并存储在数组a,压缩数据个数存储在变量n中

'代码略

End Sub

Private Sub Command1_Click()

Dim pa As Integer '存储压缩数组当前处理位置

Dim pb As Integer '存储解压缩数组当前处理位置

Dim firstdata As Integer, count As Integer, i As Integer

pa = 1: pb = 1

Do While pa <= n

firstdata = a(pa)

If firstdata <> 0Then '示例1情况处理

b(pb) = firstdata

pa = pa + 1: pb = pb + 1

Else

count = a(pa + 1)

If count = 0Then'示例2情况处理

b(pb) = 0

pa = : pb = pb + 1

Else'示例3情况处理

For i = 1To count

Next i

pa = pa + 3: pb = pb + count

End If

End If

Loop

Text2.Text = Str(b(1))

For i = 2To

Text2.Text = Text2.Text + "," + Str(b(i))

Next i

End Sub

【答案】(1) 29(2)①pa+2②b(pb+i-1)=a(pa+2) ③pb-1

【解析】(1)如表所示。

(2)①压缩数组a中对应的是00这种情况下的数据处理。因此,当数据处理完毕后,变量pa应移动到数组a中下一个待处理的数据位置上pa=pa+2,此时pa将指向下一个待处理的数据。②压缩数组a对应的是07 78这种情况下的数据处理。此时要做的是操作是要将数组b中存储count个解压后的数据,解压后的数据值是来自数组a中的元素值,即是pa后移动2个位置指向的元素值a(pa+2),这count个元素将依次填入到数组元素b中(存放位置是pa下标开始,一直到pb+ count一1,共计n个位置)。③将数组b中的所有元素全

部输出,数组b中下标pb指向的是待存放元素的位置,因此在数组b中实际情况存储的元素个数自然数是pb-1个元素。

8.(2015年10月)某数据加密方法描述如下:

(1)以字节为单位进行加密处理;

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

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

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

值(十进制) 0123456789101112131415

加密字符I l i k e C H N P0s t c a r d

小明按照上述方法,设计了一个字符串(仅包含ASCII字符)加密的VB程序,功能如下:单击“加密”按钮Command1,程序依次将文本框Text1中每个字符的ASCII码值作为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 b1As Integer, b2As Integer '分别存储分割、转换后的两个十进制数

s = Text1.Text

For i = 1To n

a = Asc(Mid(s, i, 1))

b1 = a \ 16

b2 = a Mod16

ss = ss + Code2Char(b1) + Code2Char(b2)

Text2.Text = ss

Next i

End Sub

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

Function Code2Char(c As Integer) As String

Dim s As String

s = "IlikeCHNpostcard"

Code2Char = ②

End Function

(2)若将“密码表”中值为“0”对应的加密字符“I”改成“i”,加密后的密文可能无法解密,原因是。

【答案】(1)n = Len(s) Mid(s,c+1,1) (2)加密字符i对应两个值0,2

【解析】本题考查过程和自定义函数,常用标准函数等。

(1)根据题意,对文本框Text1中输人的字符串逐个字符加密,需算出字符串的长度n,作为循环变量的终值,即n=Len(s)。加密后的字符串(密文)存储于字符串变量ss中。②自定义函数Code2Char()中,根据密码表对应的每个十进制数转换为1个加密字符,第一个加密字符对应十进制值为0,故当十进制数值为6时,对应的字符H是第6+1个字符位置,即当十进制数值为c时,对应的字符是第c+1个字符位置,用取子串函数Mid(s,c+1,1)。

(2)若密码表中值为0对应的加密字符I改为i,造成同时对应加密字符i,当解密时,加密字符i对应的十进制有两个值0和2,不唯一而出错,从而无法解密。

相关文档
最新文档