您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 求职简历 > VB常用算法总结大全
常用算法总结—算法是对某个问题求解过程的描述一、基本算法1.累加、连乘1~100的5或7的倍数的和Sum=0Fori=1To100IfiMod5=0OriMod7=0ThenSum=Sum+iEndIfNextiPrintSum3~10的乘积t=1Fori=3To10t=t*iNextiPrintt思考:若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?例求自然对数e的近似值,要求其误差小于0.00001,近似公式为:该例题涉及两个问题:(1)用循环结构求级数和的问题。本例根据某项值的精度来控制循环的结束与否。(2)累加:e=e+t循环体外对累加和的变量清零e=0连乘:n=n*i循环体外对连乘积变量置1n=1PrivateSubForm_Click()Dimi%,n&,t!,e!e=0:n=1‘e存放累加和、n存放阶乘i=0:t=1‘i计数器、t第i项的值DoWhilet0.00001e=e+t:i=i+1‘累加、连乘n=n*i:t=1/nLoopPrint计算了;i;项的和是;eEndSubm1i0ii!11i!1...!1...3!1!211!11ei2.求素数判别某数m是否为素数最简单的方法是:对于m从i=2,3,…,m-1判别m能否被i整除,只要有一个能整除,m不是素数,否则m是素数。Form=2To100Fori=2Tom-1If(mModi)=0ThenexitforNextiifIm-1thenmsgboxstr(m)+”是素数”Elsemsgboxstr(m)+”不是素数”EndIfNextmm是否为素数求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,ZEndIfNextYNextX4.递推法“递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。例猴子吃桃子。小猴在一天摘了若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半零一个,到第7天早上要吃时只剩下一个了,问小猴那天共摘下了多少个桃子?分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子……。设第n天的桃子为xn,那么它前一天的桃子数是xn-1。2)1(12111nnnnxxxx也就是:即:已知:当N=7第7天的桃子数为1,则第6天的桃子数由公式得4个,依次类推,可求得第1天的桃子数。程序如下:Privatesubform_click()DimIasintegerx=1print“第7天的桃子数为:1只”forI=6to1step–1x=(x+1)*2print“第”;I;”天的桃子数为:”;x;”只”nextIEndsub5.最小、最大值在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。例随机产生10个100~200之间的数,求最大值。PrivateSubCommand1_Click()Max=100Fori=1To10x=Int(Rnd*101)+100Printx;IfxMaxThenMax=xNextiPrintPrint最大值=;MaxEndSub6、求最大公约数PrivateSubCommand1_Click()Dimm,n,rAsLongm=Val(Text1.Text)‘取数据Mn=Val(Text2.Text)‘取数据NIfmInt(m)orm1ornInt(n)orn1ThenText3.Text=数据错误!ElseDo‘求最大公约数r=mModnm=nn=rLoopUntilr=0Text3.Text=CStr(m)‘输出最大公约数EndIfEndSub判断数据是否合法PrivateSubForm_Click()Fori=1To9Forj=1To9Printi;*;j;=;i*j;NextjPrintNextiEndSub执行本程序,窗体上将显示九九乘法表。Forj=1Toi7、关于循环嵌套(一个循环体内又包含了一个完整的循环结构称为循环的嵌套.)换行!作用?例:xh2.vbpSsfrm.frm思考:打印上三角或下三角程序如何改动?要打印下三角?8.打印图形见下页编写程序打印如右边图形:PrivateSubForm_Click()Fori=1To4PrintSpace(5-i);Forj=1To2*i-1Print*;NextjPrintNextiPrintEndSub********************************外循环用来控制输出的行数及每行第一个字符的输出位置内循环用来控制每行输出的字符个数。例:xh2.vbpshjs.frm9.判断同构数(复习材料P39第7题)10.找亲密对数P111例5-1011.判断完数实验P55实验7-212.计算多项式的和实验P51实验6-313.求一个正整数K的各位数字之和复习材料P334.4练习题第1题14.报数问题P114例5-1215.判断回文数复习材料P41第10题或P81习题416.求自然数的因子P81习题5PrivateSubCommand1_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获得。3.数组的输出输出方阵SC中的下三角元素Fori=0To4Forj=0ToI’j=0to4则输出整个数组sc(i,j)=i*5+jPrintsc(i,j);;NextjPrint'换行NextI4.将数组中各元素交换(P115习题1)Fori=1To15\2t=A(i)A(i)=A(10-i+1)A(10-i+1)=tNexti5、对数组的行/列操作(行、列的和)P115习题3:求二维数组每行的和数与每列的和数,数组元素为1—9之间的随机数。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=Text2&Str(L(J))NextJEndSubPrivateSubCommand3_Click()ForI=1To4H(I)=0ForJ=1To5H(I)=H(I)+A(I,J)NextJText1=Text1&Str(H(I))&vbCrLfNextIEndSub’清除图片框和文本框PrivateSubCommand4_Click()Picture1.ClsText1=Text2=EndSub'求行和6、同维数组对应元素的算术运算(+、-、*、/)OptionexplicitOptionbase1Privatesubform_click()DimX%(5,5),Y%(5,5),Z%(5,5)ForI=1to5forj=1to5x(I,j)=int(100*rnd)+1y(I,j)=int(100*rnd)+1nextjNextiForI=1to5forJ=1to5Z(I,J)=X(I,J)+Y(I,J)nextjNexti可改为减法、乘法存放结果数组也必须定义ForI=1to5forJ=1to5printZ(I,J);nextjprintNextIEndsub除法:除法操作必须先判别分母不为零,然后再进行对应元素的除法操作。7、求数组靠边元素之和,不靠边元素之和P115习题6Optionbase1Privatesubform_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)Nextj11111222223333344444ForI=2to3S(2)=S(2)+X(I,1)S(3)=S(3)+X(I,5)NextiforI=1to4SUM=SUM+S(I)NextiprintSUMEndsub8,求数组对角线元素之积或和Optionbase1Privatesubform_click()DimX%(4,4),S1&,S2&S=1:S2=1ForI=1to4forj=1to4x(I,j)=inextjNextiFori=1to4S1=s1*X(i,i)NextIprintSEndsub1111222233334444若为“+”,则为对角线的和,但S1,S2初值为0ForI=1To4ForJ=1To4IfI+J=5ThenS2=S2+A(I,I)EndIfNextJNextIText3=“两条对角线的积_分别是:&S1&&S2EndSubP115习题69.求二维数组中每行/列元素的最大/最小OptionExplicitOptionBase1PrivateSubForm_Click()DimA%(5,8),I%,J%DimMAXI%(5),MAXJ%(8)ForI=1To5ForJ=1To8A(I,J)=Int(90*Rnd)+10PrintA(I,J);NextJPrintNextIForI=1To5MAXI(I)=A(I,1)ForJ=1To8IfMAXI(I)A(I,J)ThenMAXI(I)=A(I,J)NextJPrint第;I;行的最大值是:;MAXI(I),NextIPrint生成数组并输出求每行最大并输出9.求二维数组中每行/列元素的最大/最小ForJ=1To8MAXJ(J)=A(1,J)ForI=1To5IfMAXJ(J)A(I,J)ThenMAXJ(J)=A(
本文标题:VB常用算法总结大全
链接地址:https://www.777doc.com/doc-4010765 .html