第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计第4章循环结构程序设计循环结构用For-Next语句实现循环结构用DoWhile-Loop语句实现循环结构嵌套的循环结构第七次课第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计For循环变量=初值To终值Step步长循环体语句Next[循环变量]For—Next循环的一般语法格式步长为1时可省略步长可取正或负数;步长为负时终值应小于初值成对出现循环变量值介于初值和终值之间时反复执行第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计For-Next常用于循环次数已知的循环中循环体语句可以是一条或多条语句可以使用ExitFor语句提前结束循环Fori=1To10x=x+Int(Rnd*100)sum=sum+xIfsum300ThenExitForEndIfNextiPrintsum程序说明第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计【例】找最大值。单击最大值按钮时产生10个1~100之间的随机整数显示在框架内的标签中,同时将最大值显示在下方的标签内。lbldatalblmax第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计处理第1个数据•产生一个随机数,存放在变量a中•将a显示在标签(lblData)中•将a作为当前最大值放在变量max中处理第2个数据•产生新的随机数,存放在变量a中•将a连接显示在标签(lblData)原有内容之后•如果a大于max,则将a作为最大值放在max中编程分析a=Int(Rnd*100)+1lblData.Caption=amax=aa=Int(Rnd*100)+1lblData.Caption=lblData.Caption&,&aIfamaxThenmax=aEndIf9次第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计PrivateSubcmdMax_Click()DimaAsInteger,iAsInteger,maxAsIntegerRandomizea=Int(Rnd*100)+1lblData.Caption=amax=aFori=1To9重复执行9次a=Int(Rnd*100)+1lblData.Caption=lblData.Caption&,&aIfamaxThenmax=aEndIfNextilblMax.Caption=maxEndSub求1000个数中的最大?程序代码第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计常用于执行条件明确,但事前不知道循环次数的循环语法格式DoWhile循环条件循环体语句Loop执行流程DoWhile-Loop语句条件判断循环体语句YesNo第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计通常情况下,在进入DoWhile-Loop语句前应给循环变量设置初值循环体中必须包含使循环趋于结束的语句可以使用ExitDo语句随时跳出当前所在的循环,提前结束循环语句ExitDo可出现在循环体语句中的任意位置,通常与If语句联合使用DoWhile-Loop语句第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计语法格式Do循环体语句LoopWhile循环条件执行流程Do-LoopWhile语句条件判断循环体语句YesNo第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计【实例】输入若干成绩(输入-1时结束)计算总成绩和平均成绩。连续弹出输入框接收成绩,直至-1时结束计算总成绩和平均成绩多行文本框LblaverageLblsumtxtscore第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计输入第1个数据•输入第一个数据,存放在变量score中判断输入的数据是否是-1,如果不是-1•记录已经输入的学生人数•将数据显示在txtscore原有内容之后中•计算总成绩•接收下一个数据编程分析—成绩输入score=Val()InputBox(“请输入...”,“成绩输入,-1)n=n+1txtScore.Text=txtScore.Text&score&Chr(13)&Chr(10)直到输入-1sum=sum+scorescore=Val(InputBox(“请输入...”,“成绩输入,-1))换行符第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计DimsumAsInteger'总成绩DimnAsInteger'成绩个数PrivateSubcmdInput_Click()DimscoreAsIntegertxtScore.Text=lblSum.Caption=lblAverage.Caption=“sum=0:n=0score=Val(InputBox(“请输入...”,“成绩输入,-1))DoWhilescore-1n=n+1txtScore.Text=txtScore.Text&score&Chr(13)&Chr(10)sum=sum+scorescore=Val(InputBox(请输入...,成绩输入,-1))LoopEndSub程序代码第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计PrivateSubcmdCala_Click()DimaveAsSinglelblSum.Caption=sumave=sum/nlblAverage.Caption=aveEndSub程序代码第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计【程序改进】修改上例,当输入非法成绩时,再次弹出输入框等待重新输入,直至输入1~100之间的整数为止。要求在文本框中只显示出有效的输入成绩。第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计循环的嵌套在一个循环体内又出现另外的循环语句称为循环嵌套,也称为多重循环。在嵌套结构中,对嵌套的层数没有限制,有几层嵌套,就说是几重循环。多重循环的执行过程是,外循环每执行一次,内循环都要从头到尾执行一遍。嵌套时,内层循环必须完全包含在外层循环之内,不能相互“交叉”。ForI=1To10…ForJ=1To20…NextJNextI…Do…ForJ=1To20…NextJ…LoopWhileI=10ForI=1To10…DoWhileJ=20…Loop…NextIDo…DoWhileJ=20…Loop…LoopUntilI10ForI=1To10…ForJ=1To20…NextINextJ…Do…ForJ=1To20…LoopWhileI=10…NextJForI=1To10…DoWhileJ=20…NextI…Loop正确的嵌套错误的嵌套第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计For循环的嵌套,其形式通常有以下两种:1)一般形式ForI1=……ForI2=……ForI3…………NextI3NextI2NextI12)省略Next后面的循环变量ForI1=……ForI2=……ForI3=…………NextNextNext•每层For循环的Next语句都不可省略。•但当多重循环的Next语句连续出现时,Next语句可以合并成一条,内层循环变量写在前面,外层循环变量写在后面。ForI1=……ForI2=……ForI3=…………NextI3,I2,I1第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计在循环的嵌套中,内层循环和外层循环应该使用不同的循环控制变量。在多重循环的任何一层循环中都可以使用ExitDo或ExitFor退出循环,但要注意只能退出ExitDo或ExitFor语句所对应的最内层循环,而不是一次退出多层循环。For循环的嵌套第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计例如,下面的循环退出位置如箭头所示:f=1Fori=1To10Forj=1To10f=f*i*jIff1000ThenExitForNextjPrinti;j;fNextI使用多重循环处理程序时,需要考虑清楚内外层循环分别用来控制哪一个量的变化,其变化规律如何。第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计多重循环应用举例1.字符图形的输出3.其他综合应用2.方程求解问题第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计字符图形的输出(a)(b)(c)(d)在解决这类问题时,应首先考虑一个一般行的输出,只需要把这个一般行的输出语句利用循环结构控制执行多次即可。例如:在输出图形(a)时,每一行都输出了同样的6个字符,在输出每一行之后换行,然后输出下一行,所以,只需要将输出一行字符的语句连续执行5次就可以了。第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计输出图形(a)的程序如下:Forj=1To5Fori=1To6'内循环控制输出一行的多个星号Print*;NextiPrint'输出每一行后换行Nextj两个循环控制变量i和j,分别用来控制图形中列与行的变化,称之为列变量和行变量。在实现输出字符图形时,要找清楚要输出的图形与行列变量之间的关系。第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计图形(b)与图形(a)的差别•在输出每一行星号时首先输出了若干个空格•每一行之前输出的空格的个数与其行号相同,即始终与行变量j相同。(b)(a)字符图形的输出输出图形(b)的程序如下:Forj=1To5PrintTab(j);'先输出j个空格Fori=1To6Print*;NextiPrintNextj第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计图形c)与图形a)的差别•在于每一行输出的星号个数不同•图形a)中每行都输出了固定个数的字符,而图形c)中每行输出的字符个数与其行数相同•只需要修改一下内循环控制变量的终值就可以了。返回(a)(c)输出图形(c)的代码如下:Forj=1To5Fori=1To6Print*;NextiPrintNextjj第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计输出矩阵图形例:请输入n值,编写程序输出下列图形(例如n=5).1234511234111231111211111第1行:1个1,2-5第2行:2个1,2-4第3行:3个1,2-3……第5行:5个1第1行:1个1,2~n第2行:2个1,2~n-1第3行:3个1,2~n-2……第n行:n个1第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计代码PrivateSubForm_Activate()DimiAsInteger,jAsIntegerFori=1To5Forj=1ToiPrint1;NextjForj=2To6-iPrintj;NextjPrintNextiEndSub第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第十一章第四章VB程序设计实例4.4第1行:1个1,2-5第2行:2个1,2-4第3行:3个1,2-3……第5行:5个1第1行:1个1,2~n第2行:2个1,2~n-1第3行:3个1,2~n-2……第n行:n个1第i行:i个1,2~n-(i-1)第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章第