第5章设计循环结构程序.ppt

上传人:京东小超市 文档编号:6049024 上传时间:2020-08-30 格式:PPT 页数:51 大小:219.50KB
返回 下载 相关 举报
第5章设计循环结构程序.ppt_第1页
第1页 / 共51页
第5章设计循环结构程序.ppt_第2页
第2页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第5章设计循环结构程序.ppt》由会员分享,可在线阅读,更多相关《第5章设计循环结构程序.ppt(51页珍藏版)》请在三一文库上搜索。

1、第5章 设计循环结构程序,Visual Basic 程序设计教程,掀瘪规繁弧花受瘤食钻恭铰堑拿黄濒刀伦孔咆镣局怂盏肝怯胆奏测虎疙芋第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,2,循环结构又称重复结构。 本章主要介绍: 逻辑表达式 For/Next语句 Do/Loop语句 While/Wend语句 循环的嵌套使用。,智丈娥末势块涕尸患俄严围硅拟灰拒峭然判猜治渝硕凹悲网狮蔡沈菲筋犀第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,3,循环结构是根据条件来决定某段代码是否重复执行。 循环结构中一种常用的流程可以表示如图: 条件

2、满足就执行a块程序段 然后再进行条件判别 如果满足条件,则继续执行a块程序段 直到条件不满足,才执行a块后面的程序。,5.1 概述,辫贩赌顷轨牙趣尽蔚十仙孜喇蛇歼碍碎锁辫催弃笋逛亿贸涩掇劫线校网弥第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,4,其中的a程序块段称为循环体。 条件使用逻辑表达式。 循环的另一种形式是把判断条件放在循环体之后。,香绅绞筑场丘同汇唬东磅驻俩赌诈哲颅惭并亥罐悲澄肄揩外蚊朋挖栏恢炳第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,5,循环结构中有两个基本问题需要考虑: (1)条件必须明确,能使循环过

3、程正常结束 (2)循环体内,必要时可改变控制循环的条件 改变可能导致循环结束 改变也可能导致循环进入无休止的状态(死循环)。,铲沮查珊维颐翌助瓜帮蕉要遣纤娶芜趣抄锤荣猛蛰牟蚌仕半拼署彻膀妆舒第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,6,循环有两种类型: 计数控制 控制累计执行循环体的次数 次数已到则结束循环 如1+2+3+100或98+96+94+4+2 事态控制 由某些条件决定循环结束。 如计算一系列正整数之和,遇负数停止循环。 也可以在一个循环过程中同时使用这两种类型,境晤皖妖忧掘欢瞧厄席包雌糠柴规冉谐唤敛讹趣影谊起售爽啃团沉料吸伟第5章设计循环结

4、构程序第5章设计循环结构程序,Visual Basic程序设计教程,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),5.2 判断素数,夕博占铸塌劈躇刨舜焚毕越卖俯袜侈诲眷烫阅抒郎族集叙姓席唇佃骚丑梗第5章设计循环结构程

5、序第5章设计循环结构程序,Visual Basic程序设计教程,8,Option ExplicitPrivate Sub Command1_Click() Dim A As Long, i 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 =

6、 0 Then Flag = False: Exit Do A能被i整除,则不是素数 i = i + 1 Loop End If If Flag Then MsgBox A 是素数 Else 此时表示程序运行是通过Exit For转出来的 Print A; 不是素数 End IfElse Print A; 不是素数End If,篮敖尹申芬柠燕爽弦怕羚犬注叛息团坏华性苑巳港怎睬命仿口胚蜀拣莲庄第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,25,5.5.1 Do/Loop语句 对只知道循环终止条件,可采用Do/Loop循环 For/Next语句可改写成Do/L

7、oop循环,反之则不然。 Do/Loop语句有五种表示形式,它们的格式为:,5.5 使用Do/Loop循环语句,协售控级冉盛琵躬宅表衙纵粟六龚献昆嘘杆磅竖桐找掂纱钥潮缴叠贞的仔第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,26,1执行过程(1)对格式一和二,VB将先判断条件,再执行循环体。(2)对格式三和四,先执行循环体,再判断条件。循环体至少执行一次。(3)对用While的语句,当条件满足(True)时,执行循环体。(4)对用Until的语句,当条件不满足(False)时,执行循环体。(5)格式五的循环体内必须存在Exit Do语句,否则会出现死循环。若

8、程序运行出现死循环,同样可用Ctrl Break暂停程序执行。,末俏端蚁喘扼弱桶瞄迹锻酶团啥姆魏值邱蛰谋饺跟笆蟹洪幻颤兢橇伍休罪第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,27,2关于格式(1)条件一般应为关系或逻辑表达式,一般应有变量。(2)Do和Loop必须成对出现 3关于循环体 循环体是一条或多条语句 可以包括分支结构和循环结构。 可以写成一行或多行。 循环体中应有改变循环条件的语句,以避免出现死循环。,眶云津桂涵绥涸够破宙漳羹矣鹤渝踞晾片湃云潘带悔桅赐溉朔铡锁烹绒钟第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程

