05 第05章 VB程序设计循环结构_第1页
05 第05章 VB程序设计循环结构_第2页
05 第05章 VB程序设计循环结构_第3页
05 第05章 VB程序设计循环结构_第4页
05 第05章 VB程序设计循环结构_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 设计循环结构程序,Visual Basic 程序设计教程,Visual Basic程序设计教程,2,循环结构又称重复结构。 本章主要介绍: 逻辑表达式 For/Next语句 Do/Loop语句 While/Wend语句 循环的嵌套使用。,Visual Basic程序设计教程,3,循环结构是根据条件来决定某段代码是否重复执行。 循环结构中一种常用的流程可以表示如图: 条件满足就执行a块程序段 然后再进行条件判别 如果满足条件,则继续执行a块程序段 直到条件不满足,才执行a块后面的程序。,5.1 概述,Visual Basic程序设计教程,4,其中的a程序块段称为循环体。 条件使用逻辑表达

2、式。 循环的另一种形式是把判断条件放在循环体之后。,Visual Basic程序设计教程,5,循环结构中有两个基本问题需要考虑: (1)条件必须明确,能使循环过程正常结束 (2)循环体内,必要时可改变控制循环的条件 改变可能导致循环结束 改变也可能导致循环进入无休止的状态(死循环)。,Visual Basic程序设计教程,6,循环有两种类型: 计数控制 控制累计执行循环体的次数 次数已到则结束循环 如1+2+3+100或98+96+94+4+2 事态控制 由某些条件决定循环结束。 如计算一系列正整数之和,遇负数停止循环。 也可以在一个循环过程中同时使用这两种类型,Visual Basic程序设

3、计教程,7,【例5-1】 设计一个判断素数的程序。若不是素数,要求分解为a*b的形式 控件:1个文本框和1个命令按钮 事件:命令按钮的Click。 首先要了解什么是素数。 素数是指除了1和自身外,不能被其它整数整除的正整数。 判断A是否为素数的基本方法是: 将A分别除以2、3、A-1,若都不能整除,则它为素数。 判断A被i整除可以采用表达式: A Mod i = 0 或:A / i = A i 或:A / i = Int(A /i),Visual Basic程序设计教程,8,Option ExplicitPrivate Sub Command1_Click() Dim A As Long, i

4、 As Integer A存放要判断的数。i取值为2A-1 Dim Flag As Boolean Flag作素数标志,False时,表示不是素数 A = Val(Text1.Text) Flag = True 先设A是素数,当A2或能被i整除时,再置为False If A 2 Then Flag = False A2,不是素数 Else i = 2 Do While i = A-1 If A Mod i = 0 Then Flag = False: Exit Do A能被i整除,则不是素数 i = i + 1 Loop End If If Flag Then MsgBox A 是素数 Els

5、e 此时表示程序运行是通过Exit For转出来的 Print A; 不是素数 End IfElse Print A; 不是素数End If,Visual Basic程序设计教程,25,5.5.1 Do/Loop语句 对只知道循环终止条件,可采用Do/Loop循环 For/Next语句可改写成Do/Loop循环,反之则不然。 Do/Loop语句有五种表示形式,它们的格式为:,5.5 使用Do/Loop循环语句,Visual Basic程序设计教程,26,1执行过程(1)对格式一和二,VB将先判断条件,再执行循环体。(2)对格式三和四,先执行循环体,再判断条件。循环体至少执行一次。(3)对用Wh

6、ile的语句,当条件满足(True)时,执行循环体。(4)对用Until的语句,当条件不满足(False)时,执行循环体。(5)格式五的循环体内必须存在Exit Do语句,否则会出现死循环。若程序运行出现死循环,同样可用Ctrl Break暂停程序执行。,Visual Basic程序设计教程,27,2关于格式(1)条件一般应为关系或逻辑表达式,一般应有变量。(2)Do和Loop必须成对出现 3关于循环体 循环体是一条或多条语句 可以包括分支结构和循环结构。 可以写成一行或多行。 循环体中应有改变循环条件的语句,以避免出现死循环。,Visual Basic程序设计教程,28,5.5.1 Do/L

7、oop语句-编程序:求n!,Visual Basic程序设计教程,29,【例5-6】 在文本框中输入两个整数,求它们的最大公约数和最小公倍数。 求最大公约数可用辗转相除法。 该方法的基本思想是使用带余除法: (1)A除以B,得余数为R1; (2)若R10,则B为最大公约数。 若R10,则B赋值给A,R1赋值给B,求余数R2; 若R20,则继续以上步骤。,Visual Basic程序设计教程,30,(3)经过有限(n+1)步后,Rn+1=0。 这时A和B的最大公约数是Rn。最小公倍数为A*B/Rn。 该算法循环次数未知,但循环条件已知:余数不为0。因此适用于Do/Loop语句编程。 其循环体为:

