您好,欢迎访问三七文档
第6章循环结结构在VisualBasic程序的三种结构中,循环结构是一种重要结构。循环的本质:不断地重复某种动作。对计算机程序而言,循环必须具备两个重要因素:1.在一定的条件下,重复执行一组语句2.必然出现不满足条件的情况,使循环终止VB中提供了两种类型的循环语句:一种是计数循环语句;另一种是条件循环语句。VisualBasic支持的循环结构有:☆Do…Loop☆For...Next☆While…Wend重点掌握:Do…Loop、For.Next、While…Wend等前三种循环6.1Do…Loop循环结构6.1.1当型循环结构Do…Loop循环用于事先不知道循环次数的循环结构。此种语句四种语法格式:⑴.DoWhile…Loop语句⑵.Do…LoopWhile语句⑶.DoUntil…Loop语句⑷.Do…LoopUntil语句⑴.DoWhile…Loop语句语法格式:DoWhile〈条件表达式〉循环体〉[ExitDo]〈循环体〉Loop说明:①条件表达式可以是一个逻辑表达式,也可以是一个关系表达式,其值应是逻辑型。②DoWhile和Loop应成对出现。③循环体中要有控制循环的语句,以避免出现死循环。④由于该循环的特点是先判断条件,然后再决定是否要执行循环体里的语句。所以,这种循环可以一次也不执行循环体。⑤ExitDo表示当遇到该语句时,强制退出循环,执行Loop后的下一条语句例6-1求1+2+3+……+100PrivateSubForm_Click()Dimsum,nAsIntegersum=0:n=1DoWhilen=100sum=sum+nn=n+1LoopText1.Text=Str(sum)EndSub例6-2计算若干各个学生每门课的平均平均分。PrivateSubForm_Click()Dimscore,sum,NAsIntegerDimaverageAsSingleN=0sum=0score=InputBox(请输入第&N+1&个同学的成绩,成绩输入)DoWhilescore-1sum=sum+scoreN=N+1score=InputBox(请输入第&N+1&个同学的成绩,成绩输入)Loopaverage=sum/NPrint平均分=;averageEndSub例6-2a使用exitdo的程序。求出n。n的最小的100021222PrivateSubForm_Click()DimnAsIntegerDimsAsIntegern=1s=0DoWhiles1000s=s+n*nn=n+1LoopPrints=;s,n=;nEndSub6.1.2直到型循环语句Do…LoopWhile语句语法格式1:Do〈循环体〉[ExitDo]〈循环体〉LoopWhile〈条件表达式〉语法格式2:Do〈循环体〉[ExitDo]〈循环体〉Loopuntil〈条件表达式〉①至少要执行循环体一次。②与DoWhile循环的区别:DoWhile循环先测试条件是否成立,只有成立才执行循环;而该循环先执行循环体,后测试条件是否成立。例6-3用直到型循环实现1+3+5+7+……+999,当和大于5000时退出。PrivateSubCommand1_Click()Dims,nAsIntegers=0:n=1Dos=s+nIfs5000ThenExitDon=n+2LoopWhilen=999Prints=;sEndSubPrivateSubCommand2_Click()Dims,nAsIntegers=0:n=1Dos=s+nIfs5000ThenExitDon=n+2LoopUntiln999Prints=;sEndSub例6-4人口增长问题。PrivateSubCommand1_Click()DimpAsDoubleDimrAsSingleDimnAsIntegerp=1280000000r=Val(Text1.Text)/100n=0Dop=p*(1+r)n=n+1LoopUntilp=1500000000Text2.Text=nEndSub6.1.3while循环结构语法格式:While(条件表达式)[循环体]Wend说明:此种格式不能使用exit跳出循环。例6-5将例6-1用while…wend实现PrivateSubCommand1_Click()Dimsum,nAsIntegersum=0:n=1Whilen=100sum=sum+nn=n+1WendText1.Text=Str(sum)EndSub6.2For…Next循环结构语法格式:For循环变量=初值To终值[Step步长]循环体[ExitFor]循环体Next[循环变量]例题:编程计算:S=1+2+3+…+100DimS%,I%S=0'累加前变量S为0ForI=1to100S=S+INextIPrintS=,S说明:①格式中的参数说明:循环变量必须为数值型。循环的初值、终值和步长都是数值表达式,其值不一定是整数,可以是实数,VB自动取整。其中,增量参数可正可负。如果增量为正,则初值必须小于等于终值,否则不能执行循环体内的语句;如果增量为负,则初值必须大于等于终值。如果没有设置step,则增量默认为1。在For语句和Next语句之间的语句序列称为循环体,可以是一个或多个语句。ExitFor为强行退出循环语句。当遇到该语句时,退出循环,执行Next的下一个语句。Next是循环终端语句,在Next后面的循环变量与For中的循环变量必须相同。当循环是单层循环时,Next后面的循环变量可以不写。②For循环语句的执行过程是:首先把初值赋给循环变量,接着检查循环变量的值是否超过终值,如果超过就不执行循环体,跳出循环,执行Next后面的语句;否则执行一次循环体,然后把循环变量增加步长,再赋给循环变量,重复上述过程。③当初值等于终值时,不管步长是正数还是负数,都执行一次循环体。④循环次数由初值、终值和步长决定,计算公式为:循环次数=INT((终值–初值)/步长+1)⑤For语句和Next语句必须成对出现,不能单独使用。⑥如果要在循环变量到达终值前退出循环,可用ExitFor语句来实现。该语句可以在For循环中出现多次,且位置不限。⑦在循环体中可以使用循环变量,但一般不再对循环变量赋值。例6-6计算1——1000奇数之和。PrivateSubCommand1_Click()Dimi,sumAsIntegersum=0Fori=0To1000IfiMod20Thensum=sum+iIfsum15000ThenExitForNextiText1.Text=sumText2.Text=iEndSub例6-7求水仙花数。PrivateSubCommand1_Click()DimpAsIntegerList1.ClearForn=100To999a=Int(n/100)b=Int((n-a*100)/10)c=n-a*100-b*10p=a*a*a+b*b*b+c*c*cIfp=nThenList1.AddItempNextnEndSubPrivateSubCommand1_Click()DimpAsIntegerList1.Clearn=101DoWhilen=999a=Int(n/100)b=Int((n-a*100)/10)c=n-a*100-b*10p=a*a*a+b*b*b+c*c*cIfn=pThenList1.AddItempn=n+1LoopPrivateSubCommand1_Click()DimpAsIntegerList1.Clearn=101Doa=Int(n/100)b=Int((n-a*100)/10)c=n-a*100-b*10p=a*a*a+b*b*b+c*c*cIfn=pThenList1.AddItempn=n+1LoopWhilen=999EndSubPrivateSubCommand1_Click()DimpAsIntegerList1.Clearn=101Doa=Int(n/100)b=Int((n-a*100)/10)c=n-a*100-b*10p=a*a*a+b*b*b+c*c*cIfn=pThenList1.AddItempn=n+1LoopUntiln999EndSub学生思考用while—wend语句编写此程序。6.3循环的嵌套——多重循环结构1、如果在一个循环内完整地包含另一个循环结构,则称为多重循环,或循环嵌套。2、嵌套的层数可以根据需要而定,嵌套一层称为二重循环,嵌套二层称为三重循环。上面介绍的几种循环控制结构可以相互嵌套,下面是几种常见的二重嵌套形式:1)ForI=….…..ForJ=….….NextJ…..NextI(2)ForI=….…..DoWhile/Until….….Loop…..NextI(3)DoWhile….…..ForJ=….….NextJ…..Loop(4)DoWhile/Until….…..DoWhile/Until….….Loop…..Loop例6-8打印九九乘法表.PrivateSubForm_Click()Fori=1To9Forj=1Toise=i&×&j&=&i*jPicture1.PrintTab((j-1)*9+1);se;NextjPicture1.PrintNextiEndSub例6-9打印如下图形。PrivateSubForm_Click()Dimi,jAsIntegerFori=-3To3PrintTab(Abs(i)+5);Forj=1To2*(4-Abs(i))-1Print*;NextjPrintNextiEndSub6.4GOTO语句语法格式为:goto标号|行号所谓标号,是给某些行加的一个标识;行号,是一个整数。此语句的另一种格式为:On数值表达式goto标号表列|行号表列其功能是根据数值表达式的取值决定转移的目标。例6-9a计算利息。PrivateSubForm_Click()DimpAsCurrencyp=10000:r=0.025t=1again:Ift=10ThenGoTo100i=p*rp=p+it=t+1GoToagain100Printp=;p,t=;tEndSub6.5循环应用程序举例例6-10求1到100之间5或7的倍数的和。PrivateSubForm_Click()Sum=0Fori=1To100IfiMod5=0OriMod7=0ThenSum=Sum+iNextiPrintSum=;SumEndSub例6-11求素数。PrivateSubForm_Click()Dimn,i,k,j,flagAsIntegerj=0Forn=3To200Step2k=Int(Sqr(n))flag=1Fori=2TokIfnModi=0Thenflag=0NextiIfflag=1ThenPrintn;:j=j+1IfjMod10=0ThenPrintNextnEndSub例6-12穷举法举例(求由1角、2角、5角组成1元组合数及组合情况)。PrivateSubForm_Click()DimnAsIntegerForx=0To10Fory=0To10Forz=0To10Ifx+2*y+5*z=10ThenPrintx;y;zn=n+1EndIfNextzNextyNextxPrintn=;nEndSub例6-13迭代法举例。利用公式)(211nnnxaxx求2100PrivateSubForm_Click()x0=InputBox(请输入迭代出发值:,迭代初始值,-1000)X1=0.5*(x0+100/x0)DoWhileAbs(X1-x0)=0.00001x0=X1X1=0.5*(x0+100/x0)LoopPrintX1EndSub例6-14猴子吃桃问题。PrivateSubForm_Click()x=1Fori=9To1Step-1x=2*x+2NextiPrintxEndSub例6-15求F
本文标题:第6章循环结结构
链接地址:https://www.777doc.com/doc-2197425 .html