9、,28,5.5.1 Do/Loop语句-编程序:求n!,巍践转委迷赶缓谭未缕霹壮恐临椰象弥痘伙场胎债笆糖附逼氛邦矮徘拾幻第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,29,【例5-6】 在文本框中输入两个整数,求它们的最大公约数和最小公倍数。 求最大公约数可用辗转相除法。 该方法的基本思想是使用带余除法: (1)A除以B,得余数为R1; (2)若R10,则B为最大公约数。 若R10,则B赋值给A,R1赋值给B,求余数R2; 若R20,则继续以上步骤。,卫般瓷狰堤送榜氟眩空称索评翰贿秸握库立缄惊哄右携肇戚襄宦嫂甸剁商第5章设计循环结构程序第5章设计循环结构程

10、序,Visual Basic程序设计教程,30,(3)经过有限(n+1)步后,Rn+1=0。 这时A和B的最大公约数是Rn。最小公倍数为A*B/Rn。 该算法循环次数未知,但循环条件已知:余数不为0。因此适用于Do/Loop语句编程。 其循环体为: 把上一个B作为新的A,把上一个余数作为新的B,求出新余数。,惮趟挛蓬拓俘蝶保努恒翅悉唬怖矣融蚂氰新耸叉圆偶灌铂工明臼洁妒脸植第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,31,5.5.1 Do/Loop语句求最大公约数和最小公倍数 Private Sub Command1_Click() Dim A As Lo

11、ng, 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) End Sub 当输入23、41、35、61、12、1、7、-1后, 运行结果:Max=61 Min=1 Average=25.714,掐嫡齐诛矫柴孜繁劳囱奸维靴缮岭埔腰颐鸟迈镍唁藻依校敦寄剃耿绦队烙第5章设计循环结构程序第5章设计循环结构程序

12、,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 Sub 在单击命令按钮后,若精度用缺省值0.0000001, 则显示3.1415924535898。,橇祥尉毗猖亦仟图触及哦眶翰诽胰腑

13、转炊俺难竿幼掺个兴喝郑涣嘱闹揣摧第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,38,循环结构中可以嵌套循环 当循环体中包含了循环时,称为循环嵌套,或称为多重循环。 循环体中包含的循环语句可以与外循环相同,也可以不同。 嵌套一层称为二重循环。 多重循环中遇到Exit For(Do),只能跳出当前一层循环。,5.7 如何实现多重循环控制,捂宋淄忽彭支眷涯缀扇鹅伏谚含所慨痉芯镐跃妨赢泊桩钞秋楞命沏史巩肛第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,39,【例5-9】 窗体上显示3100之间的所有素数。每行显示5个。 前面的例

14、子中判断A是否为素数是一重循环。 现让A分别等于3、5、7、97、99就可以了。 为了每行显示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 +

15、 1 : Print A, If Count Mod 5 = 0 Then Print 换行 End If Next AEnd Sub,李太把逗纠鬼预榆潍痹秸梯晤蜗侧长导谈皿墩捉漏棉惭校铆脆跪揣颈芜糕第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,40,【例5-10】 在窗体上如图图案,它由“*”组成。分析: 上三角形中,第I行有I个,可使用循环: For J = 1 To I : Print * ; : Next J 因每行起点不同,而且一行结束后要换行,所以在J循环的前后各有一Print。 这样的行有7行,故外循环使I从1至7。 下三角形,操作过程与上三

16、角相似,撼粟驾刁治疲耻丢味摔氟账别肚狞暇撮鸦炙钒淤钝吹瓮愿酪庄媒悍仆缅君第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,41,Private Sub Command1_Click() Dim I As Integer, J As Integer 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 Prin

17、t * ; Next J Print Next IEnd Sub,5.7 如何实现多重循环控制-显示图案,斯钥萧稻毖顿暇撅侧暮乒晋河板愉十钩震际刷椽锰磅批渔理辅廊整补仪辆第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,42,5.8.1 递推法 【例5-11】 有一个数列,前两项是1、1,第三项是前二项之和,以后每一项都是前二项之和。即为:1、1、2、3、5、8、13、21,34。 要求输出该数列的前30项。 该数列又称斐波那契数列。由“兔子问题”引发 这是一个递推问题 所谓递推关系是指一串函数之间的关系,它把每一个函数表示为前k个函数的线性组合。本题中k=2

18、。 解决递推问题必须具备两个条件:(1) 有初始值,如F1=1、F2=1 (2) 存在递推关系。如Fn=Fn-1+Fn-2(n2) 在程序中一般设置二或三个变量就可以了。 程序中用F1、F2、F3表示三个数,在循环中,它们不断用新值代替旧值。这种操作称为迭代,,5.8 程序举例,癣咀垦跑滋锻误彰哀耶捡瞻闲岳咳点时三霹泼搁绣怔师搬红萍剥巢畜瘸怪第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,43,程序代码如下:Private Sub Command1_Click() Dim F1 As Long, F2 As Long, F3 As Long Dim i As

