版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
会计学1vb控制结构循环结构程序设计
本章内容及要求:(1)掌握For…..Next语句及ExitFor语句的使用;(2)掌握Do….Loop循环语句与ExitDo语句的使用;(3)掌握循环结构的嵌套应用;(4)掌握循环结构和选择结构的嵌套应用。第1页/共49页6.1概述在VisualBasic程序设计中,实现循环结构的语句主要有下列几种:
l
For…Next语句
Do…Loop语句
l
While…Wend语句
DoWhile<条件>…Loop形式Do…LoopWhile<条件>形式DoUntil<条件>…Loop形式Do…LoopUntil<条件>形式Do…Loop形式第2页/共49页打印九九乘法表
Dim
Sgs
As
String
Dim
i,
j
As
Integer
For
i
=
1
To
9
’被乘数从1变到9
For
j
=
i
To
9
’乘数从1变到9
Sgs
=
i
&
"×"
&
j
&
"="
&
Str(i
*
j)
’打印公式如1×1=1
Picture1.Print
Tab((j
-
1)
*
9
+
1);Sgs;
Next
j
Picture1.Print
Next
I
第3页/共49页For循环语句(一般用于循环次数已知)形式:For循环变量=初值to终值[Step步长]
语句块
[ExitFor]
语句块Next[循环变量]循环体>=0循环变量<=终值<0循环变量>=终值=1可省略
步长6.2For...Next循环结构第4页/共49页循环次数例:ForI=2To13Step3PrintI,NextIPrint“I=“,I循环执行次数
4输出I的值分别为:25811出了循环输出为:I=146.2For...Next循环结构第5页/共49页6.2For...Next循环结构注意跳出FOR循环时的循环变量的值Fori=1to10step1s=s+iNextiPrintiFori=-1to-10step-1s=s+iNextiPrinti第6页/共49页6.2For...Next循环结构注意对于For…Next语句来说,一旦进入循环,其“终止值”和“增量”便不会再改变了。PrivateSubForm_Click()DimiAsInteger,jAsInteger,kAsIntegerj=10:k=1Fori=1TojStepkPrintij=j-1k=k+1NextPrintj,kEndSub第7页/共49页练习:分析下面程序段结束时窗体上显示的值是多少?
(2)i2=0Fori=1To-2Step-1 i2=i2+1NextPrinti,i2(-34)(1)Fori=1To10 i2=i2+1NextPrinti
(11)(3)i2=0Fori=1To5Step2 i2=i2+1NextPrinti(7)(4)i2=1Fori=1To10 i=i+1 i2=i2+1NextPrinti,i2(116)(5)i2=1i3=10i=10Fori=1Toi3 i=i+1 i2=i2+1 i3=i3+1NextPrinti,i2(116)(6)i2=0Fori=1To10i2=i2+1Ifi>6ThenExitForNextPrinti,i2(77)(7)i2=0i=10Doi2=i2+1LoopWhilei=i2Printi2(1)第8页/共49页例6.7编程计算:S=1+2+3+…+100DimS%,I%S=0'累加前变量S为0ForI=1to100S=S+INextIPrint"S=",S当I<=100I=I+1打印SS=0,I=1S=S+I例6.7的算法流程图6.2For...Next循环结构第9页/共49页前测型:
DoWhile<条件>
语句块
[ExitDo]
语句块
LoopDo…Loop循环语句使用形式6.3Do...Loop循环结构第10页/共49页6.2Do...Loop循环结构PrivateSubForm_Click()DimiAsInteger:DimaAsInteger'定义所需变量
i=0:a=0'给变量赋初值0,这两条语句可省略
DoWhilei<100i=i+1'每次循环,变量i都增加1a=a+i'每次循环,变量a都加变量i的值
LoopPrinta'计算完毕,变量a的值即为所求EndSub例:使用DoWhile…Loop循环语句计算1+2+3+…+100的值第11页/共49页后测型:
Do
语句块
[ExitDo]
语句块
LoopWhile<条件>6.3Do...Loop循环结构第12页/共49页6.3Do...Loop循环结构例:使用Do…LoopWhile循环语句计算1+2+3+…+n的值,n的值由文本框输入。PrivateSubCommand1_Click()DimiAsInteger,nAsInteger,aAsInteger'定义所需变量
n=Text1.Text'得到输入的值
Doi=i+1'每次循环,变量i都增加1a=a+i'每次循环,变量a都加变量i的值
LoopWhilei<nText2.Text=a'显示计算结果,变量a的值即为所求EndSub第13页/共49页前测型:
DoUntil<条件>
语句块
[ExitDo]
语句块
LoopDo…Loop循环语句使用形式6.3Do...Loop循环结构第14页/共49页6.3Do...Loop循环结构例:计算阶乘n!的值(n的值由文本框输入)。PrivateSubCommand1_Click()DimiAsInteger,nAsIntegerDimaAsLongn=Text1.Text'得到输入的值na=1'必须为变量a赋初值1DoUntili=ni=i+1'每次循环,变量i都增加1a=a*i'每次循环,变量a都乘以变量i的值
LoopText2.Text=a'计算完毕,变量a的值即为所求EndSub第15页/共49页后测型:
Do
语句块
[ExitDo]
语句块
LoopUntil<条件>6.3Do...Loop循环结构第16页/共49页例:使用级数求π的值。根据下式,计算圆周率π的近似值,当计算到绝对值小于0.0001的通项时,认为满足精度要求,停止计算。π/4=1-1/3+1/5-1/7+…+(-1)n+11/2n-1+…6.3Do...Loop循环结构第17页/共49页PrivateSubcmdPi_Click()DimaAsSingle'变量a保存通项之和
DimmAsSingle'变量m保存通项的绝对值
DimsAsInteger'变量s产生通项的符号
DimiAsInteger'变量i产生通项的分母
s=1'第一项符号为正
i=1'第一项为1Do'开始循环
m=1/i'计算通项的绝对值
a=a+s*m'总和加上一个通项
i=i+2'产生下一个通项分母
s=-s'轮流转换通项的正负号
LoopUntilm<0.0001'测试是否满足精度要求
Text1.Text=a*4'输出计算结果EndSub6.3Do...Loop循环结构第18页/共49页6.3Do...Loop循环结构Do
语句块
[ExitDo]
语句块LoopPrivateSubCommand1_Click()DimiAsInteger,nAsIntegerDimaAsLongn=val(Text1.Text)a=1Doi=i+1a=a*iIfi=nThenExitDoLoopText2.Text=aEndSub例6.5:计算n!第19页/共49页本节小结:(1)当使用While<条件>构成循环时,当条件为“真”,则反复执行循环体,当条件为“假”,则退出循环。(2)当使用Until<条件>构成循环时,当条件为“假”,则反复执行循环体,直到条件成立,即为“真”时,则退出循环。
(3)在循环体内一般应有一个专门用来改变条件表达式中变量的语句,以使随着循环的执行,条件趋于不成立(或成立),最后达到退出循环。(4)语句ExitDo的作用是退出它所在的循环结构,它只能用在DO/Loop结构中,并且常常是同选择结构一起出现在循环结构中,用来实现当满足某一条件时提前退出循环。6.3Do...Loop循环结构第20页/共49页
思考:将一个十进制数转换成二进制。
算法流程图6.3Do...Loop循环结构
用Do...Loop循环的五种形式分别完成第21页/共49页
将一个十进制数转换成二进制。
算法流程图6.3Do...Loop循环结构分析:将一个十进制数转换成二进制采用连除2取余数的方法,即将十进制数除以2取余数,直到商为0,然后所得的余数即为二进制数各位的数码,从右到左排列,第一次除2的余数在最右边。算法设计如下:用变量Dec表示十进制数,Bin表示转换所得的二进制数字符串。(1)
输入十进制Dec(2)
Dec除以2得余数Res,商又赋值给Dec;让Bin=Res&Bin(3)
若Dec=0,则算法结束;否则执行(2)第22页/共49页将一个十进制数转换成二进制的程序如下:
PrivateSubForm_Click()DimDecAsInteger'表示十进制数
DimBinAsString'转换为二进制表示
DimResAsIntegerDec=Val(InputBox("输入一个十进制数Dec=?"))Print"十进制数:";DecDoRes=DecMod2'求出除以2的余数
Bin=Res&BinDec=Dec\2LoopUntilDec=0Print"转换为二进制数为:";BinEndSub
6.3Do...Loop循环结构第23页/共49页6.4.1While…Wend语句使用格式如下:
While<条件><循环块>Wend
说明:该语句的功能与DoWhile<条件>….Loop实现的循环完全相同。6.4While…Wend语句第24页/共49页
6.5.1循环的嵌套——多重循环结构
如果在一个循环内完整地包含另一个循环结构,则称为多重循环,或循环嵌套,嵌套的层数可以根据需要而定,嵌套一层称为二重循环,嵌套二层称为三重循环。上面介绍的几种循环控制结构可以相互嵌套,下面是几种常见的二重嵌套形式:6.5嵌套结构第25页/共49页(1)ForI=….…..ForJ=….….NextJ…..NextI(2)ForI=….…..DoWhile/Until….….Loop…..NextI(3)DoWhile….…..ForJ=….….NextJ…..Loop(4)DoWhile/Until….…..DoWhile/Until….….Loop…..Loop6.5嵌套结构第26页/共49页Fori=1To10Forj=1To20… NextjNextiFori=1To10…NextiFori=1To10…Nexti对于循环的嵌套,要注意以下事项:
(1)内循环变量与外循环变量不能同名;
(2)外循环必须完全包含内循环,不能交叉;下面是正确的嵌套
6.5嵌套结构第27页/共49页
Fori=1To10Forj=1To20… Nexti NextjFori=1To10Fori=1To20… Nexti Nexti下面是不正确的嵌套
6.5嵌套结构第28页/共49页
PrivateSubForm_Click()DimiAsInteger,jAsIntegerFori=1To3Print"i=";iForj=1To3PrintTab;"j=";jNextNextEndSub循环嵌套的执行流程:6.5嵌套结构第29页/共49页6.5嵌套结构PrivateSubCommand1_Click()Dimx%,a%,y%Forx=1to2a=0Fory=1tox+1a=a+1NextyPrinta;NextxEndSub程序运行后,单击命令按钮,在窗体上显示的值是
(23)第30页/共49页6.5嵌套结构Exit
Do和ExitFor语句在循环嵌套时的作用第31页/共49页6.5嵌套结构第32页/共49页例:打印九九乘法表.
Fori=1To9Forj=1To9se=i&"×"&j&"="&i*jPicture1.PrintTab((j-1)*9+1);se;NextjPicture1.PrintNexti6.5嵌套结构第33页/共49页6.5嵌套结构例:
编一程序,显示出所有的水仙花数。所谓水仙花数,是指一个三位数,其各位数字立方和等于该数字本身。例如,153是水仙花数,因为:第34页/共49页6.5嵌套结构PrivateSubForm_Click()DimiAsInteger,jAsInteger,kAsIntegerDimnAsIntegerFori=1To9'i表示百位上的数
Forj=0To9'j表示十位上的数
Fork=0To9'k表示个位上的数
n=i*100+j*10+kIfi^3+j^3+k^3=nThenPrintnNextkNextjNextiEndSub解法一:第35页/共49页6.5嵌套结构解法二:PrivateSubForm_Click()DimiAsInteger,jAsInteger,kAsIntegerDimnAsIntegerForn=100To999i=n\100'得到百位上的数字
j=n\10-i*10'得到十位上的数字
k=nMod10'得到个位上的数字
Ifi^3+j^3+k^3=nThenPrintnNextnEndSub第36页/共49页6.5.2循环结构与选择结构的嵌套
在循环结构中可以完整嵌套选择结构,即整个选择结构都属于循环体。在选择结构中嵌套循环结构时,则要求整个循环结构必须完整地嵌套在一个分支内,一个循环结构不允许出现在两个或两个以上的分支内。6.5嵌套结构第37页/共49页(1)ForI=…………IF…Then……EndIF……NextI(6)IF…Then……ForI=…………EndIF……NextI(5)SelectCase……ForI=…………Case…………Case…………NextI………EndSelect(3)ForI=…………IF…Then……NextI……EndIF(2)IF…Then……ForI=…………NextI……EndIF(4)ForI=…………SelectCase…Case…………Case…………EndSelect……NextI×××6.5嵌套结构第38页/共49页6.6强制退出循环6.6.1用Exitfor语句强制退出For循环
ExitFor语句可以使程序从For循环中退出来,转到Next语句后面的程序继续执行,而不必等到循环变量到达终值时才退出来。注意:在循环体外面,不可以使用ExitFor语句,而且ExitFor通常与IF语句一起使用。例:用300元买100只鸡,母鸡9元1只,小鸡1元1只,问母鸡、小鸡各应买多少只?分析:设买母鸡x只,则x的变化范围为1~30只,因为买的母鸡只数不可能超过30只,超过30只就不可能买到100只鸡。设小鸡为y只,则y=100-x。下面要做的工作就是求x为何值时,9x+y=300成立。第39页/共49页6.6强制退出循环程序代码:OptionExplicitPrivateSubForm_Click()DimxasIntegerDimyasIntegerForx=1to30Y=100-xIf9*x+y=300thenExitforNextxPrint“母鸡有”;x;”只”,”小鸡有”;y;”只”
EndSub第40页/共49页6.6强制退出循环6.6.2用ExitDo语句强制退出Do循环ExitDo语句可以使程序从Do循环中退出来,转到Loop语句后面的程序继续执行,而不必等到循环达到结束条件时才退出来。注意:在循环体外面,不可以使用ExitDo语句,而且ExitDo通常与IF语句一起使用。例:用DoWhile循环改写上例程序,体会ExitDo语句的作用第41页/共49页6.6强制退出循环程序代码:OptionExplicitPrivateSubForm_Click()DimxasIntegerDimyasIntegerX=1Dowhilex<=30Y=100-xIf9*x+y=300thenExitDoLoopPrint“母鸡有”;x;”只”,”小鸡有”;y;”只”
EndSub第42页/共49页6.7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论