您的当前位置:首页vb加试填空题

vb加试填空题

2020-11-19 来源:小侦探旅游网
VB选考填空题

【201509】编写VB程序,实现如下功能:在文本框Text1中输入一个整数,单击按钮Command1,采用对分查找法在数组A(从小到大排序,并显示在标签Label1中)中查找该数。若找到,则从数组A中删除该数(该数后面的数组元素都前移一位),并在标签Label2中显示删除后的结果,运行效果如图所示;否则,在标签Label2中显示“该数没有找到”。

实现上述功能的VB代码如下,但加粗加下划线部分代码有错,请改正。

DimA(1to10)asInteger

Form_Load事件过程产生10个整数,按升序保存在数组A中,并在标签Label1中显示 PrivateSubCommand1_click()

DimIasinteger,jasinteger,masinteger,kasinteger

Dimxasinteger,fasboolean‘变量f用于标记是否在数组中找到x

X=val(Text1.text) I=1:j=10 F=false

Dowhile(i<=j)and(f=false) M=int((i+j)/2)

Ifa(m)=xthenf=true

Ifa(m)>xthenI=m+1elsej=m-1 Loop

Iff=truethen Fork=mto9 A(k+1)=a(k) Next

Label2.caption=”” Fork=1to9

Label2.caption=label2.caption+str(a(k))+”” Nextk Else

Label2.caption=”该数没有找到” Endif Endsub

【201509】用VB编写一个字符串分行程序,功能如下:单击“分行”按钮Command1,将文本框Text1中的英文文本在列表框List1中分行显示(分行时单词不得跨行,每行字符尽可能多但不超过40个),并在标签Label1中输出总行数,运行效果如第17题图所示。分行算法如下: (1)将文本框中的字符串保存到变量s中;

(2)当s中字符个数超过40时,循环执行下列①、②、③步,否则跳转到(3):

①如果第41个字符不是英文字母,则分行位置p=40;否则,向左逐个查找,直至找到第一个非英文字母,将其位置作为分行位置p;

②截取s的前p个字符,作为新增行显示在列表框List1中,同时总行数加1;③将s中未分行部分重新赋值给变量s。

(3)将s作为新增行显示在列表框List1中,同时总行数

加1。

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

Dimrasinteger,totalasinteger,pasinteger Total=0

S=_______________ DoWhilelen(s)>40 R=41

C=mid(s,r,1)

Ifnot((c>=”a”andc<=”z”)or(c>=”A”andc<=”Z”))then P=40 Else

‘从第41个字符开始向左找到第1个非英文字母,并将其位置

值赋给p

DoWhile((c>=”a”andc<=”z”)or(c>=”A”andc<=”Z”)) r=_________________ c=mid(s,r,1) Loop P=r Endif

List1.additemmid(s,1,p) Total=total+1 S=__________________ Loop

List1.additems Total=total+1

Label1.caption=“共”+str(total)+“行” EndSub

【201510】n个数据的冒泡排序需要经过n-1遍加工,每一遍加工自下而上比较相邻两个数据,把较小者交换到上面。小刘发现:当某一遍加工过程中没有数据交换,说明数据已经有序,无需进一步加工。为此,小刘对算法进行优化,编写了一个VB程序,功能如下:运行程序时,在列表框List1中显示排序前数据,单击“排序”按钮Commaiid1,在列表框List2中显示这些数据按升序排序后的结果,在标签Label3中显示排序过程的加工遍数。

运行效果如图所示。

实现上述功能的VB代码如下,但加框处代码有错,请改正。 Dima(1To8)AsInteger DimnAsInteger

PrivateSubForm_Load()

'n=8,排序前数据存储在数组a中,并在列表框Listl中显示 '代码略

EndSub

PrivateSubCommand1_Click()

DimflagAsBoolean'flag值为True表示一遍加工中发生过交换 i=1 flag=True

DoWhile'(1) i<=n-1Orflag=True flag=False Forj=nToi+1Step-1 Ifa(j)k=a(j):a(j)=a(j-1):a(j-1)=k flag=True EndIf Nextj i=i+1 Loop

Label3.Caption=\"排序过程的加工遍数为\"+'(2) Str(i) Fori=1Ton

List2.AddItemStr(a(i)) Nexti EndSub

4.【201510】某数据加密方法描述如下: (1)以字节为单位进行加密处理;

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

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

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

值(十进制) 加密字符 0 I 1 l 2 i 3 k 4 e 5 C 6 H 7 N 8 P 9 0 10 11 12 13 14 15 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

IfAbs(w(i)-w(i-1))>=Thenimax=i Abs(w(i-1)-w(i-2Nexti

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+\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)'如果pos位置的数据参与交换,则更新pos值,记录pos变化位置

Ifpos=jThen

pos=j-1

s=s+\"→\"+Str(pos)

Else pos=j

s=s+\"→\"+Str(pos) EndIf EndIf Nextj Nexti

Label1.Caption=\"位置变化情况:\"+s

数组元数组元素的含义 素 Fori=1Ton

List2.AddItemStr(a(i)) Nexti

a(1) a(2) … 存储班级数n 从a(2)到a(n+1)依次存储第1、2、…EndSub a(n+1) 第n个班级人数 10.【201610加试题】小李与

a(n+2) 从a(n+2)依次存储小王合作编写一个成绩统计的

VB程序:小王编写一个过程,… 第1班每个学生的该过程从数据库读取某一指定

… 科目的相关数据,存储在数组a

单科成绩、第2班每中;小李编写一个过程,该过程

依据数组a中的相关数据统计各班平均分。小李与小王约定的个学生的单科成数组a各元素含义如图所示。

程序功能如下:在文本框绩、…第n班每个学Text1中输入科目名称,单击“读取数据库”按钮Command1,程生的单科成绩 序从数据库读取数据;单击“开

始统计”按钮Command2,程序进行统计处理,结果输出在列表框List1中。程序运行界面如下图所示。 实现上述功能的VB程序如下,请回答下列问题:

(1)根据程序运行界面中的数据及数组a各元素的含义,数组元素a(5)的值为(填写数值)。 (2)分析程序,可知数据库的文件名为 (3)请在划线处填入合适的代码。

Dima(1To600)AsInteger'数组大小满足处理要求 PrivateSubCommand1_Click()

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

DimconnAsNewADODB.Conncction DimrsAsNewADODB.Recordset

connConncctionString=source=\"+\"Score.accdb\" 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)

因篇幅问题不能全部显示,请点此查看更多更全内容