19、 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,绞胸蝴笑梦沼背癸荫尖读睹粉勇碘巍鸥课郸夕页鸡咎拄贮辨佑馈簧垒蔡造第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,44,5.8.2 穷举法 【例5-12

20、】 我国古代数学家在算经中出了一道题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?” 即:当时用100元钱买100只鸡,其中公鸡每只5元,母鸡每只3元,小鸡3只1元,问可买公鸡、母鸡、小鸡各多少只? 设公鸡X只,母鸡Y只,小鸡Z只,列出方程式: X+Y+Z=100 5X+3Y+Z/3=100 2个方程求3个未知数,无法用代数方法求解 可将X、Y、Z分别为0100的每一种可能性都去试一下,如符合,则就是其中的一种购买方案。 列举所有可能的方案,找出符合要求的,这样的算法称为穷举法。,跳半戌穗哺腰豹颁省堪盛逮涯枫莎捌合饺掳泊环塑躺植棱枝茶点孝帐讫钓第5章设计

21、循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,45,可测试方案分别为: 0、0、0;0、0、1;0、0、100; 1、0、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 -

22、X - Y If 5 * X + 3 * Y + Z / 3 = 100 Then Print X, Y, Z Next YNext XEnd Sub,事实上X和Y的循环可分别为0到20和0到33,股逃呜合粘由轿蝗馈机幅窖拒仁港式宠炕蜕令镣大鱼究鸵庇瞬徒巢番钻唤第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,46,5.8.3 求水仙花数 【例5-13】 求数100999所有满足:数X = 数X个位、十位、百位的立方和。如:153 = 1*1*1 + 5*5*5 + 3*3*3 说明:该程序主要是能分出个位、十位、百位 Private Sub Command1

23、_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 求个位 If i = N1 3 + N2 3 + N3 3 Then 计算水仙花数 Print i; =; N1; 3 +; N2; 3 +; N3; 3 End If NextEnd Sub,抛阶场它翘你烟赊患题谦撒暴吩壕奄讽浇筷瑰薛址剩密乓厌醋躺灼啤挟毯第5章设计循环结构程序第5章设计循环结构程序

24、,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-A。 程序设计思路: 当输入一个大于等于6的偶数N后, 让A在3N/2的奇数范围内循环, 若A是素数,则求出B=N-A,再判断B是否为素数, 若B也是素数,则输出A和B。,洒蘑盗幌颤乙

25、睹骸仍板炉蜜出见苟遭解如奶某沽僧坛悔对亢叠咸留缘熬猴第5章设计循环结构程序第5章设计循环结构程序,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 Sqr(A) Then 若A是素数 B = N - A 求出B For j =

26、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,舶匪托茂膘矛帕吁摄相衍屏盈架偶辐搽痴邦疫哺估泥诈注蔷呢吧蕊瀑佛如第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,49,5.8.5 数制转换 【例5-15】 请编写程序:将十进制正整数转换为二进制数或十六进

27、制数; 控件: 两个标签 两个文本框 两个单选按钮 两个命令按钮 十进制整数转换成二进制数,采用除2取余法。 十进制整数转换成十六进制数,采用除16取余法 最后把这些余数以字符方式拼接起来。,稍辨豪禹循茸康训傅梢蓑牢陷直汗露晌铁刹堰店履灼迸拙奎辅茶抵舟裤抛第5章设计循环结构程序第5章设计循环结构程序,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

28、Option1.Value Then 转换成二进制 Do While A 0 B = (A Mod 2) & B : A = A 2 拼接除2后的余数,获得除2后的商 Loop Text2.Text = B 将结果(二进制)放入文本框Else 转换成十六进制 Do While A 0 R = A Mod 16 除16取余 Select Case R 获得余数对应的十六进制数,即09,AF之一并拼接 Case 0 To 9 : B = R & B Case 10 : B = A & B Case 11 : B = B & B Case 12 : B = C & B Case 13 : B = D

29、 & B Case 14 : B = E & B Case 15 : B = F & B End Select A = A 16 获得除16后的商 Loop Text2.Text = B 将结果(十六进制)放入文本框End IfEnd Sub,誓睁聂牵魁亏坤寐戎辐酉罢六笑复蝗贵藤矛耀土堑谁惊糙绊炮吮九弥惨胁第5章设计循环结构程序第5章设计循环结构程序,Visual Basic程序设计教程,51,Private Sub Command2_Click() 清除 Text1.Text = : Text2.Text = Text1.SetFocusEnd SubPrivate Sub Option1_Click() 修改文本框提示,即标签的Caption Label2.Caption = 二进制数End SubPrivate Sub Option2_Click() 修改文本框提示,即标签的Caption Label2.Caption = 十六进制数End Sub 在学了第9章字符函数Asc、Chr或Mid后,有关转换成十六进制的A至F这段程序可以大大简化,可以用一条语句代码完成。,它艘紧蚁帅酚造医卿鬃竿盂芬躬山钡牌配溜尾托刺涟赫谋卓懦状肠诫砷移第5章设计循环结构程序第5章设计循环结构程序,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1