江苏省二级VB上机之典型功能模块整理.docx
《江苏省二级VB上机之典型功能模块整理.docx》由会员分享,可在线阅读,更多相关《江苏省二级VB上机之典型功能模块整理.docx(19页珍藏版)》请在冰点文库上搜索。
江苏省二级VB上机之典型功能模块整理
江苏省二级VB上机之典型功能模块整理
1、求素数:
PrivateFunctionprime(nAsInteger)AsBoolean
DimiAsInteger
Fori=2ToSqr(n)
IfnModi=0ThenExitFunction
Nexti
prime=True
EndFunction
2、求“升序数”(Mod+整除):
PrivateFunctionpand(ByValnAsInteger)AsBoolean
Dima()AsInteger,iAsInteger
Do
i=i+1
ReDimPreservea(i)'重定义数组
a(i)=nMod10'取n的个位数
n=n\10'十进制数右移一位
LoopUntiln<=0
Fori=1ToUBound(a)-1
Ifa(i)<=a(i+1)ThenExitFunction'不是升序数,退出函数
Nexti
pand=True
EndFunction
3、在字符串中提取英文词汇并组成新句子:
PrivateSubchange(sAsString,words()AsString)
DimstAsString*1,iAsInteger,kAsInteger
DimPAsString
Fori=1ToLen(s)
st=Mid(s,i,1)
Ifst>="a"Andst<="z"Then'所判断的字符是字母
P=P&st'构建单词
ElseIfP<>""Then'单词不为空
k=k+1'单词个数加1
ReDimPreservewords(k)保持原数据不变
words(k)=P'给数组赋值
P=""
EndIf
Nexti
EndSub
4、将内容按每五个一行输出:
IfkMod5<>0Then
st=st&Str(i)'构建字符串
Else
st=st&Str(i)&vbCrLf'换行
5、求“升序数”(Mid)
PrivateFunctionpand(xAsInteger)AsBoolean
DimiAsInteger
Dimw1AsInteger,w2AsInteger
Fori=2ToLen(CStr(x))'Len(Str(N))
w1=Mid(x,i-1,1)'取相邻的两个字符
w2=Mid(x,i,1)
Ifw1>=w2ThenExitFunction不是升序数退出函数
Nexti
pand=True'是升序数
EndFunction
6、求“同构数”(5在5^2=25的右端,25在25^2=625的右端,5和25为同构数):
PrivateFunctionpand(xAsLong)AsBoolean
DimsAsString
s=CStr(x)'将x变为字符串
IfRight(x^2,Len(s))=xThenpand=True'满足同构数条件
EndFunction
7、将数字处理成为降序整数:
PrivateSubchange(nAsLong,num()AsInteger)
DimiAsInteger,kAsInteger,jAsInteger
ReDimnum(Len(CStr(n)))'Str(n),定义数组的长度
Do
i=i+1
k=nMod10'取最低位的数字
num(i)=k'赋值数组
n=n\10'十进制数右移一位
LoopUntiln<=0
Fori=1ToUBound(num)-1'起泡法排序
Forj=i+1ToUBound(num)
Ifnum(i)k=num(i)
num(i)=num(j)
num(j)=k
EndIf
Nextj
Nexti
EndSub
8、计算方差及标准差:
PrivateSubjis(x()AsInteger,y()AsSingle)
DimsumAsInteger,avAsSingle,dtaAsSingle
DimiAsInteger,ssAsSingle
Fori=1ToUBound(x)
sum=sum+x(i)'求数组之和
Nexti
av=sum/UBound(x)'求数组元素的平均值
Fori=1ToUBound(x)
ss=ss+(x(i)-av)*(x(i)-av)'计算方差
Nexti
dta=Sqr((ss)/(UBound(x)-1))'计算标准差
Fori=1ToUBound(x)
y(i)=(x(i)-av)/dta'计算最后结果
Nexti
EndSub
9、求“互质数”:
PrivateSubchzh(ByValaAsInteger,ByValbAsInteger,fAsBoolean)第-个ByVal,不改变变量值
DimrAsInteger
Do
r=aModb'求余
a=b
b=r
LoopUntilr=0
Ifa=1Thenf=True'最大公约数为1,互质
EndSub
10、累积出现次数:
PrivateSubtj(data()AsInteger,B()AsInteger)
DimiAsInteger
Fori=1ToUBound(data)
B(data(i))=B(data(i))+1'统计相同数的个数
Nexti
Fori=10To20
IfB(i)<>0Then
List1.AddItemi&""&B(i)'显示统计结果
EndIf
Nexti
EndSub
11、生成各位数字各不同的三位数:
PrivateFunctionpand(ByValnAsInteger)AsBooleanByVal,不改变变量值
Dimnum(3)AsInteger,iAsInteger,jAsInteger
i=1
Do
num(i)=nMod10'取最低位数字
n=n\10'十进制数右移一位
i=i+1
LoopUntiln<=0
Fori=1To2
Forj=i+1To3
Ifnum(i)=num(j)ThenExitFunction有数字相等退出函数
Nextj
Nexti
pand=True'没有数字相等
EndFunction
12、无重复数字:
ForJ=1ToLen(S)
K=Val(Mid(S,J,1))'依次取每一位数字
IfK=0ThenExitFor'数字为0
IfA(K)=0Then'此If结构功能是判断四位数是否含有重复的数码
A(K)=1
Else
ExitFor
EndIf
NextJ
13、判断首尾数字之和与相邻数字之和均为素数:
PrivateFunctionpand(NAsInteger)AsBoolean
DimSAsString,LAsInteger,KAsInteger,TemAsLong,IAsInteger
S=CStr(N)'将N转换为字符串
L=Len(S)或L=Len(CStr(N))
ForI=1ToL
IfI<>LThen
Tem=Val(Mid(S,I,1))+Mid(S,I+1,1)'计算相邻数字之和
Else
Tem=Val(Mid(S,1,1))+Mid(S,L,1)'计算首尾数字之和
EndIf
ForK=2ToSqr(Tem)
IfTemModK=0ThenExitFunction'和不是素数退出函数
NextK
NextI
pand=True'和是素数
EndFunction
14、求互为反序的两个自然数(如104和401,35和53,而120和21则不是):
IfRight(st,1)<>0Then(可在主过程中先将最后一位是0的数字剔除)
PrivateFunctionchzh(ByValnAsInteger)AsInteger
DimiAsInteger,stAsString
Do
i=nMod10'取最低位数字
st=st&CStr(i)'构建反序数字符串
n=n\10'十进制数右移一位
LoopUntiln<=0
chzh=Val(st)'返回反序数
EndFunction
15、插入法由大到小排序:
PrivateSubpx(a()AsInteger)'插入法排序
DimxAsInteger,iAsInteger,jAsInteger
Fori=1ToUBound(a)
x=a(i)
j=i-1
DoWhilej>=0Andx>a(j)
a(j+1)=a(j)移位
j=j-1
Ifj<0ThenExitDo
Loop
Ifi>j+1Then
a(j+1)=x插入x
EndIf
Nexti
EndSub
16、求三个数的最小公倍数:
PrivateFunctionjs(AAsInteger,BAsInteger,CAsInteger)
js=A
DoUntiljsModA=0AndjsModB=0AndjsModC=0'js能够被A,B,C都整除
js=js+A'计算A,B,C的最小公倍数
Loop
EndFunction
17、求Armstrong数(N位的正整数,其各位数字的N次方之和等于这个数本身):
PrivateSubpand(ByValkAsInteger,fAsBoolean,B()AsInteger,nAsInteger)
DimIAsInteger,SumAsInteger,MAsInteger
n=Len(CStr(k))CStr(k)将k变为相应的字符串
M=k
ReDimB(n)
ForI=nTo1Step-1
B(I)=kMod10'取原数的各位数字
k=k\10
NextI
ForI=1Ton
Sum=Sum+B(I)^n'Str的错误也可改这里为B(I)^(n-1)
NextI
IfSum=MThenf=True'是armstrong数
EndSub
18、求最大值与最小值:
PrivateSubchzh(a()AsInteger,maxAsInteger,minAsInteger)'计算数组的最大值和最小值
DimiAsInteger
max=a
(1):
min=a
(1)'给max和min赋初值
Fori=2ToUBound(a)
Ifa(i)min=a(i)'计算最小值
ElseIfa(i)>maxThen
max=a(i)'计算最大值
EndIf
Nexti
EndSub
19、判断两个数之和不是平方数:
PrivateSubchange(A()AsInteger,PAsInteger)
DimnAsInteger,JAsInteger,SumAsInteger
n=2
DoWhilen
ForJ=1Ton-1
Sum=A(n)+A(J)'计算两个元素之和
IfInt(Sqr(Sum))=Sqr(Sum)ThenExitFor'sum是平方数
NextJ
IfJ<=n-1Then
A(n)=A(P)'删除A(n)
P=P-1'元素个数减1
Else
n=n+1'数组下标加1
EndIf
Loop
EndSub
20、生成5个互不相同的1—22之间的数码:
PrivateSubcreate(a()AsInteger)
DimiAsInteger,jAsInteger,kAsInteger
DimfAsBoolean
a
(1)=Int(Rnd*22)+1'生成随机数
i=1
Do
f=True
k=Int(Rnd*22)+1'生成随机数
Forj=1Toi
Ifk=a(j)Thenf=False'与之前数据相同
Nextj
IffThen'与之前数据不相同
i=i+1'元素个数加1
a(i)=k'生成元素
EndIf
LoopUntili>=5
EndSub
21、查找3的幂数:
PrivateFunctionpand(ByValnAsInteger)AsBoolean
DoWhilen<>1
IfnMod3<>0Then'能够被3整除
ExitFunction退出函数
EndIf
n=n\3'整除3
Loop
pand=True'是3的幂数
EndFunction
22、各位数字都是偶数:
PrivateFunctionpand(nAsInteger)AsBoolean
DimLAsInteger,SAsString,KAsInteger
S=CStr(n)'将n转化成字符串
ForL=1ToLen(S)
K=Val(Mid(S,L,1))'取字符串中的字符
IfKMod2<>0ThenExitFor'不排除K=0情况则多-个符合条件的数
NextL
IfL>Len(S)Thenpand=True'都是由偶数数字组成的
EndFunction
23、计算平均值:
PrivateSubjs(a()AsInteger,b()AsSingle)
DimiAsInteger,kAsInteger,jAsInteger
DimsumAsInteger
Fori=1ToUBound(a)
sum=0'和变量清零
Forj=0To4
k=(i+j)Mod20'定义循环下标
Ifk=0Thenk=UBound(a)
sum=sum+a(k)'a(j),求和
Nextj
b(i)=sum/5'计算平均值
Nexti
EndSub
24、求因子:
PrivateSubfac(nAsInteger,yz()AsInteger)
DimiAsInteger,kAsInteger
Fori=2Ton-1
IfnModi=0Then'i是n的一个因子
k=k+1'因子个数加1
ReDimPreserveyz(k)'重定义数组维数
yz(k)=i'给数组赋值
EndIf
Nexti
EndSub
25、各位数字不同的三位数:
PrivateFunctionpand(ByValnAsInteger)AsBoolean
Dimshz(3)AsInteger,iAsInteger,kAsInteger,jAsInteger
Do
k=k+1
shz(k)=nMod10'提取个位数字
n=n\10整除实现十进制数右移一位
LoopUntiln<=0
Fori=1To2
Forj=i+1To3
Ifshz(i)=shz(j)ThenExitFunction有数字相同退出函数
Nextj
Nexti
pand=True'没有数字相同
EndFunction
26、求谷点数(本行本列均为最小元素):
PrivateSubchzh(a()AsInteger,nAsInteger,fAsBoolean,kAsInteger)
DimiAsInteger,minvAsInteger
minv=a(n,1):
k=1
Fori=2ToUBound(a,2)
Ifminv>a(n,i)Then
minv=a(n,i):
k=i'查找每一行的最小值
EndIf
Nexti
Fori=1ToUBound(a,1)
Ifminv>a(i,k)ThenExitSub'判断这个最小值是否是列的最小值
Nexti
f=True
EndSub
27、查找绝对值最大的离差:
PrivateSubchzh(a()AsSingle,mavAsSingle,kAsInteger)
DimiAsInteger
mav=Abs(a
(1)):
k=1
Fori=2ToUBound(a)
IfAbs(a(i))>mavThen'查找绝对值最大的离差
mav=Abs(a(i))
k=i
EndIf
Nexti
EndSub
28、八进制转换:
PrivateFunctionchange(nAsInteger)AsString
DimkAsInteger,st()AsString*1,iAsInteger
Do
k=nMod8'取8的余数
i=i+1
ReDimPreservest(i)
st(i)=CStr(k)'保存8进制数
n=n\8
LoopUntiln<=0
Fork=1ToUBound(st)
change=st(k)&change构建8进制数的字符串
Nextk
EndFunction
29、查找幸运数(后两位是为完全平方数,前两数的数字位置相互颠倒后得到新数是素数):
Fori=xToy
st=CStr(i)'将i转换为字符串
c=Val(Left(st,2))'取i的前两位
d=Val(Right(st,2))'取i的后两位
IfSqr(d)=Int(Sqr(d))Andprime(change(c))
PrivateFunctionchange(nAsInteger)AsInteger
DimaAsInteger,bAsInteger
a=nMod10'取个位数字
b=n\10'取十位数字
change=a*10+b'计算逆序数
EndFunction
PrivateFunctionprime(nAsInteger)AsBoolean
DimiAsInteger
Ifn=1ThenExitFunction'1不是素数
Fori=2ToSqr(n)
IfnModi=0ThenExitFunction'不是素数
Nexti
prime=True'是素数
EndFunction
30、求降序数:
PrivateFunctionpand(ByValnAsInteger)AsBoolean
DimiAsInteger,num(3)AsInteger
Fori=1To3
num(i)=nMod10'取个位数字
n=n\10'十进制数向右移一位
Nexti
Ifnum(3)>num
(2)Andnum
(2)>num
(1)Thenpand=True'是降序数
EndFunction
PrivateSubCommand2_Click()
Text1="":
List1.Clear'清除文本框和列表框内容
EndSub
31、十六进制转换:
PrivateFunctionchange(sAsString)AsString
DimnAsInteger,pAsString,kAsInteger
p="ABCDEF"
n=Asc(s)'取s的ASCII值
Do
k=nMod16'取16进制的个位数
Ifk<10Then
change=CStr(k)&change构建16进制数的字符串
Else
change=Mid(p,k-9,1)&change'构建16进制数的字符串
EndIf
n=n\16
LoopUntiln<=0
change=change&"H"'构建16进制数的字符串
EndFunction
32、求回文数(正序与逆序相同的数):
PrivateFunctionpand(ByValnAsInteger)AsBoolea