8、 把上一个B作为新的A,把上一个余数作为新的B,求出新余数。,Visual Basic程序设计教程,31,5.5.1 Do/Loop语句求最大公约数和最小公倍数 Private Sub Command1_Click() Dim A As Long, B As Long, R As Long A = Val(Text1.Text) B = Val(Text2.Text) R = A Mod B Do While R 0 A = B: B = R R = A Mod B Loop MsgBox 最大公约数= Max, Min=; Min, Average=; Round(Average, 3) E

9、nd Sub 当输入23、41、35、61、12、1、7、-1后, 运行结果:Max=61 Min=1 Average=25.714,Visual Basic程序设计教程,34,5.5.2 Exit Do语句 Exit Do是跳出Do/Loop循环的语句 跳出循环后,将执行Loop语句后面的语句。 Exit Do语句同样也往往与If语句合用 如求阶乘的程序片断为: N = Val(InputBox(n= ) Result = 1: i = 1 Do Result = Result * i i = i + 1 : If i N Then Exit Do Loop MsgBox N PiEnd S

10、ub 在单击命令按钮后,若精度用缺省值0.0000001, 则显示3.1415924535898。,Visual Basic程序设计教程,38,循环结构中可以嵌套循环 当循环体中包含了循环时,称为循环嵌套,或称为多重循环。 循环体中包含的循环语句可以与外循环相同,也可以不同。 嵌套一层称为二重循环。 多重循环中遇到Exit For(Do),只能跳出当前一层循环。,5.7 如何实现多重循环控制,Visual Basic程序设计教程,39,【例5-9】 窗体上显示3100之间的所有素数。每行显示5个。 前面的例子中判断A是否为素数是一重循环。 现让A分别等于3、5、7、97、99就可以了。 为了每

11、行显示5个,设置一个计数变量Count。 Private Sub Command1_Click() Dim A As Integer, i As Integer, Count As Integer Count = 0 素数个数计数变量 Print 以下数据为素数: For A = 3 To 99 Step 2 For i = 2 To Int(Sqr(A) If A Mod i = 0 Then Exit For 被整除 Next i If i Int(Sqr(A) Then Count = Count + 1 : Print A, If Count Mod 5 = 0 Then Print

12、换行 End If Next AEnd Sub,Visual Basic程序设计教程,40,【例5-10】 在窗体上如图图案,它由“*”组成。分析: 上三角形中,第I行有I个,可使用循环: For J = 1 To I : Print * ; : Next J 因每行起点不同,而且一行结束后要换行,所以在J循环的前后各有一Print。 这样的行有7行,故外循环使I从1至7。 下三角形,操作过程与上三角相似,Visual Basic程序设计教程,41,5.7 如何实现多重循环控制-显示图案,Private Sub Command1_Click() Dim I As Integer, J As I

13、nteger Cls For I = 1 To 7 Print Spc(20 - I); 打印时空20-i格 For J = 1 To I Print * ; Next J Print 用于换行 Next I For I = 6 To 1 Step -1 Print Spc(20 - I); For J = 1 To I Print * ; Next J Print Next IEnd Sub,Visual Basic程序设计教程,42,5.8.1 递推法 【例5-11】 有一个数列,前两项是1、1,第三项是前二项之和,以后每一项都是前二项之和。即为:1、1、2、3、5、8、13、21,34。

14、 要求输出该数列的前30项。 该数列又称斐波那契数列。由“兔子问题”引发 这是一个递推问题 所谓递推关系是指一串函数之间的关系,它把每一个函数表示为前k个函数的线性组合。本题中k=2。 解决递推问题必须具备两个条件:(1) 有初始值,如F1=1、F2=1 (2) 存在递推关系。如Fn=Fn-1+Fn-2(n2) 在程序中一般设置二或三个变量就可以了。 程序中用F1、F2、F3表示三个数,在循环中,它们不断用新值代替旧值。这种操作称为迭代,,5.8 程序举例,Visual Basic程序设计教程,43,程序代码如下:Private Sub Command1_Click() Dim F1 As L

15、ong, F2 As Long, F3 As Long Dim i As Integer Cls F1 = 1: F2 = 1 Print F1, F2, For i = 3 To 30 F3 = F1 + F2 Print F3, If i Mod 4 = 0 Then Print 每行显示4个数 F1 = F2 : F2 = F3 用新值代替旧值 NextEnd Sub F1和F2始终作为前两个数,F3作为新产生的数 因第24个月兔子数已超过32767对,故变量声明为Long,Visual Basic程序设计教程,44,5.8.2 穷举法 【例5-12】 我国古代数学家在算经中出了一道题:

16、“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?” 即:当时用100元钱买100只鸡,其中公鸡每只5元,母鸡每只3元,小鸡3只1元,问可买公鸡、母鸡、小鸡各多少只? 设公鸡X只,母鸡Y只,小鸡Z只,列出方程式: X+Y+Z=100 5X+3Y+Z/3=100 2个方程求3个未知数,无法用代数方法求解 可将X、Y、Z分别为0100的每一种可能性都去试一下,如符合,则就是其中的一种购买方案。 列举所有可能的方案,找出符合要求的,这样的算法称为穷举法。,Visual Basic程序设计教程,45,可测试方案分别为: 0、0、0;0、0、1;0、0、100; 1、0

17、、0;1、0、1;1、0、100; ; 100、100、0;100、100、1;100、100、100 事实上当X和Y确定时,Z可以用100-X-Y求得,因此可以把三重循环改为二重循环。 Private Sub Command1_Click()Dim X As Integer, Y As Integer, Z As IntegerPrint 公鸡, 母鸡, 小鸡For X = 0 To 100 For Y = 0 To 100 Z = 100 - X - Y If 5 * X + 3 * Y + Z / 3 = 100 Then Print X, Y, Z Next YNext XEnd Su

18、b,Visual Basic程序设计教程,46,5.8.3 求水仙花数 【例5-13】 求数100999所有满足:数X = 数X个位、十位、百位的立方和。如:153 = 1*1*1 + 5*5*5 + 3*3*3 说明:该程序主要是能分出个位、十位、百位 Private Sub Command1_Click() Dim i As Integer Dim N1 As Integer, N2 As Integer, N3 As Integer For i = 100 To 999 N1 = i 100 求百位 N2 = (i - N1 * 100) 10 求十位 N3 = i Mod 10 求个位

19、 If i = N1 3 + N2 3 + N3 3 Then 计算水仙花数 Print i; =; N1; 3 +; N2; 3 +; N3; 3 End If NextEnd Sub,Visual Basic程序设计教程,47,5.8.4 验证哥德巴赫猜想 【例5-14】 输入一个大于等于6的偶数,将它分解为两个素数之和。 对每一个大于等于6的偶数N都可表示成: N=3+(N-3)、N=4+(N-4)、N=5+(N-5)、N=(N-3)+3, 即A、B的范围为3N-3 由于大于2的偶数不是素数,处理前可以去掉这些数, 由于3+(N-3)和(N-3)+3是一致的,故A的范围为3N/2,B=N

20、-A。 程序设计思路: 当输入一个大于等于6的偶数N后, 让A在3N/2的奇数范围内循环, 若A是素数,则求出B=N-A,再判断B是否为素数, 若B也是素数,则输出A和B。,Visual Basic程序设计教程,48,Private Sub Command1_Click() Dim A As Long, B As Long, N As Long, i As Integer, j As Integer Do 该循环是为了必须获得一个大于等于6的偶数 N = Val(InputBox(请输入一个大于6的偶数) Print 输入的数为 & N Loop While N / 2 N 2 Or N Sq

21、r(A) Then 若A是素数 B = N - A 求出B For j = 2 To Sqr(B) 判断B是否也为素数 If B Mod j = 0 Then Exit For Next j If j Sqr(B) Then 若B也是素数 Print N & = & A & + & B 输出 Exit For 已验证,跳出A循环 End If End If Next AEnd Sub,当输入2322时,显示2322=11+2311,Visual Basic程序设计教程,49,5.8.5 数制转换 【例5-15】 请编写程序:将十进制正整数转换为二进制数或十六进制数; 控件: 两个标签 两个文本框 两个单选按钮 两个命令按钮 十进制整数转换成二进制数,采用除2取余法。 十进制整数转换成十六进制数,采用除16取余法 最后把这些余数以字符方式拼接起来。,Visual Basic程序设计教程,50,5.8.5 数制转换-程序 Private Sub Command1_Click() 转换Dim A As Long, B As String, R As Integer B存放转换后结果,R放余数A = Val(Text1.Text): B = If Option1.Value

温馨提示

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

评论

0/150

提交评论