版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课题:循环结构教学时间 :授课班级 :教学目标 :学会用 for next 语句和 doloop 编写简单的程序,并会调试它教学重点、难点 :1. For next 语句的用法2. Do-loop 语句的用法3. 循环语句的嵌套教学过程在用计算机处理问题时,除了分支问题外,还有不少是需要重复执行某一组操作的问题。这就要采用 循环结构, VB 中提供了两种语句实现循环结构, For-Next 语句和 Do-Loop 语句。【例 6-6-1】求 s=1+2+3+ +100利用赋值语句可写出如下形式的代码:sum=0sum= sum+1sum= sum+2sum=sum+3sum=sum+100很显
2、然,使用这种形式也能得到结果,但程序很冗长。观察上面的代码可以发现,这段代码实际上重 复了同一个操作:sum=sum+I, 只不过是每次相加的自然数不同而已。 使用 VB 提供的循环语句可以很容易 实现这种重复操作功能。具体算法如下:设 sum=0;设 i=1; 若 i<=100则转, 否则算法停止, 最后 sum 中的数值即是自然数列前 100项之和;将 sum 与 i 相加,其结果送给变量 sum ,即 sum+i sum ;使 i 值增加 1,即 i+1 i ;转。流程图如图 6- 23,程序及运行结果如下:' 求 1、 2、 3、 100之间自然数的和Private Su
3、b Form_Click(Dim i As IntegerDim sum As Integersum = 0For i = 1 To 100sum = sum + i ' 循环体图 6-23Next i Print "sum=" sum End Sub 运行结果为: sum= 5050 一、 For.Next 循环这个程序中使用的是 For.Next 循环,它的一般形式是:For 循环变量 =初值 To 终值 Step 循环变量增量 循环体Next 循环变量循环变量的初值、终值、循环变量增量都是数值型。其中要重复执行的操作称为循环体,增量可正可 负,如果没有设置 S
4、tep ,则增量的缺省值为 1。For-Next 循环的执行过程是: 循环变量取初值;循环变量与终值比较,没有超过终值转,否则循环结束,接着执行循环语句的后继语句; 执行一次循环体; 循环变量增加一个增量; 重复步骤。从上看出, For-Next 循环变量是一种当型循环, 图 6-24是它的执行过程。说明: For语句与 Next 语句必须成对出现, 而且它们当中 的“循环变 量”必须是同一个变量,如本例中均为 i ; 当循环变量增量为正时, 循环变量超过终值, 是指 循环变量的 值大于终值,若为负,则是指循环变量的值小于终值。 图 6-24 从例 6-6-1程序的流程图和 For-Next
5、循环的 招 待 过 程 可 以看出,执行 For-Next 循环时,先判断循环变 量 是 否 超 过 终值, 如果没有超过终值, 就执行循环体, 这种 循 环 称 为 当 型循环,它的一般结构如图 6-25所示。循环体 A 执行有限次 后,条件 P 不再成立,从而退出循环。图 6-25讨论与思考: 本例中循环结束时,循环变量 i 的值是多少? 若有如下一段代码:For j=15 to 3 Step 2PrintjNext j则循环结束时,循环变量 j 的值是多少?循环变量的增量能否为 0,如果为 0,运行结果怎样?【例 6-6-2】设计一个界面如图 6-26所示的程序,要求执行程序后,窗体上的
6、星星在闪烁,单击“结 束”按钮结束程序。 图 6-26为了实现星星闪烁的效果,本例设置了一个定时器控件,窗体启动后,每隔 500ms 触发一次 Timer 事 件, 在该事件中使用循环语句随机产生 50个坐标值, 然后用窗体的 Pset 方法在这些坐标处画点, 窗体上出 现星星的效果, 在 Timer 事件的开头, 使用 Cls 方法清屏, 以产生闪烁效果。 完成本程序需要在设计阶段设 计的属性如表 6-11。表 6-11缺省的对象名 设置的对象名 属 性 设置值Caption 星星闪烁BackColor 黑色ForeColor 黄色Caption 结束程序代码如下:星星闪烁Dim xpos
7、As Integer, ypos As IntegerDim i As IntegerPrivate Sub Form_Load(tmrAnimation.Enabled = TrueRandomizeEnd SubPrivate Sub tmrAnimation_Timer(清屏,产生闪烁效果ClsFor i = 1 To 50xpos = Int(frmCircle.Width * Rndypos = Int(frmCircle.Height * RndPSet (xpos, yposNext iEnd SubPrivate Sub cmdEnd_Click(EndEnd Sub二、 Do
8、.Loop 循环For-Next 循环的次数是确定的,有的问题只知道循环结束的条件,重复执行的次数事先并不知道,这 时需用 Do-Loop 循环。格式一:Do While 条件循环体Loop当 VB 执行 Do While -Loop循环时,先判断指定的条件是否为真,若条件为真,执行循环体,条件为 假时退出循环。这也是一种当型循环。【例 6-6-3】设计一个界面如图 6-27所示的程序,从键盘输入任意两个正整数 a 、 b ,输出它们的最大 公约数。 图 6-27本程序运行时,通过单击“计算”按钮在“最大公约数”框中显示 a 与 b 的最大公约数,因此,求最 大公约数的代码就编写在“计算”按钮
9、的 Click 事件中。完成本程序界面需要设置的属性如表 6-12。 表 6-12缺省的对象名 设置的对象名 属 性 设置值Form1 frmDivisor Caption 最大公约数Caption 输入 ACaption 输入 BCaption 最大公约数 Text (空白 Text (空白 Text (空白 Caption 计算 Caption结束求两个正整数 a 、 b(a>b的最大公约数的算法见例 6-1-3,流程图见图 6-3,程序代码如下: 求最大公约数Private Sub cmdCalcu_Click( Dim a As Integer Dim b As Integer
10、Dim r As Integer a = Val(txta.Text b = Val(txtb.Text r = a Mod b Do While r <> 0 a = b b = rr = a Mod b LooptxtDivisor.Text = Str(b End SubPrivate Sub cmdEnd_Click( End End Sub 格式二:Do循环体Loop Until 条件这种循环的执行过程如图 6-28所示,进入循环后,先执行一次循环体 A ,然后再检查条件是否成立, 如果不成立,就执行循环体 A ,直到条件 D 成立,退出循环。这种循环结构称为直到型。 【
11、例 6-6-4】 如果我国人口以每年平均 1.5%的速度增长,问多少年后我国人口达到或超过 15亿,设现在人口为 12.3亿。解决这个问题的思路是:设现在人口为 p 0=12.3亿, 人口增长率 r=1.5%=0.015, 则一年后人口为 p 1=p0+p0×r=p0×(1+r,看它是否达到或超过 15亿;如果未达到,再算二年后的人口 p 2=p1+p1×r=p1×(1+r;如果 未达到,再计算三年后的人口,直到 n 年后的人口数达到或超过 15亿。流程图见图 6-29,程序代码如下:直到型循环Private Sub Form_Click(Dim pAs
12、 SingleDim rAs SingleDim nAs Integer图 6-29p = 1230000000#n = 0Dop= p * (1 + rn = n + 1Loop Until p >= 1500000000#Print n; " 年后 ", "人口 =" pEnd Sub运行结果如下;14年后 人口 =1.51506E+09三、循环的嵌套在一个循环中又完整地包含另一个循环, 称为循环的嵌套。 前面介绍的几种类型的循环可以互相嵌套, 例如可以在一个 For-Next 循环中包含另一个 For-Next 循环, 也可以在一个 Do-L
13、oop 循环中包含一个 For-Next 循环。【例 6-6-5 *为解决这个问题,可以采用如下的算法:使用双重For-Next 循环,外循环确定行数和各行起始打印位置,内循环用来确定各行打印的个数。设外循环的循环变量为 i , 内循环的循环变量为 j 。 由于图案上下对称, 上下两半对应行的起始位置和字符个数完全一致,所以 i 的取值也应对称:i=-3 To 3。 设 i=0行的起始打印位置为 5图 6-30用心 爱心 6则第 i 行的起始打印位置为 Tab(Abs(i+5,第 i 行的字符的个数为 2*(4-Abs(i-1。流程图如图 6-30所示, 程序代码如下:打印菱形图案Privat
14、e Sub Form_Click(Dim i As Integer, j As IntegerFor i = -3 To 3Print Tab(Abs(i + 5; 确定每行的起始位置For j = 1 To 2 * (4 - Abs(i - 1Print "*"Next jPrint 换行Next iEnd Sub【例 6-6-6】求 3到 100之间的全部质数。质数是除了 1和它本身之外,不能被其它任何整数整除的大于 1的自然数。要验证一个自然数 n 是否为质数,方法很多。我们采用的算法是:一个数 n 是否是质数,只需将 n 被 2都除不尽, n 就是质数。图 6-31
15、先计算出 k= ,然后将 n 被 i=2Flag 是个 “标志变量” , 初始时 Flag=0,表示 n 未被任何一个整数整除, 如果在某一次 n 被一个整数 i 整除,则 Flag 改变为 1,表明该数不是质数。如果 n 不被任何一个 i 整除, 则 Flag 始终保持为 0。 因此,在结束循环后根据 Flag 的值为 0或 1, 来判断一个数是否为质数。 nnNn<=100Y求 3到 10之间的全部质数NPrivate Sub Form_Click(Dim n As Integer, i As Integer YNDim flag As IntegerYDim kAs Integer
16、For n = 3 To 100 Step 2k = Int(Sqr(ni = 2flag = 0NDo While i <= kIf n Mod i = 0 Then Yflag = 1 n 能被某一个数整除End Ifi = i + 1LoopIf flag = 0 Then Print nNext n 图 6-31End Sub用心 爱心 专心 7运行结果为:3 5 7 11 1317 19 23 29 3137 41 43 47 5359 61 67 71 7379 83 89 97说明:由于偶数决不会是质数,不必对偶数进行测试,因此外循环的增量为 2;内循环中 n Mod i=
17、0中的 Mod 为取余运算,若 n 能被 i 整除,则余数为 0;实践与探索请考察程序的内循环部分,如果 n 是一个质数,如 n=11,则内循环结束时,标志变量 flag 的值仍为 0; 如果 n 不是一个质数,如 n=63,则进行第二次循环时, n 能被 3整除,此时 flag 的值为 1,已经可以判断 出 n 不是质数,但程序中的内循环仍然要执行 6次,程序的效率不高。请问该如何修改程序,当 flag 的值 为 1时直接结束循环。练 习 比较三种循环结构: For-Next、 Do While-Loop、 Do-Loop Until,指出各在什么情况下使用? Do While-Loop与
18、Do-Loop Until 之间又有什么区别? 写出下列程序的执行结果。 Private Sub Form_Click(Dim x As IntegerDim n As Integern = 0For x = 3 To 11 Step 2n = n + 1Print "x =" xNext xPrint "n=" nPrint "x=" xEndSub Private Sub Form _Click(Dim a As IntegerDim b As IntegerDim c As Integera = 1: b = 1: c = 1D
19、o While a + b + c <= 10a = a + 1b = b * 2c = b / 2用心 爱心 专心 8LoopEnd Sub Private Sub Form _Click(Dim x As IntegerDim y As Integerx = 3y = 77DoPrint xLet x = x + 2Loop Until x > Sqr(yEndSub Private Sub Form _Click(Dim k As IntegerDim t As IntegerDim s As Integers = 0: t = 1For k = 2 To 4s = s +
20、kt = t * kNext kPrint "s=" s, "t=" tEndSub Private Sub Form _Click(Dim a As IntegerDim b As IntegerDim c As IntegerDim s As IntegerDim i As Integera = 2: b = 1: s = 0For i = 10 To 6 Step -1s = s + ac = a + ba = bb = cNext iPrint "s=" sEndSub Private Sub Form _Click(Dim iAs IntegerDim jAs IntegerDim yAs IntegerDim sAs Integers = 1: y = 1For i = 2 To 4用心 爱心 专心 9y = y * jNext js = s + yNext
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冀少版八年级生物上册第五单元第二节食品保存技术课件
- 探险宾馆安全活动规则
- 电子产品卖场租赁联营协议
- 住宅小区物业管理租赁合同
- 离婚协议书中退休金处理
- 电子电器印刷质量评估准则
- 烘焙店设备安装合同
- 汽车销售广告施工合同文本格式
- 人力资源项目薪资激励策略
- 保险业用电合同管理规定
- 项目部单机油耗分析报告
- 基于Android的天气预报系统的设计与实现
- (完整)中医症候积分量表
- 小学奥数 等量代换(含答案)
- 绘制进度计划横道图
- 物联网技术在军事上的应用与现代战争教案
- 科技畅想未来主题班会 课件
- 常州高级中学2022-2023学年高一上学期期中质量检查物理试题(解析版)
- 简爱英文版课件
- 《员工心理健康》课件
- 北京市丰台区2023-2024学年七年级上学期期末数学试题
评论
0/150
提交评论