Visual-Basic-清华大学vb编程语言基础-第5讲

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

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

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

资源描述

第五讲基本控制结构-2内容提要循环结构当循环Do循环For循环程序的调试循环结构循环结构是在满足一定的条件下,反复执行一段程序语句的结构。•如输入全班学生的成绩、计算平均分需要反复处理相同的问题VisualBasic有三种循环结构•当循环•Do循环•For循环当循环当循环结构适用于事先不知道循环的次数,需要通过条件来判断是否继续循环时。While条件[语句块]Wend条件语句块真假当循环的执行过程为:当条件为真时,执行下面的语句块,执行到Wend语句时,控制返回到While语句,再判断条件,如为真,则重复上述过程。如果条件为假,则直接跳到Wend后面的语句继续执行。因为While语句本身不能修改循环条件,所以必须在循环体内包含改变循环条件的语句,否则会出现死循环。当循环--例求自然数1~100的和PrivateSubCommand1_Click()Dimsum%,i%i=1sum=0Whilei=100sum=sum+ii=i+1WendPrintsumEndSub分析:求和需要累加运算,累加过程需要用循环处理,可用While语句。5050运行结果:Do循环Do循环也是用于循环次数未知的循环结构。Do循环的格式有两种:Do[语句块][ExitDo]Loop[While|Until条件]Do[While|Until条件][语句块][ExitDo]LoopDo、Loop、While、Until都是关键字,Do和Loop构成Do循环。格式1为先执行后判断,语句块至少执行一次,格式2为先判断后执行,语句块有可能一次都不执行。关键字While指明当条件为真时,执行循环体中的语句块;关键字Until指明在条件变为真之前,执行循环体中的语句块。格式1:格式2:Do……Loop语句Do[语句块][ExitDo]LoopDo循环仅由Do……Loop组成时,表示无条件循环。由于此结构本身没有设置退出循环的条件,这时在循环体中必须有ExitDo语句或Goto语句跳出循环体,否则为死循环。Dimi%,sum%i=1sum=0Dosum=sum+ii=i+1Ifi100ThenExitDoLoopPrintsum用Do……Loop语句实现求自然数1~100的和Do……LoopWhile语句Do[语句块][ExitDo]LoopWhile条件Do……LoopWhile语句的执行过程是先执行循环体的语句块,然后检查条件,当条件为真时,继续执行循环体的语句块,当条件为假时,退出循环,执行LoopWhile子句后面的语句。语句块条件真假Dimi%,sum%i=1sum=0Dosum=sum+ii=i+1LoopWhilei=100Printsum用Do……LoopWhile语句实现求自然数1~100的和Do……LoopUntil语句Do[语句块][ExitDo]LoopUntil条件Do……LoopUntil语句的执行过程是先执行循环体的语句块,然后检查条件,当条件为假时,继续执行循环体的语句块,当条件为真时,退出循环,执行LoopWhile子句后面的语句。语句块条件真假Dimi%,sum%i=1sum=0Dosum=sum+ii=i+1LoopUntili100Printsum用Do……LoopUntil语句实现求自然数1~100的和DoWhile……Loop语句DoWhile条件[语句块][ExitDo]LoopDoWhile……Loop语句的执行过程是先检查条件,当条件为真时,执行循环体的语句块,当条件为假时,退出循环,执行Loop子句后面的语句。条件语句块真假Dimi%,sum%i=1sum=0DoWhilei=100sum=sum+ii=i+1LoopPrintsum用DoWhile……Loop语句实现求自然数1~100的和DoUntil……Loop语句DoUntil条件[语句块][ExitDo]LoopDoUntil……Loop语句的执行过程是先检查条件,当条件为假时,执行循环体的语句块,当条件为真时,退出循环,执行Loop子句后面的语句。条件语句块假真Dimi%,sum%i=1sum=0DoUntili100sum=sum+ii=i+1LoopPrintsum用DoUntil……Loop语句实现求自然数1~100的和For循环在循环次数已知的情况下,使用For循环。For循环变量=初值To终值[Step步长][循环体][ExitFor]Next[循环变量]循环变量是一个数值型变量,用来控制循环的执行次数。初值和终值代表循环变量的初值和终值,可以是常数或数值表达式步长是循环变量的增量,可以是常数或数值表达式。步长可为正(初值小于终值),也可为负(初值大于终值),但不能为0。当步长为1时,可省略不写。Dimi%,sum%sum=0Fori=1To100sum=sum+iNextiPrintsumFor循环的流程图循环变量=初值循环变量超过终值执行循环体循环变量=循环变量+步长假真Next后面的循环变量必须和For后面的循环变量相同,也可省略不写。可在循环体的任何位置放置ExitFor语句,随时退出循环。循环的次数由初值、终值和步长决定,计算公式为:循环次数=Int()For循环可以嵌套使用,嵌套层数没有限制,每层循环必须有唯一的变量名作为循环变量,内外层循环不能交叉。1步长初值终值For循环—例1计算n!,n由用户输入PrivateSubCommand1_Click()Dimi%,n%DimfactAsDoublefact=1n=Val(Text1.Text)Fori=1Tonfact=fact*iNextiText2.Text=factEndSubFor循环—例2PrivateSubForm_Click()Dimi%,j%j=0PrintTab(20);ASCII码表Fori=32To126Printi&:&Chr(i),j=j+1IfjMod4=0ThenPrintNextiEndSub输出可打印字符的ASCII码,每行显示4个。分析:ASCII码中从32~126是可打印字符,其余是不可打印字符,使用For循环输出循环的嵌套在一个循环体内部包含另一个循环体称为循环的嵌套•内嵌的循环还可以嵌套循环,构成多重循环当循环、Do循环和For循环都可以互相嵌套•内层循环和外层循环不能交叉•内外层的循环变量不能重名循环的嵌套-例1对不大于50的三个整型变量a、b、c,找出所有的“勾股三边”。分析:利用三重For循环可找出所有可能的三边PrivateSubCommand1_Click()Dima%,b%,c%Print勾,股,弦Print------------------------------Fora=3To50Forb=aTo50Forc=aTo50Ifa*a+b*b=c*cThenPrinta,b,cNextcNextbNextaEndSub循环的嵌套-例2PrivateSubCommand1_Click()Dimi%,j%,n%,m%n=Val(Text1.Text)m=n\2+1Fori=1Tom'打印上三角Forj=(m+1)-iTo(m-1)+iPrintTab(15+j);*;'菱形左侧空15列NextjPrintNextiFori=1Tom-1'打印下三角Forj=iTo2*(m-1)-iPrintTab(15+j+1);*;NextjPrintNextiEndSub在窗体上输出下面的菱形,行数由用户输入(行数为奇数)循环出口语句一般情况下是不能在循环的过程中退出循环的,必须从头到尾执行完循环体的语句。而在实际问题中,有时希望在一定条件下退出循环,VisualBasic以循环出口语句ExitDo和ExitFor的形式提供了提前退出循环的途径。无条件循环出口语句ExitForExitDo条件形式循环出口语句If条件ExitForIf条件ExitDo循环出口语句-例1在窗体上打印出100以内的素数PrivateSubCommand1_Click()Dimi%,m%,k%,count%count=0Form=2To100'外循环,对100以内的每个数判断其是否是素数k=Sqr(m)Fori=2Tok'内循环,判断数m是否是素数If(mModi)=0ThenExitFor'm不是素数,提前退出循环NextiIfi=k+1ThenPrintm;count=count+1If(countMod8)=0ThenPrintEndIfNextmEndSub判断一个数m是否是素数的方法是让m被2~中的整数整除,如果m能被其中任何一个整数整除,则提前退出循环,此数不是素数,否则是素数。m循环出口语句-例2用迭代法求x=。求平方根的迭代公式为:=(+)要求前后两次求出的x误差的绝对值小于10-6。a1nx21nxnxaPrivateSubCommand1_Click()Dima!,x!,y!a=Val(Text1.Text)x=a/2y=(x+a/x)/2Dox=yy=(x+a/x)/2IfAbs(x-y)=0.000001ThenExitDoLoopText2.Text=yEndSub循环-例1用=+++……+近似公式求的值,当10-6为止,输出的值和循环次数。6221122123121n分析:先求i2,然后把累加,由于循环次数事先未知,可使用Do循环,根据第i项达到精度来决定退出循环PrivateSubCommand1_Click()Dimm#,s#,t#,pi#Dimi%s=0'存放累加结果i=1'循环控制变量t=1'第i项DoWhilet0.000001s=s+t'求和i=i+1m=i^2'求平方t=1/m'第i项值Looppi=Sqr(6*s)Printpi=;piPrint循环次数为;iEndSub21i21i21n循环-例21111........4357用公式计算的值PrivateSubForm_Click()Dims#,f#,n&,sign%s=1n=1sign=1DoWhilen10000sign=-signf=1/(2*n+1)s=s+sign*fn=n+1LoopPrints*4EndSub循环-例3编程序找出1000之内的所有完数,并打印出它的所有因子。分析:一个数恰好等于它的因子之和,这个数称为“完数”。用二重循环找出1000以内的完数,并打印其因子。PrivateSubCommand1_Click()Dimx%,y%,z%,i%,sum%Forx=2To1000Sum=0Fory=1Tox-1IfxMody=0ThenSum=Sum+yEndIfNextyIfx=SumThenPrintSum;其因子为;Fori=1ToSum-1IfxModi=0ThenPrinti;NextiPrintEndIfNextxEndSub循环-例4猴子吃桃问题。猴子摘了若干个桃子,第一天吃了一半多一个,第二天吃了剩下的一半还多一个,以后每天都吃剩下的一半多一个,到第7天要吃时只剩下一个了,问小猴一共摘了多少桃子分析:该问题用递推法,由第7天的桃子数推出第6天的桃子数,再由第6天的桃子数推出第5天的桃子数,……,直到推出第1天的桃子数。假设第i天的桃子数是xi,那么猴子在第i天吃了xi-1/2+1只桃子,第i天的桃子数xi=xi-1-(xi-1/2+1)=xi-1/2-1,于是得到公式xi-1=2(xi+1),i=7时,x7=1,得到x6=4,…..。PrivateSubForm_Click()Dimi%,x%x=1Fori=6To1Step-1x=2*(x+1)Print第;i;天桃子数为:;x;只NextiPrint猴子一共摘了;x;只桃子。EndSub循环-例5验证“角谷猜想”一个自然数,若为偶数则除以2,若为奇数,则乘3加1,重复此过程,最终可得1。PrivateSubForm_Click()Dimn%,i%i=1

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

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

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

×
保存成功