您好,欢迎访问三七文档
程序设计语言的三种基本结构流程图:语句块1语句块2顺序结构条件语句块1语句块2真假选择结构条件循环体真假循环结构循环体条件假真循环结构用于在一定的条件下多次重复执行一组语句.例如:在一行上输出60个“*”号。用Print方法方法一:可以用60个“*”号组成一个字符串:Print“***……**”方法二:使用60个语句:Print*;Print*”;……Print*流程图2.条件型循环(未知循环次数)1.计数型循环(已知循环次数)分类:学习要点:2.实现循环的算法1.进入循环的条件3.退出循环的条件一:For循环语句:计数型(一般用于循环次数已知)形式如下:For循环变量=初值to终值[Step步长]语句块[ExitFor]语句块Next循环变量例:ForI=2To13Step3PrintI,NextIPrint:Print“I=“,IExitfor:当遇到该语句,退出循环,执行该循环的下一条语句。步长(也可为实数)0初值终值(=1时,可省略)0初值终值=0死循环循环次数=int((终值-初值)/步长)+1循环变量:必须是数值型语句块:可以是一条或多条语句,【说明】For循环流程图循环变量得到初值循环变量在终值内T语句块循环变量加步长F有ExitForFTFor…Next流程图例:ForI=2To13Step3PrintI,NextIPrint:Print“I=“,I结果:输出I的值分别为:25811循环执行次数:4)1(3213Int循环结束输出为:I=14(初值+循环次数*步长)思考1:计算下列循环语句的次数。(1)forI=-3to20step4(2)forI=-3.5to5.5step0.5(3)forI=-3.5to5.5step–0.5(4)forI=-3to20step0结果分别为:6190无数次思考2:如果事先不知道循环次数,如何用For…..Next?For循环变量=1to非常大的数if达到循环结束条件thenexitfor….Netxt循环变量例4.9改变循环控制变量对循环的影响PrivateSubCommand1_Click()j=0Fori=1To20Step2i=i+3“有无此句结果有什么不同?j=j+1Print第;j;次循环i=;iNextiPrint退出循环后i=;iEndSub正常情况:i=1,3,5,7,9,11,13,15,17,19现在:i=4,9,14,19★:常用算法:累加,连乘算法:是对某个问题求解过程的描述例:累加求1-100的偶数和。PrivateSubForm_Load()DimiAsInteger,sAsIntegerShows=0Fori=2To100Step2s=s+I‘赋值语句实现NextiPrints=;sEndSub例:连乘求自然数1-30的乘积(即30的阶乘)PrivateSubForm_Click()s=1Fori=1To10s=s*I‘赋值语句实现Printi;的阶乘是:;sNextiEndSub思考?若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?PrivateSubForm_Click()Fori=3To100step3sum=0sum=sum+INextIPrintsumEndSub结论;在一重循环中,存放累加,连乘结果的变量初值设置应该放在循环体外。二:Do…Loop循环语句:条件型(用于控制循环次数未知)形式1:先判断后循环形式2:先做后判断Do{While|Until}条件语句块[ExitDo]语句块LoopDo语句块[ExitDo]语句块Loop{While|Until}条件【说明】:1)形式1先判断后执行,有可能一次也不执行形式2先执行后判断,最少执行一次循环体2)While用于指明条件为真时执行循环体;Until刚好相反。3)当省略了{While|Until}条件子句,表示无条件循环,循环体中应有ExitDo语句,否则为死循环。4)遇到ExitDo语句时退出循环,执行Loop下一条语句。DoWhile…Loop流程图Do…WhileLoop流程图条件语句块语句块TF语句块语句块条件TF有ExitDoFT有ExitDoFTDoWhile|Until...Loop流程图例4.11:我国有13.2亿人口,按出生率为0.5%的增长率,多少年后超过20亿?PrivateSubForm_Load()DimmAsDoubleDimyearrAsIntegerShowm=1320000000#:yearr=0DoWhilem=2000000000#m=m+m*0.005yearr=yearr+1LoopPrintyearr;年后我国的人口为:;mEndSub若将While改为Until,条件表达式怎么修改?DoUntilm200000000000#例:迭代法求a的立方根。X=a1/3迭代公式:Xn+1=1/3(2Xn+a/Xn2)当‖Xn+1-Xn‖e(一个很小的数)则Xn+1为a1/3的近似值。迭代思想:是一个反复用新值取代旧值的过程。Privatesubcommand1_click()Consteps=1e-5A=val(inputbox(“entera:”))V=a以u代表Xn,v代表Xn+1,Dou=vV=(2*u+a/u^2)/3Loopwhileabs(v-u)epsPrintvEndsub若将While改为Until,条件表达式怎么修改?DoUntilabs(v-u)=eps例4.12演示:求两自然数m,n的最大公约数和最小公倍数。方法一:用辗转相除法求最大公约数分析:(1)对于已知两数m,n,使得mn;(2)m除以n得余数r;(3)若r=0,则n为最大公约数结束;否则执行(4);(4)mn,nr,再重复执行(2)★常用算法:求最大公约数和最小公倍数求m=14,n=6的最大公约数和最小公倍数。z=m*nIfmnThent=m:m=n:n=tr=mmodnDoWhile(r0)m=nn=rr=mmodnLoopPrint最大公约数=,nPrint“最小公倍数=,z/nmnr1462620若r=0,则n为最大公约数结束方法二:辗转相减法求最大公约数z=m*nDoWhilemnIfmnThenm=m-nElsen=n-mEndIfLoopPrintmPrintz/mm=m-nmnmnm-n1468862264242220n=n-mnmm、n为公约数m=n若m=n,则m为最大公约数结束若不相等,谁大替换谁。例4.14:求自然对数e的近似值,要求其误差小于0.00001,近似公式为:e=1+1/1!+1/2!+1/3!+…+1/n!+…该例题涉及两个问题:(1)用循环结构求级数和的问题。本例根据某项值的精度来控制循环的结束与否。(2)累加:e=e+t(循环体外对累加和的变量清零e=0)(3)连乘:n=n*i(循环体外对连乘积变量置1n=1)(三)循环的嵌套一个循环体内又包含了一个完整的循环结构称为循环的嵌套,也叫多重循环。例4.13演示:打印九九乘法表。Fori=1To9Forj=1To9se=i&×&j&=&i*jPicture1.PrintTab((j-1)*9+1);se;NextjPicture1.PrintNexti打印上三角或下三角程序如何改动思考:下列30-90为语句标号,分别标记该语句,第40句执行了几次循环?第50句执行了几次循环?第90句输出结果是多少?30Forj=1to12step340Fork=6to2step–250mk=k60Printj,k70Nextk80nextj90printj,k,mk31213,0,2Forii=1To10Forjj=1To20…NextiiNextjjForii=1To10Forii=1To20…NextiiNextiiForii=1To10Forjj=1To20…NextjjNextiiForii=1To10…NextiiForii=1To10…Nextii【注意】(1)内循环变量与外循环变量不能同名;(2)外循环必须完全包含内循环,不能交叉;(3)不能从循环体外转向循环体内,反之则可以。正确错误语句形式特点循环条件循环终止条件循环次数Dowhile..loop先判断TrueFalse=0Dountil..loop先判断FalseTrue=0Do..loopwhile后判断TrueFalse=1Do..loopuntil后判断Falsetrue=1For..next先判断控制变量〈=终值(递增)控制变量〈=终值(递减)控制变量〉=终值(递增)控制变量〉=终值(递减)(终值-初值)/步长+1循环总结四常见错误1.不循环或死循环的问题主要是循环条件、循环初值、循环终值、循环步长的设置有问题。例如:ForI=10to20step–1ForI=20to10DowhilefalseForI=10to20step0Dowhile12.循环结构中缺少配对的结束语句For少配对的Next,do语句没有loop结束3.循环嵌套时,内外循环交叉,与IF块结构交叉运行时显示“无效的Next控制变量引用”例如:例如ForI=1to4forI=1to4Forj=1to5if表达式then….….NextInextiNextjendif4.累加、连乘时,存放累加、连乘结果的变量赋初值问题(1)一重循环在一重循环中,存放累加、连乘结果的变量初值设置应在循环语句前。(2)多重循环这要视具体问题分别对待。5大数相乘产生“溢出”问题见实验P301-4.3其他辅助控制语句1.GoTo语句(建议不使用)形式:GoTo{标号|行号}作用:无条件转移到标号或行号指定的地方。★:常用算法:求素数素数:是一个大于2,且不能被1和本身以外的整数整除的整数。方法:判断某数m是否为素数,可从素数本身的定义求解。对于m从I=2,3….m-1判断m是否能被I整除,只要有一个能被整除,m就不是素数。但这种算法速度很慢。例4.15:求100以内素数的代码:Form=2To100Fori=2Tom-1If(mModi)=0ThenGoToNotNextMNextiPrintmNotNextM:Nextmm是否为素数求100以内的素数分析:实际上m如果是素数的话,是不可能被大于sqr(m)的整数所整除。所以循环条件改为:forI=2toint(sqr(m)).这样循环的次数会大大减少。2.Exit语句多种形式:ExitFor、ExitDo、ExitSub、ExitFunction等。作用:退出某种控制结构的执行。3.End语句多种形式:End、EndIf、EndSelect、EndWith、EndType、EndSub、EndFunction、作用:End结束一个程序的运行;其余表示某个结构的结束,与对应的结构语句配对出现。4.With语句形式如下:With对象语句块EndWith作用:对某个对象执行一系列的操作,而不用重复指出对象的名称。WithLabel1.Height=2000.Width=2000.FontSize=22.Caption=MyLabelEndWithLabel1.Height=2000Label1.Width=2000Label1.FontSize=22Label1.Caption=MyLabel等价★:常用算法:穷举法“穷举法”:也称为“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。例4.16:百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。【分析】设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为:x+y+y=1003x+2y+0.5z=100三个未知数,两个方程,此题有若干个解。解决此类问题采用“试凑法”,把每一种情况都考虑到。方法一:最简单三个未知数利用三重循环来实现方法二:从三个未知数的
本文标题:vb循环结构.
链接地址:https://www.777doc.com/doc-2865795 .html