VB常用算法(一)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

常用算法(一)算法是对某个问题求解过程的描述1.累加、连乘1~100的5或7的倍数的和Sum=0Fori=1To100'循环iMod5=0OriMod7=0ThenSum=Sum+iNextiPrintSum3~10的乘积t=1Fori=3To10t=t*iNextiPrintt思考:若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?1、计算n!PrivateSubForm_Click()鼠标单击窗体事件Dimn%,s%'%:整型数据类型'相当于DimnAsInteger,定义整数类型变量n,sn=InputBox(请输入n的值)'n=5s=1Fori=1Ton'循环当i=1-5时s=s*i's=1*1*2*3*4*5=120NextiPrintn&!=;s'//输出5!=120EndSub2、计算1!+2!+3!+….+10!PrivateSubForm_Click()Dims&,a&'%整型&长整型!单精度型#双精度型s=0a=1Fori=1To10'i=1时a=1*1s=0+1=1a=a*i'i=2时a=1*2=2!s=1+2!s=s+a'i=3时a=1*2*3=3!s=1+2!+3!Nexti'i=4时a=1*2*3*4=4!s=1+2!+3!+4!Print1!+2!+...+10!=;sEndSub例4.14求自然对数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;项的和是;eEndSubm1i0ii!11i!1...!1...3!1!211!11ei2.求素数素数是一个大于2,且不能被1和本身以外的整数整除的整数。判别某数m是否为素数最简单的方法是:对于m从i=2,3,…,m-1判别m能否被i整除,只要有一个能整除,m不是素数,否则m是素数。例4.15求100以内素数的代码:Form=2To100Fori=2Tom-1If(mModi)=0ThenGoToNotNextM当运行到goto即会跳转到对应地方NextiPrintmNotNextM:Nextmm是否为素数求100以内的素数思考:此例用GoTo语句对非素数不作判断,若不用GoTo语句,如何修改程序?判断一个数M是不是素数PrivateSubForm_Click()m=Val(InputBox(请输入一个数:))Fori=2Tom-1IfmModi=0ThenExitFor'退出for循环NextiIfi=m-1ThenPrintm;是素数ElsePrintm;不是素数EndIfEndSub'9拿2-8每一个数去除i=3时9mod3=0输出100到300之间的所有素数(每行输出5个)PrivateSubForm_Click()t=0Form=100To300m=100Fori=2Tom-1IfmModi=0ThenExitForNextiIfi=m-1ThenPrintTab(t*8);m;:t=t+1Ift=5Thent=0:PrintNextmEndSub3.穷举法“穷举法”也称为“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。例4.16百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为:x+y+Z=1003x+2y+0.5z=100三个未知数,两个方程,此题有若干个解。解决此类问题采用“试凑法”,把每一种情况都考虑到。方法一:最简单三个未知数利用三重循环来实现。方法二:从三个未知数的关系,利用两重循环来实现。PrivateSubForm_Click()Dimx%,y%,z%‘%、!分别为整型和单精度型数据类型Forx=0To33'母鸡3元一只,最多33只Fory=0To50step1'公鸡2元一只,最多50只z=100-x-yIfx*3+y*2+0.5*z=100ThenPrint母鸡:;x,公鸡:;y,小鸡:;zEndIfNexty'下一个yy=y+1必须先结束内循环,才开始下一次外循环Nextx'下一个xx=x+1EndSub4.递推法“递推法”又称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。例4.17猴子吃桃子。小猴在某天摘桃若干个,当天吃掉一半多一个;第二天吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半多一个,到第7天要吃时只剩下一个,问小猴共摘下了多少个桃子?分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子……。设第n天的桃子为xn,那么它是前一天的桃子数的xn-1的一半减1,即xn=(xn-1+1)×2PrivateSubForm_Click()Dimx%,i%x=1Fori=7To1Step-1Print第;i;天的桃子数为:;xx=(x+1)*2NextiEndSub5.最小、最大值在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。例随机产生10个100~200之间的数,求最大值。PrivateSubCommand1_Click()Max=100Fori=1To10x=Int(Rnd*101+100)Printx;IfxMaxThenMax=xNextiPrintPrint最大值=;MaxEndSub求两个整数的最大公约数、最小公倍数PrivateSubForm_Click()m=Val(InputBox(请输入第一个数:))n=Val(InputBox(请输入第二个数:))Printm=;m,n=;nIfmnThent=m:m=n:n=tr=mModnDoWhiler0m=nn=rr=mModnLoopPrint最大公约数是:;nEndSub常见错误1.不循环或死循环的问题主要是循环条件、循环初值、循环终值、循环步长的设置有问题。2.循环结构中缺少配对的结束语句For少配对的Next3.循环嵌套时,内外循环交叉4.累加、连乘时,存放累加、连乘结果的变量赋初值问题(1)一重循环在一重循环中,存放累加、连乘结果的变量初值设置应在循环语句前。(2)多重循环这要视具体问题分别对待。

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功