VB常用算法总结大全.ppt_第1页
VB常用算法总结大全.ppt_第2页
VB常用算法总结大全.ppt_第3页
VB常用算法总结大全.ppt_第4页
VB常用算法总结大全.ppt_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

常用算法总结算法是对某个问题求解过程的描述,一、基本算法1.累加、连乘,1100的5或7的倍数的和Sum=0Fori=1To100IfiMod5=0OriMod7=0ThenSum=Sum+iEndIfNextiPrintSum,310的乘积t=1Fori=3To10t=t*iNextiPrintt,思考:若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?,例求自然对数e的近似值,要求其误差小于0.00001,近似公式为:该例题涉及两个问题:(1)用循环结构求级数和的问题。本例根据某项值的精度来控制循环的结束与否。(2)累加:e=e+t循环体外对累加和的变量清零e=0连乘:n=n*i循环体外对连乘积变量置1n=1PrivateSubForm_Click()Dimi%,neEndSub,2.求素数判别某数m是否为素数最简单的方法是:对于m从i=2,3,m-1判别m能否被i整除,只要有一个能整除,m不是素数,否则m是素数。Form=2To100Fori=2Tom-1If(mModi)=0ThenexitforNextiifIm-1thenmsgboxstr(m)+”是素数”Elsemsgboxstr(m)+”不是素数”EndIfNextm,m是否为素数,求100以内的素数,3.穷举法“穷举法”也称为“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。例百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为:x+y+y=1003x+2y+0.5z=100三个未知数,两个方程,此题有若干个解。解决此类问题采用“试凑法”,把每一种情况都考虑到。方法一:最简单三个未知数利用三重循环来实现。方法二:从三个未知数的关系,利用两重循环来实现。,方法一:PrivateSubForm_click()DimX%,y%,z%ForX=0To100ForY=0To100ForZ=0To100IfX+y+z=100And3*x+2*y+.5*z=100ThenPrintX,y,zEndIfNextZNextYNextXEndsub,方法二:ForX=0To33ForY=0To50Z=100-x-yIf3*x+2*y+.5*z=100ThenPrintX,Y,ZEndIfNextYNextX,4.递推法“递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。例猴子吃桃子。小猴在一天摘了若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半零一个,到第7天早上要吃时只剩下一个了,问小猴那天共摘下了多少个桃子?分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子。设第n天的桃子为xn,那么它前一天的桃子数是xn-1。,已知:当N=7第7天的桃子数为1,则第6天的桃子数由公式得4个,依次类推,可求得第1天的桃子数。程序如下:Privatesubform_click()DimIasintegerx=1print“第7天的桃子数为:1只”forI=6to1step1x=(x+1)*2print“第”;I;”天的桃子数为:”;x;”只”nextIEndsub,5.最小、最大值在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。例随机产生10个100200之间的数,求最大值。,PrivateSubCommand1_Click()Max=100Fori=1To10 x=Int(Rnd*101)+100Printx;IfxMaxThenMax=xNextiPrintPrint最大值=;MaxEndSub,6、求最大公约数,PrivateSubCommand1_Click()Dimm,n,rAsLongm=Val(Text1.Text)取数据Mn=Val(Text2.Text)取数据NIfmInt(m)ormInt(n)orn1ThenText3.Text=数据错误!ElseDo求最大公约数r=mModnm=nn=rLoopUntilr=0Text3.Text=CStr(m)输出最大公约数EndIfEndSub,判断数据是否合法,PrivateSubForm_Click()Fori=1To9Forj=1To9Printi;*;j;=;i*j;NextjPrintNextiEndSub执行本程序,窗体上将显示九九乘法表。,Forj=1Toi,7、关于循环嵌套(一个循环体内又包含了一个完整的循环结构称为循环的嵌套.),换行!,作用?,例:xh2.vbpSsfrm.frm,思考:打印上三角或下三角程序如何改动?要打印下三角?8.打印图形见下页,编写程序打印如右边图形:PrivateSubForm_Click()Fori=1To4PrintSpace(5-i);Forj=1To2*i-1Print*;NextjPrintNextiPrintEndSub,*,*,外循环用来控制输出的行数及每行第一个字符的输出位置,内循环用来控制每行输出的字符个数。,例:xh2.vbpshjs.frm,9.判断同构数(复习材料P39第7题),10.找亲密对数P111例5-1011.判断完数实验P55实验7-212.计算多项式的和实验P51实验6-313.求一个正整数K的各位数字之和复习材料P334.4练习题第1题14.报数问题P114例5-1215.判断回文数复习材料P41第10题或P81习题4,16.求自然数的因子P81习题5,PrivateSubCommand1_Click()DimaAsInteger,I%a=InputBox(输入一个自然数)Label1.Caption=Str(a)+的所有因子:ForI=1Toa-1IfaModI=0ThenList1.AddItem(Str(I)EndIfNextEndSub,二、数组的算法,1.数组元素的赋初值(1)用循环Fori=1To10A(i)=0NextiforI=1to10forJ=1to10B(I,J)=0nextJnexti,(2)Array函数DimibAsVariantib=Array(abc,def,67)Fori=0ToUBound(ib)Picture1.Printib(i);Nexti,注意:(1)利用Array对数组各元素赋值,声明的数组是可调数组或连圆括号都可省,并且其类型只能是Variant。(2)数组的下阶为零,上界由Array函数括号内的参数个数可决定,也可通过函数Ubound获得。,2数组的赋值在VB6.0中,提供了数组直接对数组的赋值。例如:Dima()AsVariant,b()AsVariant,i%a=Array(1,2,3,4,5)ReDimb(UBound(a)b=a,Fori=0ToUBound(a)b(i)=a(i)Nexti,相当于,注意:赋值号左边的数组只能声明为Variant的可调数组或简单变量。,3.数组的输出输出方阵SC中的下三角元素Fori=0To4Forj=0ToIj=0to4则输出整个数组sc(i,j)=i*5+jPrintsc(i,j);NextjPrint换行NextI,4.将数组中各元素交换(P115习题1)Fori=1To152t=A(i)A(i)=A(10-i+1)A(10-i+1)=tNexti,5、对数组的行/列操作(行、列的和),P115习题3:求二维数组每行的和数与每列的和数,数组元素为19之间的随机数。,OptionexplicitOptionbase1生成数组PrivateSubCommand1_Click()ForI=1To4ForJ=1To5A(I,J)=Int(9*Rnd)+1Picture1.PrintA(I,J);NextJPicture1.PrintNextIEndSub,求列和PrivateSubCommand2_Click()ForJ=1To5L(J)=0ForI=1To4L(J)=L(J)+A(I,J)NextIText2=Text2nextjprintNextIEndsub除法:除法操作必须先判别分母不为零,然后再进行对应元素的除法操作。,7、求数组靠边元素之和,不靠边元素之和P115习题6,Optionbase1Privatesubform_click()DimX%(4,5),s%(4),sum%ForI=1to4s(I)=0forj=1to5x(I,j)=inextjNextiForJ=1to5S(1)=S(1)+X(1,J)S(4)=S(4)+X(4,J)Nextj,11111222223333344444,ForI=2to3S(2)=S(2)+X(I,1)S(3)=S(3)+X(I,5)NextiforI=1to4SUM=SUM+S(I)NextiprintSUMEndsub,8,求数组对角线元素之积或和,Optionbase1Privatesubform_click()DimX%(4,4),S1NextJPrintNextIForI=1To5MAXI(I)=A(I,1)ForJ=1To8IfMAXI(I)cj(j,1)Thentemp=cj(i,1):cj(i,1)=cj(j,1):cj(j,1)=temptemp=cj(i,2):cj(i,2)=cj(j,2):cj(j,2)=tempEndIfNextNextEndSub,输出名次过程PrivateSuboutput(cj()AsSingle)DimjAsInteger,pAsIntegerp=1Print第;1;名是;cj(1,2);号运动员,成绩是:;cj(1,1)Forj=2To8Ifcj(j,1)=cj(j-1,1)ThenPrint第;p;名是;cj(j,2);号运动员,成绩是:;cj(j,1)ElsePrint第;j;名是;cj(j,2);号运动员,成绩是:;cj(j,1)p=jEndIfNextPrintEndSub,窗体事件过程输入运动员成绩PrivateSubForm_Click()DimiAsIntegerDimproAsString,cj(8,2)AsSingleRandomizeFori=1To8pro=请输入第+Str(i)+位运动员的成绩:cj(i,1)=InputBox(pro)cj(i,2)=iPrintcj(i,1);NextPrintPrintCallsort(cj)Calloutput(cj)EndSub,15.数组元素的插入与删除(1)插入排序复习材料P50第23在有序数组a(1ton)(原有n-1个元素)插入一个值Key元素,算法:查找要插入的位置k(1=k=n-1),腾出位置,把最后一个元素开始到第K个元素往后移动一个位置,第k个元素的位置腾出,就可将数据Key插入,Privatesubcommand1_clickDima%(11),I%,J%,X%ForI=1to10a(I)=I*5+1通过程序自动生成有规律的数组NextIX=Inputbox(“输入任意数X:”)ForI=1to10查找欲插入数X在数组中的位置ifXa(I)thenexitfor找到插入的位置下标为INextIForJ=11toI+1step1从最后元素开始往后移,腾出位置a(J)=a(J-1)NextJA(I)=XEndsub,(2)删除重复元素见P113例5-11首先也是要找到欲删除的元素的位置k;然后从k+1到n个位置开始向前移动;最后将数组元素减1。例如,要将值为13的元素删除的过程为:,Dima()asinteger声明为动态数组.Redima(1ton)声明为有N个元素的数组查找到要删除的元素下标为KForI=k+1toN从K+1个元素开始往前移A(I-1)=a(I)NextI最后一个元素的位置空出,利用数组重新声明减少一个元素,但要保留原来值Redimpreservea(1ton-1),排序法有:选择、冒泡、插入法排序及合并排序等。前两种排序欲排序的数据全部输入后,再进行排序;插入法排序每输入一项,马上插入到数组应在的位置,数组始终有序。用插入排序法输入不多于20个数,使数组保持递增的序列。对数组中已有N-1个有序数,当输入某数X时,插入排序法实现的步骤:(1)输入欲排序的数据项x;在数组a中找x应所处的位置j;(2)从数组的最后一个元素开始到下标j依次往后移,使j位置空出;(3)将x放入位置j处,一个数据插入完成;(4)有若干个数重复(1)(3)。对于若干个数输入,只要调用插入排序过程即可。,DimnAsIntegerSubinsert(a()AsSingle,ByValx!)Dimi%,j%j=1DoWhileja(j)j=j+1LoopFori=n-1TojStep-1a(i+1)=a(i)Nextia(j)=xEndSub,PrivateSubText1_KeyPress(KeyAsciiAsInteger)Staticbb!(1To20)Dimi%Ifn=20ThenMsgBox数据太多!,1,警告EndEndIfIfKeyAscii=13Thenn=n+1Callinsert(bb(),Val(Text1)Picture1.PrintText1Fori=1TonPicture2.Printbb(i);NextiPicture2.PrintText1=EndIfEndSub,数组的合并排序,从键盘读取数组a和b(各5个元素),a,b都是严格递增的(即元素从小到大排列,且无重复元素),将a,b合并成c数组,使C也严格递增。若a,b中有相同的元素只保留一个,最后输出数组C。编写通用过程OutPut,在窗体上打印数组。,OptionExplicitDima(5)AsInteger,b(5)AsInteger,c()AsIntegerPrivateSuboutput(d()AsInteger)输出数组的通用过程DimiAsIntegerFori=1ToUBound(d)Printd(i);NextiPrintEndSub,PrivateSubCommand1_Click()数组输入DimiAsIntegerFori=1To5a(i)=InputBox(“输入数组a(“+str(I)+”)”)NextiPrint数组A:Calloutput(a)Fori=1To5b(i)=InputBox(“输入数组b(“+str(I)+”)”)NextiPrint数组B:Calloutput(b)EndSub,PrivateSubCommand2_Click()数组合并输出DimpAsInteger,qAsInteger,rAsIntegerDimiAsIntegerp=1:q=1:r=1DoWhilepb(q)Thenc(r)=b(q)r=r+1q=q+1ElseIfa(p)Asc(z)Theniasc=iasc-26code=code+Chr$(iasc)CaseElse当第I个字符为其他字符时不加密code=code+cEndSelectNextiText2=code显示加密后的字符串EndSub,PrivateSubCommand3_Click()清屏Text1=Text2=Text3=Text1.SetFocusEndSub,(3).字符统计输入一串字符,统计各字母出现的次数,大小写字母不区分。分析:1.统计26个字母出现的个数,先声明一个具有26个元素的数组,每个元素的下标表示对应的字母,元素的值表示对应字母出现的次数。2.从输入的字符串中逐一取出字符,转换成大写字符(使得大小写不区分),进行判断。3.运行界面:,Privatesubcommand1_ClickDima(1to26)asInteger,casString*1Le=len(text1)ForI=1Tolec=UCase(Mid(Text1,I,1)Ifc=AAndc0thenPicture1.print“”;chr(j+64);“=”;a(j);NextjEndsub,(4).字符串处理编写一个英文打字训练的程序.要求如下:(1)在标签框内随机产生30个字母的范文;(2)当焦点进入文本框时开始计时,并显示当时时间;(3)在键入文本框按产生的范文输入相应的字母;(4)当键入满了30个字母结束计时,禁止向文本框输入内容,键入的字符逐一范文比较,显示打字的速度和正确率。,PrivateSubCommand1_Click()产生30个字母的范文RandomizeText1=Fori=1To30a=Chr$(Int(Rnd*25)+65)随机产生大写字母Text1=Text1+a产生的大写字母送入范文框NextiEndSub,PrivateSubCommand2_Click()EndEndSubPrivateSubText2_GotFocus()输入文本框获取焦点,开始计时t=TimeEndSub,PrivateSubText2_KeyPress(KeyAsciiAsInteger)IfLen(Text2)=30Then输入满30个字符t2=DateDiff(“s”,t,Time)计算速度Text3=t2&“秒”显示速度Text2.Locked=True不允许修改y=0:n=0Fori=1To30比较正确率IfMid(Text1,i,1)=Mid(Text2,i,1)Theny=y+1Elsen=n+1EndIfNextiy=y/(y+n)*100Text4=y&%EndIfEndSub,5.密码翻译实验P55实验6-66.字符串颠倒后输出实验P52实验6-4,四、数值计算算法,(1).高次方程求根有牛顿迭代法、二分法、弦截法等(1)牛顿迭代法迭代公式:思想:对方程给定一个初值x0作为方程的近似根,利用迭代公式,求得x1,当x1为求得的近似根,否则x1作为x0再迭代。,P78例4-9用牛顿迭代法求方程xex-1=0在0.5b附近的根。PrivateSubComma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论