k=a(j):
a(j)=a(j-1):
a(j-1)=k
flag=True
EndIf
Nextj
i=i+1
Loop
Str(i)
Label3.Caption="排序过程的加工遍数为"+'
(2)
Fori=1Ton
List2.AddItemStr(a(i))
Nexti
EndSub
4.【201510】某数据加密方法描述如下:
(1)以字节为单位进行加密处理;
(2)将1个字节的8位二进制数分割成前4位与后4位两个二进制数;
(3)分别将上述两个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
0
s
t
c
a
r
d
小明按照上述方法,设计了一个字符串(仅包含ASCII字符)加密的VB程序,功能如下:
单击“加密”按钮Commandl,程序依次将文本框Textl中每个字符的ASCII码值作为1个字节转换为两个加密字符,连接这些加密字符,最后在文本框Text2中输出加密结果。
下表显示了字符串中一个字符的加密过程:
程序运行效果如第17题图所示。
实现上述功能的VB程序如下:
(1)请在划线处填入合适代码。
PrivateSubCommand1_Click()
DimnAsInteger,sAsString,iAsInteger,ssAsString
DimaAsInteger'存储加密前字符的ASCII码
Dimb1AsInteger,b2AsInteger'分别存储分割、转换后的两个十进制数
s=Text1.Text
①
Fori=1Ton
a=Asc(Mid(s,i,1))
b1=a\16
b2=aMod16
ss=ss+Code2Char(b1)+Code2Char(b2)
Text2.Text=ss
Nexti
EndSub
'十进制值转换为加密字符的函数
FunctionCode2Char(cAsInteger)AsString
DimsAsString
s="IlikeCHNpostcard"
Code2Char=②
EndFunction
(2)若将“密码表”中值为“0”对应的加密字符“I”改成“i”,加密后的密文可能无法解密,原因是。
5.【201604】某地1900-1999年的平均降水量数据保存在数据库中。
现要求找出相邻两年年平均降水量变化(即本年度与上年度“年平均降水量”差值的绝对值)最大的年份区间。
如果多个符合要求的年份区间,只输入距今最近的。
小吴为此编写了VB程序,程序运行时,单击按钮Command1后,在文本框Text1中输出运行结果。
实现上述功能的VB代码如下,但加框处代码有错,请改正。
Dimw(1To100)AsSingle'依次存储1900-1999年的年平均降水量数据
Constn=100
PrivateSubForm_Load()
'本过程从数据库中按19000-1999年依次读取年平均降水量数据,并存储在数组w中
'代码略
EndSub
PrivateSubCommand1_Click()
DimiAsInteger,imaxAsInteger
1
imax=
Fori=3Ton
Abs(w(i-1)-w(i-2))
IfAbs(w(i)-w(i-1))>=Thenimax=i
Nexti
Text1.Text="年平均降水量变化最大的年份区间是"+Str(imax+1898)+"-"+Str(imax+1899)
EndSub
6.【201604】某数据压缩方法描述如下:
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程序如下。
请在划线处填入合适代码。
Dima(1To100)AsInteger'存储压缩数据,最大处理个数为100
Dimb(1To1000)AsInteger'存储解压缩数据,最大处理个数为1000
DimnAsInteger'存储压缩数据的个数
PrivateSubForm_Load()
'压缩数据由上述压缩方法生成
'本过程用于读取压缩数据并存储在数组a,压缩数据个数存储在变量n中
'代码略
EndSub
PrivateSubCommand1_Click()
DimpaAsInteger'存储压缩数组当前处理位置
DimpbAsInteger'存储解压缩数组当前处理位置
DimfirstdataAsInteger,countAsInteger,iAsInteger
pa=1:
pb=1
DoWhilepa<=n
firstdata=a(pa)
Iffirstdata<>0Then'示例1情况处理
b(pb)=firstdata
pa=pa+1:
pb=pb+1
Else
count=a(pa+1)
Ifcount=0Then'示例2情况处理
b(pb)=0
pa=①:
pb=pb+1
Else'示例3情况处理
Fori=1Tocount
②
Nexti
pa=pa+3:
pb=pb+count
EndIf
EndIf
Loop
Text2.Text=Str(b
(1))
Fori=2To③
Text2.Text=Text2.Text+","+Str(b(i))
Nexti
EndSub
7.【201608温州模拟卷】小明编写了一个VB程序,功能如下:
在文本框Text1中输入一段英文,并在文本框Text2中输入英文段落中的某个单词(或字符串),单击Command1后,在文本框Text3中显示该单词在文中某两次出现的最大间距,若只出现一次货不出现则显示值为0。
程序运行界面如下图所示:
实现上述功能的VB程序如下:
PrivateSubCommand1_Click()
Dima(1To1000)AsString'数组a存储文中出现该指定单词或字符串的各个位置
DimsAsString,cAsString,chAsString
DimnAsInteger,MaxAsInteger,iAsInteger
s=Text1.Text
c=Text2.Text
n=0:
Max=0
Fori=1ToLen(s)-Len(c)+1
ch=________________
Ifch=cThen
n=n+1
a(n)=i
Ifn>=2Then
Ifa(n)-a(n-1)-Len(c)>MaxThenMax=a(n)-a(n-1)-Len(c)
EndIf
EndIf
Next
Text3.Text=_______________
EndSub
8.【201608温州模拟卷】合唱队列是按队员的身高进行排列,形成中间高两边有序降低的队形:
例如有6个队员“己、戊、丁、丙、乙、甲”的身高一次由小到大,则排列后的顺序为“戊、丙、甲、乙、丁、己”。
小李用VB编写模拟“合唱队列”程序,功能如下:
在文本框Text1中输入各队员身高,输入结束并回车,则输入的各队员身高分别存入数组a中;单击“合唱队列”按钮Command1,对数组a的元素进行有序排列后,将各元素存入数组C中形成合唱队列,并将结果显示在文本框Text2中。
程序运行界面如图所示:
实现上述功能的VB程序如下:
(1)如果输入各队员身高为“190,191,194,179,166”,则合唱队列的结果为_____________。
(2)实现上述功能的VB程序如下,请在划线处填入合适代码。
Dima(1To20)AsInteger
DimnAsInteger
PrivateSubtext1_keypress(keyasciiAsInteger)
'将输入各队员身高分别存入数组a中,队员个数为n,代码略!
EndSub
PrivateSubCommand1_Click()
Dimc(1To20)AsInteger
DimrightAsInteger,leftAsInteger,iAsInteger
Fori=1Ton-1
Forj=1Ton-i
If__________Then
t=a(j):
a(j)=a(j+1):
a(j+1)=t
EndIf
Next
Next
'下列程序段实现数组C的合唱队列
m=(1+n)\2
left=m:
right=m
c(m)=a(n)
i=2
DoWhilei<=n
IfiMod2=0Then
right=right+1
c(right)=c(n-i+1)
Else
________________
c(left)=a(n-i+1)
EndIf
Loop
s=_____________
Fori=2Ton
s=s+","+Str(c(i))
Next
Text2.Text=s
EndSub
9.【201610加试题】小吴为了研究冒泡排序过程中数据的“移动”情况,编写了一个VB程序,功能如下:
在列表框List1中显示排序前数据(存储在数组a中),在文本框Text1中输入初始位置(即下标值),单击“排序”按钮Command1后,在标签Label1中显示指定初始位置的数据在排序过程中的位置变化情况,排序后的数据显示在列表框List2中。
程序运行界面如图所示。
实现上述功能的VB程序如下,但加框处代码有错,请改正。
Dima(1To8)AsInteger
DimnAsInteger
PrivateSubForm_Load()
a
(1)=30:
a
(2)=47:
a(3)=30:
a(4)=72
a(5)=70:
a(6)=23:
a(7)=99:
a(8)=24
n=8
Fori=1To8
List1.AddItema(i)
Nexti
EndSub
PrivateSubCommand1_Click()
DimiAsInteger,jAsInteger,kAsInteger
DimposAsInteger
DimsAsString
s=Text1.Text
pos=Val(Text1.Text)
Fori=1Ton-1
Forj=nToi+1Step-1
Ifa(j)a(j-1)=a(j)
a(j)=k
'如果pos位置的数据参与交换,则更新pos值,记录pos变化位置
Ifpos=jThen
pos=j-1
s=s+"→"+Str(pos)
pos=j
s=s+"→"+Str(pos)
EndIf
EndIf
Nextj
Nexti
Label1.Caption="位置变化情况:
"+s
数组元素
数组元素的含义
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班每个学生的单科成绩
…
…
Fori=1Ton
List2.AddItemStr(a(i))
Nexti
EndSub
10.【201610加试题】小李与小王合作编写一个成绩统计的VB程序:
小王编写一个过程,该过程从数据库读取某一指定科目的相关数据,存储在数组a中;小李编写一个过程,该过程依据数组a中的相关数据统计各班平均分。
小李与小王约定的数组a各元素含义如图所示。
程序功能如下:
在文本框Text1中输入科目名称,单击“读取数据库”按钮Command1,程序从数据库读取数据;单击“开始统计”按钮Command2,程序进行统计处理,结果输出在列表框List1中。
程序运行界面如下图所示。
实现上述功能的VB程序如下,请回答下列问题:
(1)根据程序运行界面中的数据及数组a各元素的含义,数组元素a(5)的值为(填写数值)。
(2)分析程序,可知数据库的文件名为
(3)请在划线处填入合适的代码。
Dima(1To600)AsInteger'数组大小满足处理要求
PrivateSubCommand1_Click()
'本过程由小王完成,从数据库读取指定科目的各相关数据,存储在数组a中
DimconnAsNewADODB.Conncction
DimrsAsNewADODB.Recordset
conn.Open
Setrs.ActiveConnection=conn
'本过程的其他语句略
EndSub
PrivateSubCommand2_Click()
'依据数组a中的相关数据统计各班级平均分
DimiAsInteger,jAsInteger,nAsInteger
DimpAsInteger,sumAsInteger,averAsSingle
①
p=n+2
Fori=1Ton
sum=0
Forj=1Toa(i+1)
②
p=p+1
Nextj
aver=sum/a(i+1)
List1.AddItemStr(i)+""+Str(a(i+1))+""+Str(aver)
Nexti
EndSub
答案:
1.
(1)A(m)A(m)
(2)A(k)=A(k+1)
2.
(1)Text1.text
(2)r-1(3)Mid(s,p+1,Len(s)-p)或Mid(s,p+1)或Right(s,Len(s)-p)
3.
(1)i<=n-1Andflag=True
(2)Str(i-l)
4.
(1)①n=Len(s)或n=Len(Text1.Text)②Mid(s,c+1,1)
(2)加密字符i对应两个值0,2
5.2Abs(w(imax)-w(imax-1))
6.29pa+2b(pb+i-1)=a(pa+2)pb-1
7.⑴(2分)Mid(s,i,Len(c))⑵(2分)Str(Max)
8.⑴(2分)166,190,194,191,179
⑵①(2分)a(j)>a(j+1)②(2分)left=left–1③(1分)Str(c
(1))
9.k=a(j-1)ElseIfpos=j-1Then
10.33Score.accdbn=a
(1)sum=sum+a(p)