VB二级.docx
《VB二级.docx》由会员分享,可在线阅读,更多相关《VB二级.docx(48页珍藏版)》请在冰豆网上搜索。
VB二级
[题1]aboveave过程是产生30个1--100之间的随机整数,计算这30个数的平均值然后,找出30个数中数值大于平均值的数据,并统计出这些数据的个数
OptionExplicit
PublicSubaboveave()
Dimx(30)AsInteger
DimsumAsInteger,aveAsInteger'平均值取整数
DimiAsInteger
DimcountAsInteger'在平均值之上的数据个数
Randomize
Fori=1To30
x(i)=Int(Rnd*100)+1
Nexti
sum=0
Fori=1To30
sum=---------1---------
Nexti
ave=--------2---------
'5个一行打印出原始数据,打印平均值
Fori=1To30
Form1.Printx(i);Space
(2);
IfiMod5=0ThenForm1.Print
Nexti
Form1.Print"平均值:
";ave
'找出并5个一行打印在平均值之上的数据,打印统计的个数
Form1.Print"在平均值之上的数据是:
"
Fori=1To30
Ifx(i)>aveThen
---------3---------
Form1.Printx(i);Space
(2);
If------4--------ThenForm1.Print
EndIf
Nexti
Form1.Print
Form1.Print"共有";count;"个在平均值之上."
EndSub
[题2]rn过程通过调用函数isLeapYear判断某年是否是闰年,若是,则打印"今年是润年",否则,打印"今年不是闰年"。
OptionExplicit
PublicSubrn()
Constyear=2023
If----1----Then
Form1.Print"今年是闰年"
Else
Form1.Print"今年不是闰年"
EndIf
EndSub
FunctionisLeapYear(yAsInteger)AsBoolean
If----2----Or(----3----And----4----)Then
isLeapYear=False
Else
isLeapYear=True
EndIf
EndFunction
[题3]ComMulti过程是求任意两个正整数的最小公倍数,求最小公倍数的一种方法是先求出两个数的最大公约数,两个数的乘积除以最大公约数的商即为最小公倍数。
OptionExplicit
PublicSubComMulti()
DimmAsInteger,nAsInteger'任意两个正整数
DimiAsInteger
DimmultiAsInteger'最小公倍数
'输入两个正整数,要求m与n都必须大于零
Do
m=Val(InputBox("m="))
n=Val(InputBox("n="))
LoopWhile------------1----------
multi=---------2-----------
Form1.Printm;"和";n;"的最小公倍数是:
";multi
EndSub
'Div函数过程求任意两个正整数m和n的最大公约数
PublicFunctionDiv(mAsInteger,nAsInteger)AsInteger
'该函数过程用于求任意两个正整数的最大公约数。
DimiAsInteger
'先将两个整数中的较小数假设为最大公约数,再依次往下
'寻找能同时除尽m和n的数即为最大公约数
----------3------------
IfnDiv=n
EndIf
DoWhilemModDiv<>0OrnModDiv<>0
-----------4----------
Loop
EndFunction
[题4]find过程是用于从1到10000中找出这样的数,该数各个位的数字的阶乘相加之和等于该数,并将结果输出。
OptionExplicit
PublicSubfind()
Dimk,a,n,i
DimpAsInteger
Fork=1To10000
a=LTrim(Str(k))
n=0
Fori=----1-----
p=Val(Mid(a,i,1))
n=-----2----
Nexti
Ifn=kThenform1.Printk
Nextk
EndSub
Functionfact(xAsInteger)AsLong
'该函数用于计算阶乘
DimyAsLong
Dimi%
y=1
Fori%=1Tox
y=y*i%
Nexti%
----3----
EndFunction
[题5]ComDiv过程是求任意两个正整数的最大公约数。
OptionExplicit
PublicSubComDiv()
DimmAsInteger,nAsInteger'任意两个正整数
DimiAsInteger
DimdivAsInteger'最大公约数
'输入两个正整数,要求m与n都必须大于零
Do
m=Val(InputBox("m="))
n=Val(InputBox("n="))
LoopWhile----1----
'先将两个整数中的较小数假设为最大公约数,再依次往下
'寻找能同时除尽m和n的数即为最大公约数
-----2-----
Ifndiv=n
EndIf
DoWhilemModdiv<>0OrnModdiv<>0
----3-----
Loop
Form1.Printm;"和";n;"的最大公约数是:
";div
EndSub
[题6]该过程是用于计算e的值并将结果输出,要求精确到0.000000000000001,
e的计算公式为:
e=1+1/1!
+1/2!
+…+1/n!
。
OptionExplicit
PublicSube()
Dimn,term,t
n=0:
term=1:
t=1
Do
n=n+1
t=---1---
term=---2-----
LoopWhilet>0.000000000000001
form1.print"e="&---3----
EndSub
[题7]该过程是用于计算一元二次方程的根,并将结果输出来。
OptionExplicit
PublicSubgetanswer()
Dimdalt!
a#,b#,c#
a=InputBox("输入系数a")
b=InputBox("输入系数b")
c=InputBox("输入系数c")
dalt=b*b-4*a*c
if----1----then
dalt=Sqr(dalt)
MsgBoxFormat((-b+dalt)/2/a),"0.00"+Chr(13)+Chr(10)+Format((-b-dalt)/2/a,"0.00")
elseif---2----then
MsgBoxFormat(-b/2/a,"0.00")+Chr(13)+Chr(10)+Format(-b/2/a,"0.00")
Else
dalt=---3----
MsgBoxFormat((-b+dalt)/2/a,"0.00")+"+i"+Chr(13)+Chr(10)+Format((-b-dalt)/2/a,"0.00")+"-i"
EndIf
EndSub
[题8]该过程是用于找出被3、5、7除,余数为1的最小的5个整数,并将结果输出来。
OptionExplicit
PublicSubfind()
DimcountN%,n%
countN=0
n=1
Do
n=----1----
if-----2----then
Form1.Printn
countN=countN+1
EndIf
Loop----3-----
EndSub
[题9]p过程是用于整理数组a,使其中小于零的元素移到数组的前端,大于零的元素移到数组的后端,等于零的元素留在数组的中间。
PublicSubp(a%())
Dimi%,low%,high%,t%
low=0
i=0
high=UBound(a)
doWhile----1----
Ifa(i)<0Then
t=a(i)
a(i)=a(low)
a(low)=t
----2----
i=i+1
ElseIfa(i)>0Then
t=a(i)
a(i)=a(high)
a(high)=t
-----3-----
Else
----4----
EndIf
Loop
EndSub
[题10]MoveStr过程是把字符数组移动m个位置,当Tag为True左移,则前m个字符移到字符数组尾。
PublicSubMoveStr(a$(),m%,TagAsBoolean)
Dimi%,j%,t$
Dimc
IfTagThen
Fori=1Tom
c=a(0)
forj=0to----1----
a(j)=a(j+1)
Nextj
-----2-----
Nexti
Else
Fori=1Tom
------3------
forj=Ubound(A)-----4------
a(j)=a(j-1)
Nextj
a(0)=c
Nexti
EndIf
EndSub
[题11]Modify.bas模块中的Transfer过程用于将一个十六进制整数转换为十进制整数;number函数过程用于将一个十六进制符号转换为数值。
PublicSubTransfer()
DimHexAsString'十六进制数
DimDecAsDouble'十进制数
DimtempAsString
DimiAsInteger
DimnAsInteger
Hex=InputBox("输入一个十六进制整数")
'******错误1*******
n=Val(Hex)
i=0
Do
'******错误2*******
temp=Mid(Hex,i,1)
'******错误3*******
Dec=Dec+number*16^i
i=i+1
LoopWhilei'******错误4******
Form1.Printstr(Hex)&"转换为十进制数为"&str(Dec)
EndSub
PublicFunctionnumber(strAsString)AsInteger
SelectCasestr
Case"a","A"
number=10
Case"b","B"
number=11
Case"c","C"
number=12
Case"d","D"
number=13
Case"e","E"
number=14
Case"f","F"
number=15
CaseElse
number=Val(str)
EndSelect
EndFunction
[题12]Modify.bas模块中的BubbleSort过程是选择排序法;GenerateData过程产生个[1,20]之间互不相同的随机整数;Swap过程交换两个变量的数值。
PrivateConstn=10
Privatea(1Ton)AsInteger
'BubbleSort过程是排序
'Swap过程交换两个变量数值
'GenerateData过程产生10个[1,20]之间互不相同的随机整数
PublicSubBubbleSort()
DimiAsInteger,jAsInteger
i=1
Do
Forj=i+1Ton
Ifa(j)>a(i)Then
'*******1*********
Swap(a(j),a(i))
EndIf
Nextj
i=i+1
'*******2*******
LoopWhilei=n
Form1.Print"排序结果"
Fori=1Ton
Form1.Printa(i);
Nexti
EndSub
PublicSubGenerateData()
DimiAsInteger
DimjAsInteger
DimbAsBoolean
Fori=1Ton
b=False
DoWhileNotb
a(i)=Int(20*Rnd+1)
b=True
'******3******
Forj=1Toi
Ifa(i)=a(j)Then
b=False
ExitFor
EndIf
Nextj
Loop
Form1.Printa(i)
Nexti
EndSub
'********4********
PublicSubSwap(ByValaAsInteger,ByValbAsInteger)
DimtempAsInteger
temp=a
a=b
b=temp
EndSub
[题13]Modify.bas模块中的wrap过程用于判断一个字符串是否“回文”。
所谓“回文”是指字符串顺读与倒读都是一样的,如“潮起潮落,落潮起潮”。
PublicSubWrap()
DimlengthAsInteger
Dimstr1AsString
DimstrleftAsString
DimstrrightAsString
DimkAsInteger
str1=InputBox("请输入任意的字符串")'输入任意字符串
'****错误1*****
length=Val(str1)
k=1
Do
'****错误2*****
strleft=Left(str1,k)'从左边起逐个取出一个字符
'****错误3*****
strright=Right(str1,k)'从右边起逐个取出一个字符
'****错误4****
Ifstrleft=strrightThen
ExitDo
EndIf
k=k+1
LoopWhilek<=length/2
Ifk>length/2Then
Form1.Printstr1&"是回文"
Else
Form1.Printstr1&"不是回文"
EndIf
EndSub
[题14]Modify.bas模块中的MaxLine过程用于查找一个5行4列的二维数组中行平均值最大的行,并将该行所有数据调整到第一行的位置。
Modify.bas模块中的DataProduce过程用于产生原始数据;Average过程用于计算各行的平均值;PrintArraay过程用于打印二维数组和行平均值。
Dima(1To5,1To4)AsInteger
Dimave(1To5)AsInteger
PublicSubMaxLine()
DimiAsInteger
DimjAsInteger
DimtempAsInteger
DimLine_noAsInteger'最大平均值的行号
'找出最大平均值所在行
Line_no=1
Fori=2To5
'******错误1*******
Ifave(Line_no)>=ave(i)Then
'******错误2*******
Line_no=ave(i)
EndIf
Nexti
'交换第一行与最大平均值所在行
Forj=1To4
temp=a(1,j)
'******错误3******
a(Line_no,j)=a(1,j)
a(Line_no,j)=temp
Nextj
'交换对应行的平均值
temp=ave
(1)
ave
(1)=ave(Line_no)
ave(Line_no)=temp
'打印交换后的数据
Form1.Print"交换后的数据和平均值"
PrintArray
EndSub
PublicSubDataProduce()
DimiAsInteger
DimjAsInteger
'产生5*4数组
Fori=1To5
Forj=1To4
a(i,j)=Int(100*Rnd)
Nextj
Nexti
EndSub
PublicSubAverage()
DimiAsInteger
DimjAsInteger
DimsumAsInteger
'计算各行平均值
Fori=1To5
sum=0
Forj=1To4
'******错误4******
sum=a(i,j)
Nextj
ave(i)=sum/4
Nexti
'将数组和平均值打印出来
Form1.Print"原始数据和平均值"
PrintArray
EndSub
PublicSubPrintArray()
DimiAsInteger
DimjAsInteger
Fori=1To5
Forj=1To4
Form1.Printa(i,j);Spc(3);
Nextj
Form1.Print"平均值=";ave(i)
Nexti
EndSub
[题15]Modify.bas模块中的TJ过程是将一批数据中小于零的数及它们的积打印出来,但不完整,请在横线上填入必要的内容,使其完整。
Modify.bas模块中的SCSJ过程是产生数据,数据的取值范围为-10~10之间的随机数。
PrivateConstn=10
Privatea(1Ton)AsInteger
'TJ过程是将一批数据中小于零的数及它们的积打印出来
'数据由SCSJ过程产生,数据的取值范围为-10~10之间的随机整数数
PublicSubTJ()
DimiAsInteger
DimtAsSingle
--------1--------
Fori=1To10
If--------2--------Then
t=t*a(i)
EndIf
Nexti
Form1.Print"T=";t
EndSub
PublicSubSCSJ()
Randomize
Form1.Print"原始数据"
DimiAsInteger
DimjAsInteger
Fori=1Ton
'随机产生0或1,为0时取负,为1时取正
j=Int(Rnd*2)
If------3-----ThenJ=-1
a(i)=j*Int(Rnd*(n+1))
Form1.Printa(i);
Nexti
Form1.Print
EndSub
[题16]Modify.bas模块中的calculate过程是产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来.
Publicsubcalculate()
Dima(1to100)asinteger
Dimx(1to10)asinteger
DimIasinteger,pasinteger
‘产生100个[0,99]范围内的随机整数
‘每行10个打印出来
forI=1to100
‘**********1**********
a(i)=rnd*100
ifa(i)<10then
form1.printspace
(2);a(i)
else
form1.printspace
(1);a(i);
endif
ifImod10=0thenform1.print
nextI
‘统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数
‘并将统计结果保存在数组x
(1),x
(2),……,x(10)中,将统计结果打印出来
forI=1to100
‘**********2**********
p=int(a(i)/10)‘求个位上的数字
ifp=0thenp=10
‘**********3**********
x(p)=x(p)-1
nextI
form1.print“统计结果”
forI=1to10
p=I
ifI=10thenp=0
‘**********4**********
form1.print“个位数为”+str(p)+”共 “+str(x(p))+”个”
nextI
endsub
[题17]Modify