Visual Basic程序设计语言常用算法例题源代码30题.docx
- 文档编号:8804765
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:29
- 大小:42.54KB
Visual Basic程序设计语言常用算法例题源代码30题.docx
《Visual Basic程序设计语言常用算法例题源代码30题.docx》由会员分享,可在线阅读,更多相关《Visual Basic程序设计语言常用算法例题源代码30题.docx(29页珍藏版)》请在冰豆网上搜索。
VisualBasic程序设计语言常用算法例题源代码30题
VisualBasic程序设计语言
常用算法源代码30例题
1、统计随机产生的十个两位正整数中偶数与奇数的个数,并求出偶数与奇数各自的总和
OptionExplicit
PrivateSubForm_Click()
DimxAsInteger,s1AsInteger,s2AsInteger
Dimn1AsInteger,n2AsInteger,iAsInteger
Randomize
Fori=1To10
_x=int(90*rnd)+10__
Printx;
If_xmod2=0Then
n2=n2+1
s2=s2+x
Else
___n1=n1+1_
s1=s1+x
EndIf
Nexti
Print"奇数个数=";n1;"偶数个数=";n2;
EndSub
2.从字符串中分离数字和字母
PrivateSubCommand1_Click()
DimsAsString,iAsInteger
ConstchAsString=“0123456789.”
s="2L0A09U.0SI3V.24"
Fori=1ToLen(s)
IfInStr(ch,Mid(s,i,1))=0Then
st1=Mid(s,i,1)&st1
Else
st2=st2&Mid(s,i,1)
EndIf
Nexti
Printst1:
Printst2
EndSub
3.统计字符串中“O”的个数
PrivateSubCommand1_Click()
a="THEREISABOOKONTHEDESK"
m=len(a)
Fori=1Tom
b=mid(a,i,1)
Ifb="O"Thennum=num+1
Nexti
Printnum
EndSub
4.从给定的字符串中只分离出数字
PrivateSubCommand1_Click()
DimsAsString,tAsString
DimiAsInteger
s=Text1.Text
Fori=1ToLen(s)
IfMid(s,i,1)>="0"AndMid(s,i,1)<=9Then
t=t&Mid(s,i,1)
EndIf
Nexti
Text2.Text=t
EndSub
5.
(一)将正整数转化成二进制数
PrivateSubCommand1_Click()
DimnAsLong,tAsString
n=Val(Text1.Text)
Do
t=nMod2&t
n=n\2
LoopUntiln=0
Text2.Text=t
EndSub
5、
(二)将正整数转化成16进制
PrivateSubCommand1_Click()
DimnAsLong,tAsString,gAsString
n=Val(Text1.Text)
Do
g=nMod16
IfVal(g)>9Then
g=Chr(55+Val(g))
EndIf
t=g&t
n=n\16
LoopUntiln=0
Text2.Text=t
EndSub
5、(三)将正整数转化成8进制
PrivateSubCommand1_Click()
DimnAsLong,tAsString
n=Val(Text1.Text)
Do
t=nMod8&t
n=n\8
LoopUntiln=0
Text2.Text=t
EndSub
6.找出100以内的所有勾股数(不包括100)
PrivateSubForm_Click()
DimaAsInteger,bAsInteger,cAsInteger,nAsInteger
Fora=1To99
Forb=1To99
Forc=1To99
Ifa^2+b^2=c^2Anda<>bThen
n=n+1
Printa;b;c;“;“;
IfnMod5=0Then
EndIf
EndIf
Nextc
Nextb
Nexta
Printn
EndSub
7.找出三位数字中的所有升序数(各位数字>十位数字>百位数字)
PrivateSubForm_Click()
DimaAsInteger,bAsInteger,cAsInteger,nAsInteger
Fora=1To9
Forb=1To9
Forc=1To9
Ifa n=n+1 Printa*100+b*10+c; IfnMod10=0Then'控制每行打印10个 Print EndIf EndIf Nextc Nextb Nexta Printn EndSub 或 DimnAsInteger,a1AsInteger,a2AsInteger,a3AsInteger,jsAsInteger Forn=100To999 a1=n\100‘取出百位数字 a2=n\10Mod10‘取出十位数字 a3=nMod10‘取出个位数字 Ifa1 js=js+1 Printn; IfjsMod10=0Then Print EndIf EndIf Nextn Printjs EndSub 利用过程调用思想求升序数 例找出a-b范围内的所有升序数,a>=100,b<=30000 Privatesubcommand1_click() Dimaasinteger,basinteger,iasinteger a=text1: b=text2 Fori=atob Ifsx(i)then List1.additemi Endif Nexti Endsub Privatesubfunctionsx(byvalnasinteger)asboolean Dima()asinteger,kasinteger,iasinteger Do K=k+1 Redimpreservea(k) a(k)=nmod10 n=n\10 loopuntiln<=0 fori=1toubound(a)-1 ifa(i+1)>=a(i)thenexitfunction(应该去判断a (1)>a (2)……a(k)但是不好判断,遇难则反,只要有一个a(i+1)>=a(i)这不是升序数) nexti sx=true endfunction 8.最小公倍数 PrivateSubForm_Click() Dimm%,n%,tem% m=Val(Text1.Text) n=Val(Text2.Text) tem=m DoWhiletemModn<>0 tem=tem+m Loop Printm;"和";n;"的最小公倍数是: ";tem EndSub 9.求一维数组a(n)各元素的和: Dimsasinteger,Iasintger s=0 fori=1ton s=s+a(i) nexti 10.求二维数组a(n,m)各元素的和 Dimsasinteger,iasinteger,jasinteger s=0 Fori=1ton forj=1tom s=s+a(i,j) nextj Nexti 11.求二维数组a(m,n)周边元素的和 Dimsasinteger,iasinteger S=0 Fori=1ton s=s+a(1,i)+a(m,i)(求第一行与最后一行的和) Nexti fori=2tom-1 s=s+a(i,1)+a(i,n)(求第二行到倒数第二行第一列与最后一列的和) Nexti 12、求二维数组a(n,n)主对角线元素的和(理解主对角线) Dimsasinteger,iasinteger S=0 Fori=1ton s=s+a(i,i) Nexti 13、求二维数组a(n,n)次对角线元素的 Dimaasinteger,iasinteger S=0 Fori=1ton s=s+a(i,n+1-i) Nexti 14、三种排序法 (1)选择排序法是逐个比较,逆序交换;冒泡法是两两比较,逆序交换. (2)直接排序法(以降序为例)特点: 比较后不立即互换元素,而是记下较大值的位置,并在每一轮比较完毕后和S(i)互换 选择排序法(比较排序法)基本过程(以降序为例): 将第一个元素顺序与其后面的元素比较,比第一个大则进行交换,第一轮完毕后,最大的元素被挪到了第一个位置,第二轮从第二个元素开始重复上面的过程,结束后得到第二个最大的元素,如此下去经过N-1轮的比较,可将N个数排好 (3)冒泡法排序(以升序为例),则方法为: 将相邻两个数比较,把小数对调到前边,如此进行一轮后,就会把最大的数互换到最后,再进行一次,则会把第二大数排在倒数第二的位置上,进行N-1次后,整个数列即可排好.在这种排序过程中,小数如同气泡一样逐层上浮,而大数逐个下沉,因此,被形象的喻为“冒泡”. 选择法对数组经行降序排列 Optionexplicit Optionbase1 Privatesubcommand1_click() Dimsort(10)asinteger,tempasinteger,iasinteger,jasinteger Fori=1to10 Sort(i)=int(rnd*99)+1 Text1=text1&str(sort(i)) Nexti Fori=1to9 Forj=i+1to10 Ifsort(i) Temp=a(i) a(i)=a(j) a(j)=temp endif nextj text2=text2&str(sort(i)) nexti text2=text2&str(sort(i)) endsub 直接排序法的精髓(降序) Fori=1toN-1 pointer=I ‘初始化pointer,在每轮比较开始处 forj=I+1toN ifSort(pointer) nextj ifI<>pointerthen temp=Sort(i)‘交换 Sort(i)=Sort(pointer) Sort(pointer)=temp endif NextI 冒泡排序法的精髓(升序) Fori=1toN-1 forj=1toN-i‘比较次数逐次减少 ifS(j)>S(j+1)then t=S(j) S(j)=S(j+1) S(j+1)=t‘立即互换 endif nextj nexti 15、求三个数的和! PrivateSubifnum(str1AsString,nAsInteger) DimkAsInteger Fork=1ToLen(str1)‘逐个字符判断是否为数字 IfAsc(Mid(str1,k,1))<48OrAsc(Mid(str1,k,1))>57Then n=0: ExitSub EndIf Nextk n=1 EndSub PrivateSubCommand1_Click() DimaAsString,bAsString,cAsString Dimy1AsInteger,y2AsInteger,y3AsInteger a=Text1.Text‘a,b,c用来取得三个文本框的字符串 b=Text2.Text c=Text3.Text Callifnum(a,y1)'用来判断a,b,c是否为数字串,为数字串时y1,y2,y3都为1 Callifnum(b,y2) Callifnum(c,y3) Ify1=1Andy2=1Andy3=1Then Text4.Text=Val(a)+Val(b)+Val(c) Else Text4.Text="三个文本框内有非数字串" EndIf EndSub 16.求三个数的最小公倍数 OptionExplicit PrivateSubCommand1_Click() DimAAsInteger,BAsInteger DimLAsLong,CAsInteger A=Text1 B=Text2 C=Text3 L=LCM(LCM(A,B),C) Text4=L EndSub PrivateFunctionLCM(ByValXAsInteger,ByValYAsInteger) DimMAsLong,FlgAsBoolean Flg=False DoUntilFlg M=M+X IfMModY=0Then Flg=True EndIf Loop LCM=M EndFunction 17.打印九九乘法表 Privatesubform_click DimIasinteger,jasinteger Fori=1to9 Forj=1toi Printj;”*”I;”=”i*j; Nextj print Nexti Endsub 18判断完数(一个数如果恰好等于他所有因子之和,这个数就是完数。 一个数的因子是指除了该数本身以外能够整除该数的数) Privatesubcommand1_click() Dimmasinteger,iasinteger,jasinteger,sumasinteger Dima() M=text1 Fori=1tom-1 Ifmmodi=0then Sum=sum+i J=j+1 Redimpreservea(j) a(j)=i endif nexti ifm=sumthen picture1.printm&“是完数,因为” picture1.printm;”=” fori=1toubound(a)-1 picture1.printa(i);“+”; nexti picture1.printa(i) else picture1.printm&“不是完数” endif endsub 19.判断亲密对数(甲数的所有因子之和等于乙数,乙数的所有因子之和等于甲数)---找出5000以内的亲密对数 Privatesubcommand1_click() Dimiasinteger,sum1asinteger,sum2asinteger Fori=1to5000 Callsum_factors(I,sum1) Callsumfactors(sum1,sum2) Ifi=sum2andi<>sum1then Text1=text1&I&“,”&sum1&vbcrlf Endif Nexti Endsub Privatesubsum_factors(byvalnasinteger,sumasinteger) DimIasinteger Sum=0 Fori=1ton-1 Ifnmodi=0then Sum=sum+i Endif Nexti Endsub 20.判断孪生素数(a,b都是素数,且|a-b|=2) 例求x到y之间的孪生素数 Privatesubcommand1_click() Dimxasinteger,Iasinteger,yasinteger x=text1: y=text2 fori=xtoy-2 ifjudge(i)andjudge(i+2)then list1.additemI&““&i+2 endif nexti endsub privatefunctionjudge(nasinteger)asBoolean dimiasinteger fori=2ton-1 ifnmodi=0thenexitfunction nexti judge=true endfunction 21.求armstrong数(一个n位的正整数其各位的n次方只和等于这个数) 如153=1^3+5^3+3^3 Optionexplicit Optionbase1 Privatesubcommand1_click() Dimbasinteger,Iasinteger,casinteger,tasinteger,sasdouble Dimj()asinteger Fori=10to9999 C=len(cstr(i)) S=0 Forb=1toc Redimpreservej(b) j(b)=val(mid(i,b,1)) s=s+j(b)^c nextb ifi=sthen text1=text1&i&“=” fort=1toc-1 text1=text1&j(b)&“^”&c&“+” nextt text1=text1&j(c)&“^”&c&vbcrlf endif nexti endsub *补充说明 分解数字的两种方法 <1>首先提取的是个位数字 Do K=k+1 Redimpreservea(k) a(k)=nmod10 n=n\10 loopuntiln<=0 <2>首先提取的是最高位数 S=cstr(n) Fori=1tolen(s) Redimpreservea(len(s)) a(i)=mid(s,i,1) nexti 22.判断自守数(是指这个数平方运算后尾数等于该数自身的自然数) Privatesubcommand1_click() Dimxaslong x=val(text1) ifzi(x)then list1.additemx else msgboxstr(x)&“不是自守数。 ” endif endsub privatefunctionzi(xaslong)asboolean dimyasinteger,sasinteger,zasstring zi=false y=x*x s=len(sctr(x)) ifx=val(right(cstr(y),s))then zi=true endif endfunction 23.求一个n为正整数的反序数(1234---4321)如果一个数的末尾为0,这该数没反序数 Privatesubcommand1_click() Dimnaslong n=text1 ifright(cstr(n),1)=0then text2=”尾数为0,没有反序数” else text2=nx(n) endsub privatefunctionnx(naslong)aslong dimstasstring,sasinteger,iasinteger s=len(cstr(n))(统计正整数n的长度) fori=sto1step-1 st=st&mid(cstr(n),i,1) nexti nx=val(st) endsub 或 Privatesubcommand1_click() Dimnaslong n=text1 ifright(cstr(n),1)=0then text2=”尾数为0,没有反序数” else text2=nx(n) endsub privatefunctionnx(naslong)aslong dimkasinteger,stasstring do k=nmod10 st=st&k n=n\10 loopuntiln<=0 nx=val(st) endfunction 24.利用通用过程求最值 privatesubcommand1_click() dimx(10)asinteger,maxvasinteger,minvasinteger,iasinteger fori=1to10 x(i)=int(90*rnd)+10 text1=text1&str(x(i)) nex
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Visual Basic程序设计语言常用算法例题源代码30题 Basic 程序设计语言 常用 算法 例题 源代码 30