资源描述
循环结构,DoLoop之“当”循环,形式1:形式2:DoWhileDo语句块(循环体)语句块(循环体)LoopLoopWhile,当条件为真(true)时循环!,DoLoop循环示例1,PrivatesubForm_click()Dimnum%num=1Dowhilenum=10PrintnumNum=num+1LoopEndsub,PrivatesubForm_click()Dimnum%num=1DoPrintnumNum=num+1Loopwhilenum=10Endsub,S=1+2+3+100,PrivateSubForm_Click()DimiAsIntegeri为累加数DimsumAsIntegersum为累加和i=1sum=0DoWhileinText2.Text=sumEndSub,5.2For循环语句,For循环语句是计数型循环语句,用于控制循环次数已知的循环结构。语句形式如下:For循环变量=初值To终值Step步长循环体Next循环变量,For循环变量=初值To终值Step步长循环体Next循环变量,(1)“循环变量”:必须为数值型,取值范围在初值和终值之间。(2)“初值”、“终值”:都是数值型,可以是数值表达式。(3)“步长”:是数值型,可以是数值表达式。步长不能为0。如果步长是1,则Step1可以省略不写。(4)“循环体”:在For和Next之间一条或多条语句,他们将被执行指定的次数。(5)Next后面的循环变量与For语句中的循环变量必须相同。,使用For循环计算1+3+5+99的值,PrivateSubCommand1_Click()DimiAsInteger,nAsIntegerDimsumAsIntegersum=0Fori=1to99step2sum=sum+iNextiPrintsumEndSub,For循环变量=初值To终值Step步长循环体Next循环变量,使用For循环计算1+3+5+99的值,PrivateSubCommand1_Click()DimiAsInteger,nAsIntegerDimsumAsIntegersum=0Fori=99to1step-2sum=sum+iNextiPrintsumEndSub,For循环变量=初值To终值Step步长循环体Next循环变量,For和DoLoop的比较,采用For语句比DoLoop更加简明。一般情况下,能够预先确定循环次数时,应优先采用For语句,否则的话应该使用DoLoop语句,【例5.13】利用随机数函数模拟抛硬币,采用的方法是:每次随机产生一个0或1的整数,相当于一次投币,1代表正面,0代表反面。,在窗体上有三个文本框,名称分别是Text1、Text2、Text3,分别用于显示用户输入抛硬币次数、出现正面的次数和出现反面的次数,如图所示。,PrivateSubCommand1_Click()DimnAsLongDimn1AsLong,n2AsLongRandomizen=Val(Text1.Text)n1=0n2=0Fori=1Tonr=Int(Rnd*2)Ifr=1Thenn1=n1+1Elsen2=n2+1EndIfNextText2.Text=n1Text3.Text=n2EndSub,循环的嵌套多重循环结构如果在一个循环内完整地包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定,嵌套一层称为二重循环,嵌套二层称为三重循环。下面是几种常见的二重嵌套形式:,(1)ForI=.ForJ=.NextJ.NextI,(2)ForI=.DoWhile/Until.Loop.NextI,(3)DoWhile.ForJ=.NextJ.Loop,(4)DoWhile/Until.DoWhile/Until.Loop.Loop,循环嵌套,PrivateSubForm_Click()DimiAsInteger,jAsIntegerFori=1To3Printi=”;iForj=1To3PrintTab;j=;jNextjNextIEndSub,图5.6例5.4显示结果,循环嵌套,Fori=1To3Step1Printi=”;iForj=1To3Step1PrintTab;j=;jNextjNexti,i=1,i=3,i=i+1,Printi=”;iForj=1To3PrintTab;j=;jNextj,N,Y,循环嵌套,i=1,i=3,i=i+1,Print“i=“;i,j=j+1,j=1,j=3,PrintTab;j=;j,Y,N,Y,N,Fori=1To3Step1Printi=”;iForj=1To3Step1PrintTab;j=;jNextjNexti,循环嵌套,Fori=1To3Step1Printi=”;iForj=1To3Step1PrintTab;j=;jNextjNexti,i=1,i=3,i=i+1,Printi=”;iForj=1To3PrintTab;j=;jNextj,N,Y,循环嵌套,i=1,i=3,i=i+1,Print“i=“;i,j=j+1,j=1,j=3,PrintTab;j=;j,Y,N,Y,N,Fori=1To3Step1Printi=”;iForj=1To3Step1PrintTab;j=;jNextjNexti,循环嵌套,Fori=1To3Printi=”;iForj=1To3PrintTab;j=;jNextjNexti,i=1,i=3,i=i+1,j=j+1,j=1,j100ThenExitDoLoopPrintsumEndSub,ExitFor语句,ExitFor语句可以用来结束For.Next循环。一般也和选择结构语句一起配合使用。它必须放置在For.Next语句的循环体中。当执行到ExitFor时,程序会立即结束循环,跳到Next后执行下面的语句。当有多个循环嵌套使用时,ExitFor语句只跳出所在的最内层的For.Next循环。,【例5.7】给定一个数n,判断它是否是素数,分析:素数就是一个大于2且只能被1和本身整除的整数。判断一个数是否为素数比较简单的方法是:用n逐个除以2n-1之间的每个整数只要有一个可以整除,则说明n不是素数;如果全部不能整除,则说明n是素数。,PrivateSubForm_Click()DimiAsIntegerDimnAsIntegern=InputBox(请输入一个整数)Fori=2Ton-1IfnModi=0ThenExitForEndIfNextIIfinThenPrintn求出下一轮的term;,关键问题:找出前项Xi和Xi+1后项之间的关系,1!+2!+3!+n!,单循环实现累加项(term)赋初值,累加和(sum)赋初值while()sum=sum+term;求出下一轮的term;双循环实现,求自然对数e的近似值,要求其误差小于0.00001,PrivateSubForm_Click()Dimi%,neEndSub,Fibonacci数列1,1,2,3,5,8,13,21,34,55,兔子繁殖问题,求斐波那契数列前十五项,PrivateSubForm_Click()Dimf1%,f2%,f3%,i%f1=1f2=1printf1;f2Fori=3To15f3=f1+f2printf3f1=f2f2=f3NextEndSub,求最大公约数,【例5.12】用辗转相除法求两自然数x、y的最大公约数。算法描述如下:x除以y得余数r;若r=0,则y为求得的最大公约数,算法结束,否则执行步骤(3);令x等于y,y等于r,重复执行步骤(1)。,思考:请用DoWhileLoop和DoLoopUntil改写辗转相除法求最大公约数,PrivateSubForm_Click()x=InputBox(输入x)y=InputBox(输入y)Dor=xModyIfr=0ThenExitDox=yy=rLoopPrint最大公约数为:;yEndSub,作业2,求100以内的所有素数。求斐波那契数列第多少项大于500,并打印出该项的值。DoWhileLoop和DoLoopUntil改写辗转相除法求最大公约数(选做),作业1,鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?-算经张丘建求100以内的所有素数。打印讲到的各种星号组合。,
展开阅读全文