vb循环结构程序设计实例课件.pptx
第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计For 循环变量=初值 To 终值 Step 步长 循环体语句 Next 循环变量 ForNext循环的一般语法格式 步长为步长为步长为步长为1 1时可省略时可省略时可省略时可省略步长可取正或负数;步长可取正或负数;步长可取正或负数;步长可取正或负数;步长为负时终值应步长为负时终值应步长为负时终值应步长为负时终值应小于初值小于初值小于初值小于初值成成成成对对对对出出出出现现现现循环变量值介于初循环变量值介于初循环变量值介于初循环变量值介于初值值值值和和和和终值之间时反终值之间时反终值之间时反终值之间时反复执行复执行复执行复执行第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计lFor-NextFor-Next常用于常用于循循环环次数已知次数已知的循的循环环中中 l循循环环体体语语句可以是句可以是一条或多条一条或多条语语句句l可以使用可以使用Exit ForExit For语语句句提前提前结结束束循循环环 For i=1 To 10 For i=1 To 10 x=x+Int(Rnd*100)x=x+Int(Rnd*100)sum=sum+x sum=sum+x If sum 300 Then If sum 300 Then Exit ForExit For End If End If Next i Next i Print sum Print sum 程序说明 第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计【例】找最大值。单击最大值按钮时产生10个1100之间的随机整数显示在框架内的标签中,同时将最大值显示在下方的标签内。lbldatalblmax第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计l处理第1个数据产产生一个随机数,存放在生一个随机数,存放在变变量量a a中中将将a a显显示在示在标签标签(lblDatalblData)中)中 将将a a作作为为当前最大当前最大值值放在放在变变量量maxmax中中 l处理第2个数据 产产生新的随机数,存放在生新的随机数,存放在变变量量a a中中 将将a a连连接接显显示在示在标签标签(lblDatalblData)原有内容之后)原有内容之后如果如果a a大于大于maxmax,则则将将a a作作为为最大最大值值放在放在maxmax中中 编程分析 a=Int(Rnd*100)+1 a=Int(Rnd*100)+1 lblData.Caption=alblData.Caption=amax=amax=aa=Int(Rnd*100)+1 a=Int(Rnd*100)+1 lblData.Caption=lblData.Caption&,&alblData.Caption=lblData.Caption&,&aIf a max ThenIf a max Then max=a max=aEnd If End If 9 9次次次次 第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计Private Sub cmdMax_Click()Private Sub cmdMax_Click()Dim a As Integer,i As Integer,max As Integer Dim a As Integer,i As Integer,max As Integer Randomize Randomize a=Int(Rnd*100)+1 a=Int(Rnd*100)+1 lblData.Caption=a lblData.Caption=a max=a max=a For i=1 To 9For i=1 To 9 重复重复执执行行9 9次次 a=Int(Rnd*100)+1a=Int(Rnd*100)+1 lblData.Caption=lblData.Caption&,&a lblData.Caption=lblData.Caption&,&a If a max Then If a max Then max=a max=a End If End If Next iNext i lblMax.Caption=max lblMax.Caption=maxEnd SubEnd Sub 求求1000个数个数中的最大中的最大?程序代码 第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计l常用于执行条件明确,但事前不知道循环次数的循环l语法格式 Do While 循环条件循环体语句Loopl执行流程 Do While-Loop语句条件判断条件判断条件判断条件判断循环体语句循环体语句循环体语句循环体语句YesYesNoNo第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计l通常情况下,在进入Do While-Loop语句前应给循环变量设置初值l循环体中必须包含使循环趋于结束的语句 l可以使用 Exit Do 语句随时跳出当前所在的循环,提前结束循环语句lExit Do 可出现在循环体语句中的任意位置,通常与 If 语句联合使用 Do While-Loop语句第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计l语法格式 Do循环体语句Loop While 循环条件l执行流程 Do-Loop While语句条件判断条件判断条件判断条件判断循环体语句循环体语句循环体语句循环体语句YesYesNoNo第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计【实例】输入若干成绩(输入-1时结束)计算总成绩和平均成绩。连续弹出输入框接收成连续弹出输入框接收成连续弹出输入框接收成连续弹出输入框接收成绩,直至绩,直至绩,直至绩,直至-1-1时结束时结束时结束时结束计算总成绩和平均成绩计算总成绩和平均成绩计算总成绩和平均成绩计算总成绩和平均成绩多多多多行行行行文文文文本本本本框框框框LblaverageLblaverageLblsumLblsumtxtscore第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计l输入第1个数据输输入第一个数据,存放在入第一个数据,存放在变变量量scorescore中中l判断输入的数据是否是-1,如果不是-1 记录记录已已经输经输入的学生人数入的学生人数将数据显示在txtscore原有内容之后原有内容之后中中 计计算算总总成成绩绩接收下一个数据接收下一个数据 编程分析成绩输入 score=Val()score=Val()InputBox(“InputBox(“请输入请输入请输入请输入.”,“.”,“成绩输入成绩输入成绩输入成绩输入,-,-1)1)n n=n+1=n+1 txtScore.Text=txtScore.Text&score&Chr(13)&Chr(10)txtScore.Text=txtScore.Text&score&Chr(13)&Chr(10)直直直直到到到到输输输输入入入入-1-1-1-1 sum sum=sum+score=sum+score score=Val(InputBox(“score=Val(InputBox(“请输入请输入请输入请输入.”,“.”,“成绩输入成绩输入成绩输入成绩输入,-1),-1)换行符换行符第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计Dim sum As Integer Dim sum As Integer 总成绩Dim n As Integer 成绩个数Private Sub cmdInput_Click()Private Sub cmdInput_Click()Dim score As Integer Dim score As Integer txtScore.Text=txtScore.Text=lblSum.Caption=lblSum.Caption=lblAverage.Caption=“lblAverage.Caption=“sum=0 :n=0 sum=0 :n=0 score=score=Val(Val(InputBox(“InputBox(“请输请输入入.”,“.”,“成成绩输绩输入入,-1),-1)Do While score -1 Do While score -1 n=n+1 n=n+1 txtScore.Text=txtScore.Text&score&Chr(13)&Chr(10)txtScore.Text=txtScore.Text&score&Chr(13)&Chr(10)sum=sum+score sum=sum+score score=score=Val(Val(InputBox(InputBox(请输请输入入.,.,成成绩输绩输入入,-1),-1)Loop LoopEnd SubEnd Sub程序代码第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计Private Sub cmdCala_Click()Dim ave As Single lblSum.Caption=sum ave=sum/n lblAverage.Caption=aveEnd Sub 程序代码 第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计【程序改进】修改上例,当输入非法成绩时,再次弹出输入框等待重新输入,直至输入1 100之间的整数为止。要求在文本框中只显示出有效的输入成绩。第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计循环的嵌套l 在一个循在一个循环体内又出体内又出现另外的循另外的循环语句句称称为循循环嵌套,也称嵌套,也称为多重循多重循环。l 在嵌套在嵌套结构中,构中,对嵌套的嵌套的层数没有限制,数没有限制,有几有几层嵌套,就嵌套,就说是几重循是几重循环。l 多重循多重循环的的执行行过程是,外循程是,外循环每每执行行一次,内循一次,内循环都要从都要从头到尾到尾执行一遍。行一遍。l嵌套嵌套时,内,内层循循环必必须完全包含在外完全包含在外层循循环之内,不能相互之内,不能相互“交叉交叉”。ForI=1To10ForJ=1To20NextJNextIDoForJ=1To20NextJLoopWhileI=10ForI=1To10DoWhileJ=20LoopNextIDoDoWhileJ10ForI=1To10ForJ=1To20NextINextJDoForJ=1To20LoopWhileI=10NextJForI=1To10DoWhileJ 1000 Then Exit For Next j Print i;j;fNext I使用多重循环处理程序时,需要考虑清楚内外层循环分使用多重循环处理程序时,需要考虑清楚内外层循环分别用来控制哪一个量的变化,其变化规律如何。别用来控制哪一个量的变化,其变化规律如何。第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计多重循环应用举例1.字符图形的输出3.其他综合应用2.方程求解问题第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计字符图形的输出(a)(b)(c)(d)u在解决这类问题时,应首先考虑一个一般行的输出,只需要把这个一般行的输出语句利用循环结构控制执行多次即可。例如:在输出图形(a)时,每一行都输出了同样的6个字符,在输出每一行之后换行,然后输出下一行,所以,只需要将输出一行字符的语句连续执行5次就可以了。第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计输出图形输出图形(a)(a)的程序如下:的程序如下:For j=1 To 5For j=1 To 5For i=1 To 6 For i=1 To 6 内循环控制输出一行的多个星号内循环控制输出一行的多个星号 Print*;Print*;Next iNext iPrint Print 输出每一行后换行输出每一行后换行Next jNext jl 两两个个循循环环控控制制变变量量i i和和j j,分分别别用用来来控控制制图图形形中中列列与与行行的的变变化,称之为列变量和行变量。化,称之为列变量和行变量。l在在实实现现输输出出字字符符图图形形时时,要要找找清清楚楚要要输输出出的的图图形形与与行行列列变变量之间的关系。量之间的关系。第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计图形(b)与图形(a)的差别在输出每一行星号时首先输出了若干个空格每一行之前输出的空格的个数与其行号相同,即始终与行变量j相同。(b)(a)字符图形的输出输出图形输出图形(b)(b)的程序如下:的程序如下:For j=1 To 5For j=1 To 5Print Tab(j);Print Tab(j);先输出先输出j j个空格个空格For i=1 To 6 For i=1 To 6 Print*;Print*;Next iNext iPrint Print Next jNext j第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计图形c)与图形a)的差别 在于每一行输出的星号个数不同图形a)中每行都输出了固定个数的字符,而图形c)中每行输出的字符个数与其行数相同只需要修改一下内循环控制变量的终值就可以了。返回(a)(c)输出图形输出图形(c)(c)的代码如下:的代码如下:For j=1 To 5For j=1 To 5For i=1 To 6For i=1 To 6Print*;Print*;Next iNext iPrintPrintNext jNext jj第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计输出矩出矩阵图形形例:例:请输入入n值,编写程序写程序输出下列出下列图形(例如形(例如n=5).1 2 3 4 51 1 2 3 41 1 1 2 31 1 1 1 21 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,2n第第2行:行:2个个1,2n-1第第3行:行:3个个1,2n-2第第n行:行:n个个1第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计代代码Private Sub Form_Activate()Dim i As Integer,j As IntegerFor i=1 To 5 For j=1 To i Print 1;Next j For j=2 To 6-i Print j;Next j PrintNext iEnd Sub第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计实例例4.4 第第1行:行:1个个1,2-5第第2行:行:2个个1,2-4第第3行:行:3个个1,2-3第第5行:行:5个个1第第1行:行:1个个1,2n第第2行:行:2个个1,2n-1第第3行:行:3个个1,2n-2第第n行:行:n个个1第行:个,第行:个,2n-(i-1)第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计Yes打印第打印第i行行i=ni=i+1打印打印1打印打印2n-i+1For j=1 To iFor j=1 To i Print 1;Print 1;Next jNext jFor j=2 To n-i+1For j=2 To n-i+1 Print j;Print j;Next jNext j第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计例:编程打印“乘法九九表”。分析:将每一个等式作为一个方阵的节点,则每一个等式出现的位置上行列的数字是相同的。For i=1 to 9 For j=1 to i Next jNext i为乘法等式:expss=i&j&=&i*j。问题:如何控制每个表达式出现的位置,用Tab函数来实现,假设给每个等式的宽度为10,第一个等式出现在第4行,则Tab函数可以这样表示:Tab(j-1)*10+3);第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计(2)方程求解【例】编写程序求下列方程组的所有正整数解。2X+5Y=20 2Y=3X-1分析:根据两个方程确定X和Y的取值范围分别为:X在0和10之间,Y在0到4之间。对该范围内的所有整数依次用方程进行验证,从而得出方程的解。For X=0 To 10 For Y=0 To 4 If 2*X+5*Y=20 And 2*Y=3*X-1 Then Print X;Y End ifNext Y,X第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计(3)其他综合应用【例】编程求Sum=1+(1+2)+(1+2+3)+(1+2+3+n),其中n由用户输入。分析:l该题是一个累加问题,共有n项相加,设置存放累加和的变量为Suml对于第i个累加项1+2+i,又是一个累加问题,设存放该累加项的变量为Sum1,因此可以用双重循环来实现。l用外循环i依次取1、2、n值,对于每一次的累加项(如第i项),用内循环控制求1+2+i。l设文本框Text1用于输入总项数n,Text2用于输出总和Sum,运行时单击窗体计算结果。第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计Private Sub Form_Click()n=Val(Text1.Text)Sum=0 For i=1 To n Sum1=0 在计算每个累加项之前,将放和的变量清零 For j=1 To i Sum1=Sum1+j Next j Sum=Sum+Sum1 Next i Text2.Text=SumEnd Sub本题应注意Sum=0和Sum1=0在程序中的位置。第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计For i=2 To r-1For i=2 To r-1 If r Mod i=0 Then Exit For If r Mod i=0 Then Exit ForNext iNext iIf i=r ThenIf i=r ThenEnd if End if 判断判断r r是否素数是否素数lblprime.Caption=lblprime.Caption+Str$(r)r r是素数是素数Flag=0Flag=0Flag=1Flag=1:exit forexit forFlag=0Flag=0第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计补充例充例题l译密密码:字母翻字母翻译:按:按26个字母排列个字母排列顺序向后移序向后移动n位,若位,若移出了最后一个移出了最后一个则移到字母移到字母a或或A并并顺序往后移序往后移例:今天是例:今天是28号,号,a 向后移向后移动28位位abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz2825第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计补充例充例题代代码 If ch=a And ch=z Then asch=Asc(ch)-97+1 在在2626个小写字母中的位置个小写字母中的位置 trap=Chr$(asch+n)Mod 26+97-1)求出按求出按规则转换后的字符后的字符第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计补充例充例题题目要求:目要求:输入一行数字,按相反的入一行数字,按相反的顺序序输出。出。例如:例如:输入入“1 2 3 4 5 6 7 8”输出出“8 7 6 5 4 3 2 1”l 难点:如何点:如何获得各位数字得各位数字第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计补充例充例题代代码Private Sub lblout_Click()n=Val(txtin.Text)While n 0r=n Mod 10lblout.Caption=lblout.Caption&rn=n 10WendEnd Sub第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计译码器器密密码检测窗体窗体设计 案例案例译码器译码器 第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计译码器器密密码检测窗体窗体设计l添加窗体:工程添加窗体:工程|添加窗体添加窗体l密密码框属性:框属性:PasswordChar *l代代码Dim n As IntegerDim n As Integer 定义定义n n为窗体级变量,用于为窗体级变量,用于累计验证密码的次数累计验证密码的次数 Private Sub cmdok_Click()Private Sub cmdok_Click()Const password=061216 Const password=061216 Const name=santa Const name=santa n=n+1n=n+1If n=3If n=3 Then Then 控制控制验证密密码的次数的次数第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计If txtname.Text=Or txtpassword.Text=If txtname.Text=Or txtpassword.Text=Then MsgBox Then MsgBox 必须输入姓名和密码必须输入姓名和密码,0+64,0+64,提提示示 ElseElse If txtname.Text=name And txtpassword.Text=If txtname.Text=name And txtpassword.Text=password Then password Then frm1.Hidefrm1.Hidefrm2.Showfrm2.Show Else Else MsgBox MsgBox 姓名或密码错误姓名或密码错误,0+48,0+48,警告警告 End If End IfEnd IfEnd IfElseElseEndEndEnd IfEnd IfEnd SubEnd Sub第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计译码器器译码器窗体器窗体设计 第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计译码器器译码器窗体器窗体设计l函数函数Asc(C)的功能是将字符)的功能是将字符转换成成ASCII码值,如,如Asc(“A”)的)的值65Chr(65)其功能是将其功能是将ASCII码值转换成字符,如成字符,如Chr(65)的)的值“A”LTrim(C)是去掉字符串左是去掉字符串左边的空格,的空格,如如LTrim(“ABVC”)的的值为ABVCMid(C,N1,N2)是取字符子串,在是取字符子串,在C中从中从N1位开始位开始向右取向右取N2个字符个字符第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计译码器器译码器窗体器窗体设计l约定定 “原文原文”文本框中的数字字符串每三位代表一个文本框中的数字字符串每三位代表一个完整的信息,如一个字母(完整的信息,如一个字母(065表示字符表示字符“A”)或一个空格()或一个空格(000表示空格),一个数表示空格),一个数字(字(033非字母或空格,表示数字非字母或空格,表示数字33),字符),字符串串结束(束(“#”)第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计译码器器“译码”代代码n=1ori=LTrim$(txtori.Text)去掉去掉“原文原文”文本框字文本框字符串右符串右边的空格,的空格,赋值给变量量oriorip=Mid$(ori,n,3)从字符串从字符串ori的第一个位置开的第一个位置开始取始取3个字符个字符,赋值给字符串字符串变量量oripWhile orip#n=n+3 确定下一次取字符的位置确定下一次取字符的位置 If Val(orip)=0 And Val(orip)=a And orip=A And orip 99 Then If trap 99 Then 其它字符计数其它字符计数 other=other+3other=other+3 Else Else If trap 9 Then If trap 9 Then other=other+2 other=other+2 Else Else other=other+1 other=other+1第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计 End If End If End If End If End IfElse trap=orip 超出超出ASCLLASCLL码范围的值不变码范围的值不变 other=other+3other=other+3End Iftra=tra+trap 译码连接到字符串译码连接到字符串tratraorip=Mid$(ori,n,3)取出下一个字符串取出下一个字符串Wend第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第十一章第四章第四章VBVB程序设计程序设计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