【vb程序设计】第6章循环结构程序设计_第1页
【vb程序设计】第6章循环结构程序设计_第2页
【vb程序设计】第6章循环结构程序设计_第3页
【vb程序设计】第6章循环结构程序设计_第4页
【vb程序设计】第6章循环结构程序设计_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,第6章,循环结构程序设计,本章要点: For.Next循环While.Wend循环Do.Loop循环,特点: 重复相同或相似的操作步骤结构: 循环体要重复执行的语句序列。 循环控制部分规定循环的重复条件或重复次数,确定循环范围的语句,2,6.1 ForNext循环结构,1. 格式For = To Step Exit For Next ,循环变量值超过终值?,执行循环体,后续语句,T,F,2. 功能: 执行过程如流程图所示,3,3. 说明1) 循环变量数值型变量2) 初值,终值,步长数值表达式3) 步长可正可负,但不能为0,为1时可以省略 步长0时,必须: 初值终值 步长= 终值 循环结束条件循环变量的值终值4) Exit For退出循环,常放在条件语句中5) Next之后的循环变量应与For语句中的循环变量一致,也可以省略,4,例: 判断以下程序段的执行结果: For i = 5 To 1 Step -1 Print i * i; Next i Print Print i,例: 判断以下程序段的执行结果: X = 6 For K = 1 To 10 Step -2 X = X + K Next K Print K,X,5,累加分析: 累加器(变量)初始化 Sum=0 重复执行(循环体) Sum=Sum+I (I=1,2,N),【例6-1】输入N的值,求1+2+3+4+N,流程图:,6,设计界面:,Text1,Label3,Command1,运行界面:,7,代码:Private Sub Command1_Click() Dim N As Integer, I As Integer, Sum As Integer N = Val(Text1.Text) 输入累加总项数 Sum = 0 设累加和初值为0 For I = 1 To N Sum = Sum + I 循环体:和值=和值+累加项 Next I Label3.Caption = Sum 输出累加结果End Sub,8,思考: 1. 求12+22+32+42+10022. 求13+33+53+n33. 求1-3+5-7+(-1)n+1(2n-1),4. 求,5. 求,9,练习:输入N的值,求 123N (即N!),代码: Private Sub Command1_Click() Dim N As Integer, I As Integer, F As Long N = Val(Text1.Text) F = 1 For I = 1 To N F = F * I Next I Text2.Text = F End Sub,累乘分析: 初始化: F=1 循环体: F=F I (I=1,2,3N),10,思考: 1. 求13 5 7(共N项)。,2. 求:,3. 求:,11,【例6-2】打印斐波那契(Fibonacci)数列的前20项 斐波那契数列如下: 0,1,1,2,3,5,8,13,分析:产生斐波那契数列的方法是:1)首先给出第一项、第二项的值0和1: A=0,B=1。2)输出当前两个数A,B,求后两个数: A=A+B B=A+B 这样就产生了数列中新的两个数,且这两个数取代了其前两个数,仍存于变量A、B中。3)重复步骤 2),直到输出所有的数。,12,流程图:,13,设用文本框Text1显示数据,每行显示两个数。代码:Private Sub Form_Click() A = 0: B = 1 Text1.Text=Str(A) & Str(B) & vbCrLf For I = 1 To 9 A = A + B B = A + B Text1.Text=Text1.Text & Str(A) & Str(B) & vbCrLf Next IEnd Sub,14,思考: 1. 在窗体上打印1、3、5、7、9、N。2. 在窗体上显示1到500之间所有能被3整除的数,每行10个数。3. 在带水平滚动条文本框中显示1到指定N之间所有能被3和7同时整除的数。4. 在带垂直滚动条的文本框中显示003600之间的正弦和余弦值,每隔20求一组值。,15,【例6-3】从键盘任意输入30次字符,每次一个,分别统计字符A、B、C的个数(不区分大小写)。如果中途连续输入三个字符Q,则结束输入。,分析:设置循环次数为30,每循环一次输入一个字符设置变量QCount,首先将QCount清零,如果输入的字符是Q,则QCount累加1;如果不是Q,就将QCount重置为零。当QCount的值累加到3时,说明已经有连续三个Q输入,则用Exit For退出循环。另设三个变量ACount、BCount和CCount,用于分别存放字符A、B、C的个数。首先在循环开始之前将它们初始化为0,然后在循环体中,每当输入的字符为A、B或C时,相应的变量值增加1,16,设计界面:,“开始输入”按钮的Click事件过程:,Private Sub Command1_Click() Dim ACount As Integer, BCount As Integer, _ CCount As Integer, QCount As Integer Dim CH As String * 1,17,ACount = 0 : BCount = 0 CCount = 0 : QCount = 0 For I = 1 To 30 CH = UCase(InputBox(请输入一个字符, 字符统计) If CH = Q Then QCount = QCount + 1 Else QCount = 0 End If If QCount = 3 Then MsgBox 连续输入了三个字符Q,结束输入, , 注意 Exit For End If,18,Select Case CH Case A ACount = ACount + 1 Case B BCount = BCount + 1 Case C CCount = CCount + 1 End Select Next I Text1.Text = Acount Text2.Text = Bcount Text3.Text = CCountEnd Sub,19,6.2 While.Wend循环结构,问题: 求12+22+32+42+大于某数N的最小值,N由用户指定。特点: 已知循环条件、未知循环次数, 用While.Wend循环结构实现较方便1. 格式 While Wend2. 功能,20,【例6-4】使用While.Wend循环求12+22+32+大于某数N的最小值,N由用户指定。,设计界面:,运行界面:,21,流程图:,22,“计算”按钮Command1的Click事件过程:,Private Sub Command1_Click() Dim I As Integer, N As Integer, S As Integer N = Val(Text1.Text) 输入N I = 0 : S = 0 初始化 While S = N 当和值SN时,进入循环体 I = I + 1 S = S + I * I Wend Label2.Caption = S 输出和值SEnd Sub,思考:求12+22+32+42+小于某数N的最大值,23,While.Wend循环可以使用Do.Loop循环来代替,但Do.Loop循环具有更多的形式。,24,6.3 DoLoop循环结构,1. 格式,格式一: Do While Exit Do Loop,格式二: Do Until Exit Do Loop,2. 功能,25,格式,格式三: Do Exit Do Loop While ,格式四: Do Exit Do Loop Until,功能,26,3. 说明1) Exit Do语句用于退出循环体2) 也可以在Do语句和Loop语句之后都没有条件, 这时在循环体内必须有强行退出循环的语句即: Do Exit Do Loop 3) 当型循环可能一次都不执行;而直到型循环至少要执行一次循环体。多数情况下,当型循环和直到型循环可互相代替。,27,【例6-5】求,直至最后一项的值10-4为止。分析:用Sum表示累加和,初值: Sum=0 重复: Sum=Sum+Term 用Term表示每一项, 则Term=1/(N*N) 用N表示1,3,5,7,初值: N=1 重复: N=N+2归纳: 初始化 N=1,Sum=0 重复 Term=1/(N*N) , Sum=Sum+Term ,N=N+2 循环终止条件 Term=0.0001,28,流程图:,29,设单击窗体时开始计算,代码如下:Private Sub Form_Click() N = 1 : Sum = 0 Do Term = 1 / (N * N) Sum = Sum + Term N = N + 2 Loop Until Term =2P,31,流程图:,32,设单击窗体时开始计算,代码如下:Private Sub Form_Click() P = Val(Text1.Text) R = Val(Text2.Text) / 100 V = P:Y = 0 Do Until V = 2 * P Y = Y + 1 V = V * (1 + R) Loop Text3.Text = Y Text4.Text = Format(V, 0.00)End Sub,33,【例6-7】给出两个正整数M、N,求它们的最大公约数和最小公倍数。,设计界面:,34,分析: 求最大公约数的方法如下1) 以M作被除数,N作除数,求余数R。2) 如果R不为零,则将除数N做为新的被除数M,将余数R做为新的除数N,再进行相除,得到新的余数R。3) 如果R仍不等于0,则重复上述步骤(2)。如果R为零,则这时的除数N就是最大公约数。最小公倍数为两个数的积除以它们的最大公约数。,35,流程图:,36,Dim A As Integer, B As Integer, N As Integer, _ M As Integer, R As IntegerPrivate Sub Command1_Click() 求最大公约数 M = Val(Text1.Text):N = Val(Text2.Text) A = M:B = N R = M Mod N Do While R 0 M = N N = R R = M Mod N Loop Label3.Caption = NEnd Sub,代码:,37,Private Sub Command2_Click() 求最小公倍数 Label4.Caption = A * B / NEnd Sub,38,【例6-8】输入某正整数n(n3),判断n是否是素数。,设计界面:,运行界面:,39,分析:用N除以2到 之间的全部整数,如果都除不尽,则N是素数,否则N不是素数。算法:首先设K= ,然后用循环实现用N除以2K之间的任一整数I,当遇到整除时,退出循环,这时的I值必然小于或等于K;如果N不能被2K之间的任一整数I整除,则在完成最后一次循环之后,I的值为K+1。因此在退出循环之后可以根据I的值来决定N是否是素数。如果I=K+1,则说明N是素数,否则N不是素数。,40,流程图:,41,Private Sub Command1_Click() N = Val(Text1.Text) : K = Int(Sqr(N) : I = 2 Do While I 0 Then I = I + 1 不能整除,I的值累加1 Else Exit Do 整除,退出循环 End If Loop If I = K + 1 Then Label2.Caption = 是素数 Else Label2.Caption = 不是素数 End IfEnd Sub,代码:,42,6.4 循环的嵌套,在一个循环体内又完整地包含另一个循环,称为循环的嵌套(或多重循环),例: For I = 1 To 3 For J = 5 To 7 Print I, J Next J Next I执行过程: ,例: For I = 1 To 2 For J = 1 To 3 For K = 1 To J S = S + I + J + K Next K Next J Next I执行过程: ,43,说明1) 各种类型的循环结构也可以互相嵌套。嵌套时,内层循环必须完全嵌套在外层循环之内。例如,以下的嵌套都是允许的:,For I=1 To 10 . For J=1 To 20 . Next J .Next I,Do . For J=1 To 20 . Next J .Loop While I=10,44,For I=1 To 10 . While J=20 . Wend .Next I,Do . Do While J10,45,For I=1 To 10 . For J=1 To 20 . Next I .Next J,Do . For J=1 To 20 . Loop While I 1000 Then Exit For Next J Print I; J; F F = 1Next I,48,F = 1Do While I 1000 Then Exit Do Next J Print F F = 1 I = I + 1LoopPrint F,49,4) 嵌套循环应选用不同的循环变量例: For I=. For J=. . Next J . For J=. . Next J Next I,50,【例6-9】求1+(1+2)+(1+2+3)+(1+2+3+n), n由用户输入。 分析: 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,51,【例6-10】设计如下图a所示的界面,运行时单击图片框Picture1,用输入框指定行数,然后按该行数在图片框中打印一个三角形,如下图b所示。,Picture1,a),b),52,分析:程序首先输入N,然后N控制循环次数,每循环一次打印。而对于每一行,只需要确定该行打印的起始位置及打印的星号个数就可以了。对于本题,分析其行号、打印起始位置和打印的星号个数之间具有表所示(设N为6)。,结论:第I行打印的起始位置为N+1-I; 第I行星号的个数为2I-1,53,代码如下:Private Sub Picture1_Click() Picture1.Cls N = Val(InputBox(请输入行数) For I = 1 To N Picture1.Print Tab(N + 1 - I); For J = 1 To 2 * I - 1 Picture1.Print *; Next J Picture1.Print Next IEnd Sub,Picture1.Print String(2 * i - 1, *);,54,【例6-11】公鸡5个钱一只,母鸡三个钱一只、小鸡一个钱三只,要用100个钱买100只鸡,问公鸡、母鸡、和小鸡各买几只?分析: 使用“穷举法”,Private Sub Form_Click() Dim I As Integer, J As Integer, K As Integer Print Tab(5); 公鸡; Tab(15); 母鸡; Tab(25); _ 小鸡 For I = 0 To 20 For J = 0 To 33 For K = 0 To 100 Step 3 If I*5+J*3+K3=100

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论