1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第一章,第二章,第三章,第四章,第五章,第六章,第七章,第八章,第九章,第十章,第十一章,第四章,VB程序设计,vb循环结构程序设计,本章内容,循环结构,用For-Next语句实现循环结构,用Do While-Loop语句实现循环结构,嵌套的循环结构,循环结构,用For-Next语句实现循环结构,语句形式:,For,循环变量,=,初值,to,终值,Step,步长,循环体,Exit For,循环体,Next,循环变量,语句说明:,循环变量必须为数值型。,当步长为正时,初值小于终值,反之初值大于终值;步长缺省时
2、为,1,。,循环体由一条或多条语句组成。,执行到,Exit For,语句时退出循环体,执行,For,语句的下一语句。,循环次数:,int,为取整。,用For-Next语句实现循环结构,用For-Next语句实现循环结构,语句执行过程:,用For-Next语句实现循环结构,【,实例4.1,】求1+2+3+n的和。窗体界面如图4-2,实例4.1 代码编写分析,求1+2+3+100的和,描述如下:,Sum=Sum+1,Sum=Sum+2,Sum=Sum+3,Sum=Sum+100,Sum=Sum+j,j=1,2,100,For i=1 to n,Sum=Sum+,j,Next i,For i=1 t
3、o n,Sum=Sum+,i,Next i,实例4.1 代码编写,For i=1 To 100 step 2,sum=sum+i,Next i,For i=1 To 50,sum=sum+2*i-1,Next i,For i=2 To 100 step 2,sum=sum+i,Next i,求到间的奇数之和,求到间的奇数之和,求到间的偶数之和,【,实例4.1,】界面设计,fratopic,fraresult,labtopic,labn,txtn,txtsum,cmdcal,cmdquit,实例4.1 代码编写,“计算”按钮完整代码,:,Private Sub,cmdcal_Click,(),D
4、im i As Integer,sum As Long,n As Long,n=,Val(txtn.Text,),For i=1 To n,sum=,sum,+i,Next i,txtsum.Text,=sum,End Sub,实例4.1 代码编写,“计算结果”框架中的标签(,labn,)内容随,txtn,输入值变化,Private Sub,txtn_Change,(),labn.Caption,=1+2+3+&,txtn.Text,End Sub,问题:修改程序,(,1,)单击“计算”按钮时,检测,n,的值,如果为空或不合法,弹出提示对话框,实例4.1 代码编写,Private Sub cm
5、dcal_Click(),Dim i As Integer,sum As Long,n As Long,If txtn.Text=Then,MsgBox 请输入一个正整数,vbOKOnly,提示信息,txtn.SetFocus,Else,n=Val(txtn.Text),For i=1 To n,sum=sum+i,Next i,txtsum.Text=sum,End if,End Sub,Private Sub cmdcal_Click(),Dim i As Integer,sum As Long,n As Long,n=Val(txtn.Text),For i=1 To n,sum=sum
6、i,Next i,txtsum.Text=sum,End Sub,实例4.1 代码编写,问题:修改程序,(2)计算完毕后,“计算”按钮的标题改为“清空”,同时两个文本框的内容清空,如何检测按钮的状态是需要显示“计算”还是,“清空”?,解决方法:设置一个布尔变量true对应“计算”,false对应“清空”,例:1*2*3*100,Private Sub cmdCal_Click(),Dim Fac As Integer,Dim i As Integer,Fac=1,For i=1 To 100,Fac=Fac*i,Next i,lblSum.Caption=Fac,End Sub,1!+2!+
7、3!+15!,Private Sub cmdCal_Click(),Dim Fac As long,sum As long,Dim i As Integer,Fac=1,For i=1 To 15,Fac=Fac*i,sum=sum+Fac,Next i,lblSum.Caption=sum,End Sub,分析程序运行结果,用While语句实现循环,语句形式:,While,条件,循环体,Wend,语句说明:,“条件”一般为条件表达式,结果为布尔变量,True,或,False,。,“条件”用于控制“循环体”是否执行。,多用于循环次数不定的情况。,用While语句实现循环,语句执行过程:,用Wh
8、ile语句改写实例4.1,“计算”按钮完整代码:,Private Sub cmdcal_Click(),Dim i As Integer,Dim sum As Long,n As Long,n=Val(txtn.Text),For i=1 To n,sum=sum+i,Next i,txtsum.Text=sum,End Sub,i=1,While,i 5000时结束操作。,txtcyc,txtfac,实例4.2代码编写,Private Sub cmdcal_Click(),Dim i As Integer,fac As Long,i=1:fac=1,While,fac=5000,fac=fa
9、c*i,i=i+1,txtcyc.Text=i,txtfac.Text=fac,Wend,End Sub,初始化语句是否可以去掉?,实例4.2代码编写,“手动计算”按钮:单步演示累乘结果,需要窗体级变量保留成绩,及点击次数,Private Sub Cmdcalh_Click(),If j=0 Then fact=1,If fact=5000 Then,j=j+1,fact=fact*j,txtcyc.Text=j,txtfac.Text=fact,Else,Cmdcalh.Enabled=False,End If,End Sub,该语句的作用?,用DO语句实现循环,Do While Loop语
10、句,Do While 条件,循环体语句,Loop,Do Loop While语句,Do,循环体语句,Loop While 条件,先执行,后判断至少执行一次循环体,先判断,后执行有可能一次也不执行,用DO语句实现循环,用Do While Loop 语句改写实例4.1,“计算”按钮完整代码:,Private Sub cmdcal_Click(),Dim i As Integer,Dim sum As Long,n As Long,n=Val(txtn.Text),For i=1 To n,sum=sum+i,Next i,txtsum.Text=sum,End Sub,i=1,Do While,i
11、sum=sum+i,i=i+1,Loop,执行过程,No,Yes,sum=sum+i,i=100,i=i+1,用Do Loop While语句改写实例4.1,“计算”按钮完整代码:,Private Sub cmdcal_Click(),Dim i As Integer,Dim sum As Long,n As Long,n=Val(txtn.Text),For i=1 To n,sum=sum+i,Next i,txtsum.Text=sum,End Sub,i=1,Do,sum=sum+i,i=i+1,Loop While,i=100,补充例题1,产生m个1100之间的随机数,求出其中的
12、最大值、最小值和平均值。窗体设计界面和运行界面如图。,txtnum,补充例题1,代码分析,No,Yes,产生随机数r,=Int(Rnd*100)+1,n max Then,max=r,Else,If r min Then min=r,End If,sum=sum+r,lblrnd.Caption=lblrnd.Caption+Str(r),n=n+1,Loop While n=r Then,End if,lblprime.Caption=lblprime.Caption+Str$(r),r是素数,素数最大、最小值、平均,If r max Then,max=r,Else,If r min The
13、n min=r,End If,sum=sum+r,No,Yes,产生随机数r,=Int(Rnd*90)+10,nm,n,=n+1,m=val(txtnum.text),与max、min进行比较,和sum累加,,输出结果,Yes,是否是素数,初始化部分,lblrnd.Caption=清空显示随机数的标签,lblprime.Caption=清空显示随机数素数的标签,m=Val(txtnum.Text),max=10 最大值赋值两位整数中的最小值,min=99 最小值赋值两位整数中的最大值,n=0 计数变量赋初值,sum=0 累加求和变量赋初值,输出部分,ave=sum/p 求平均值,lblmax.
14、Caption=max 标签显示最大值,lblmin.Caption=min 标签显示最小值,lblave.Caption=ave 标签显示平均值,循环的嵌套,Private Sub Form_Activate(),Dim i As Integer,j As Integer,For i=1 To 3,Print Tab(20);,For j=1 To 4-i,Print Spc(1);,Next j,For j=1 To 2*i-1,Print*;,Next j,Print,Next i,End Sub,For i=2 To 1 Step-1,Print Tab(20);,For j=1 To
15、 4-i,Print Spc(1);,Next j,For j=1 To 2*i-1,Print*;,Next j,Print,Next i,问题,如果是n行图形,程序应如何修改?,每行“*”输出的位置?,奇数和偶数输出的图形有何不同?,补充例题,例:请输入n值,编写程序输出下列图形(例如n=5).,1 2 3 4 5,1 1 2 3 4,1 1 1 2 3,1 1 1 1 2,1 1 1 1 1,第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,补充例
16、题代码,Private Sub Form_Activate(),Dim i As Integer,j As Integer,For i=1 To 5,For j=1 To i,Print 1;,Next j,For j=2 To 6-i,Print j;,Next j,Print,Next i,End Sub,实例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,第行:个,2n-(i-1),Yes,打印第i行,i=a And ch=z Then,
17、asch=Asc(ch)-97+1 ,在26个小写字母中的位置,trap=Chr$(asch+n)Mod 26+97-1),求出按规则转换后的字符,补充例题,题目要求:输入一行数字,按相反的顺序输出。,例如:输入“1 2 3 4 5 6 7 8”,输出“8 7 6 5 4 3 2 1”,难点:如何获得各位数字,补充例题代码,Private Sub lblout_Click(),n=Val(txtin.Text),While n 0,r=n Mod 10,lblout.Caption=lblout.Caption&r,n=n 10,Wend,End Sub,译码器密码检测窗体设计,案例,译码器,
18、译码器密码检测窗体设计,添加窗体:工程|添加窗体,密码框属性:PasswordChar *,代码,Dim n As Integer,定义n为窗体级变量,用于累计验证密码的次数,Private Sub cmdok_Click(),Const password=061216,Const name=santa,n=n+1,If n=0 And Val(orip)=a And orip=A And orip 99 Then 其它字符计数,other=other+3,Else,If trap 9 Then,other=other+2,Else,other=other+1,End If,End If,En
19、d If,End If,End If,Else,trap=orip,超出ASCLL码范围的值不变,other=other+3,End If,tra=tra+trap,译码连接到字符串tra,orip=Mid$(ori,n,3),取出下一个字符串,Wend,txttra.Text=tra,译码在“译文”文本框中显示,inf=大写字母个数:+Str$(lettercap)+,Chr$(13)+chr$(10),+小写字母个数:+Str$(letterlow)+,Chr$(13)+chr$(10),+单词个数:+Str$(word+1)+Chr$(13)+chr$(10)+其它字符个数:+Str$(other),MsgBox,inf,0+64,译文统计信息,End Sub,






