第6章 循环结构程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• • • • • • • • • • • • • • • • • • • • • • • •
“计算”命令按钮Command1的Click事件代码还可以改为直到型: Private Sub Command1_Click() Dim s As Integer, n As Integer s = 0: n = 1 Do Until n > 100 ' 直到型循环 s=s+n n=n+1 Loop Text1.Text = s Text1.Locked = True End Sub 该事件代码还可以利用Exit Do来编写: Private Sub Command1_Click() Dim s As Integer, n As Integer s = 0: n = 1 Do s=s+n n=n+1 If n > 100 Then Exit Do ' 跳出循环 Loop Text1.Text = s Text1.Locked = True End Sub 程序运行结果如图6-3所示。
6.1 Do...Loop循环语句
Do...Loop循环语句包括前测型Do...Loop循环和后测型Do...Loop循环。
• 6.1.1 前测型Do...Loop循环 • 前测型Do...Loop循环结构首先判断条件,根据条件决 定是否执行循环体,执行循环体的最少次数为0。 • 其语法为 • Do [{ While | Until }〈条件〉] • [〈语句列1〉] • [Exit Do] • [〈语句列2〉] • Loop
例6.6 编程计算前N个自然数之和。 题目分析: 设用变量S存放累加值,变量k作为循环变量,根据题义: 则计算s=1+2+3+…+N。此题的流程图如图6-8所示。 可以设计一个窗体Form,通过其单击事件Click()来运行程序。根据流程图给出代码如 下: Private Sub Form_click() Dim s As Long Dim k As Integer, N As Integer s=0 N = InputBox("请输入一个正整数:", " 输入", 10) For k = 1 To N s=s+k k=k+1 Next k Form1.Print "s=", s End Sub
第6章 循环结构程序设计
6.1 6.2 6.3 6.4 Do...Loop循环语句 For…Next循环 循环嵌套 算法举例
和顺序结构、选择结构一样,循环结构是结构化程序设计的三种基本结 构程序结构之一。在程序设计中,把重复执行一组指令或程序段的操作称为 循环操作。 多数情况下,应用程序中会碰到需要反复不断处理的事务,计算机的真正 威力正在于它能够不厌其烦的高速完成重复性的运算。VB中提供了重复执行 某段程序的机制,我们称之为循环语句。本章将讨论循环语句的各种形式和 用法。
该题的运行结果如图6-9所示。 图6-8 流程图
图6-9 运行结果
6.3 循环嵌套
在学习选择结构时就知道,当选择结构中满足或不满足条件的语句组又是一个选择 结构时,称为选择嵌套。同样,当循环的循环体又包含一个循环结构,这种形式称循 环嵌套。根据嵌套循环的层数不同,可以有二重循环、三重循环等。 多重循环的执行过程是:外层循环每执行一次,内层循环就要从头开始执行一轮。 下面通过两个例子说明循环嵌套的使用和执行过程。 例6.7 打印九九乘法口诀表(如图6-10所示)。
• • • • • • • • • •
• 图6-2 建立用户界面 Private Sub Command1_Click() Dim s As Integer, n As Integer s=0:n=1 ' 累加器赋初值0,计数器赋初值1 Do While n <= 100 ' 当型循环 s=s+n ' 累加 n=n+1 ' 计数 Loop Text1.Text = s Text1.Locked = True End Sub
If n <= 0 Or m <= 0 Then ' 数据不在范围内,程序结束运行 MsgBox "数据出错!" ' 消息框提示数据出错 Unload Me End If If m < n Then ' 使得大数在前 t = m: m = n: n = t End If Do ' 求最大公约数 r = m Mod n m=n n=r Loop While r <> 0 ' 当r<>0时辗转相除 Text3.Text = m ' 输出结果 End Sub 程序运行结果如图6-5所示。
例6.3 目前世界人口约为60亿,如果以每年1.4%的速度增长,多少年后世 界人口达到或超过70亿。请编写程序。 题目分析: 设r为增长率,p为原有的人口数,所以每一年增长后的人口数 可用公式p=p*(1+r)计算。因为不知到需多少年后世界人口达到或超过70亿,即 循环的次数未知,所以可用Do Until Loop语句编写程序。 可以设计一个窗体Form1的单击事件Click()来运行程序,代码如下: Private Sub Form_Click() Dim p As Double Dim r As Single Dim n As Integer p = 6000000000# r = 0.014 n=0 Do Until p >= 7000000000# p = p * (1 + r) n=n+1 Loop Print Print n; "年后世界人口达到:" Print " "; p / 100000000; "亿" End Sub 该题的运行结果如图6-4所示。
图6-10 运行结果 分析:打印九九乘法口诀表,输出9行,每行输出9列,表中的每个数是所在行和列的 乘积,因此,只需利用循环变量作为乘数和被乘数便可实现,代码如下: Private Sub Form_Click() Print Tab(30); "九九乘法口诀表" Print Tab(30); String(14, "*")
图6.5 用户界面及程序运行结果 6.1.2 后测型Do...Loop循环 后测型Do...Loop循环结构首先执行循环体,然后判断条件,根据条件决定是否继 续执行循环,因此执行循环的最少次数为1。 其语法为: Do [〈语句列1〉] [Exit Do] [〈语句列2〉] Loop [{While | Until} 〈条件〉] 例6.5 输入两个正整数,用“辗转相除法”求它们的最大公约数。 设计步骤如下: (1) 建立应用程序用户界面并设置对象属性,如图6-6所示。 (2) 编写事件代码。命令按钮的Click事件代码为 Private Sub Command1_Click() Dim m As Integer, n As Integer m = Val(Text1.Text) n = Val(Text2.Text)




(1) 循环条件为循环测试条件,可以是关系表达式、布尔表达式或数值表 达式。如果是数值表达式,则非0为真,0为假 (2) 循环执行过程是:当条件成立时,执行循环体;当条件不成立时,退 出循环,执行Loop之后的语句。其流程图如图6-1所示。 循环前语句 使用Do While…Loop循环时应注意如下问题: ①循环体中必须有一条语句改变循环控制变量的值, 使得在某一时刻循环变量不满足循环测试条件而退 假 循环条件 出循环; 真 ②若循环体中加入“Exit Do”语句,程序只要运行到 这条语句,循环会立即终止,去执行它所在的循环 循环体语句 语句之后的语句。“Exit Do”语句称为强行终止Do循 环语句。 循环后语句 例6.1 用Do...Loop语句求1 + 2 + 3 + ... + 100的值。 设计步骤如下: (1) 建立应用程序用户界面并设置对象属性, 图 6-1 前测试循环结构流程图 如图6-2所示。 (2) 编写事件代码。采用当型循环结构编写“计算”命令按钮Command1 的Click事件代码为:
Fox-Next语句的功能就是控制“循环体”有限次的重复执行。在知道要执行的循环次 数时,最好使用Fox—Next语句。图6-7 说明Fox—Next语句的功能。
图6-7 For—Next语句的功能 当执行Fox语句时,系统对循环变量置初值,同时记下终值和步长。若循环变量 不超越终值,则执行一次循环体,否则跳过循环体执行Next语句下面的语句;当执 行到Next语句时,循环变量增加一个步长,然后与终值比较,若还不超越终值,则 继续执行循环体。如此往复,直到循环变量的值超过终值,则结束循环,执行Next 语句后面的语句。 循环次数=Int((循环终值-循环初值)/步长)+1
图6-4 运行结果 例6.4 设有一张厚为x 毫米,面积足够大的纸,将它不断地对折。试问对折多 少次后,其厚度可达珠穆朗玛峰的高度(8848 m)。 (1) 建立应用程序用户界面并设置对象属性,如图6-5所示。 (2) 编写程序代码。命令按钮Command1的Click事件代码为 Private Sub Command1_Click() n=0 ' 对折次数初值 h = Text1.Text ' 纸的厚度 Do While h < 8848000 n=n+1 ' 累计对折次数 h=2*h ' 对折 Loop Text2.Text = n Text2.Locked = True End Sub 程序运行结果如图6-3所示。
图6-6 求最大公约数
6.2 For…Next循环
对于循环次数已知的循环除了可以用Do while…Loop结构外,一般使用 Fox…Next循环语句。 6.2.1 For…Next的语法 For…Next的语句格式为: For〈循环变量〉=〈初值〉To〈终值〉[Step〈步长〉] [〈语句列1〉] [Exit For] [〈语句列2〉] Next [〈循环变量〉] 说明: (1)“循环变量”是一个必要的参数,用来控制循环的次数。“循环变量”亦称 “循环控制变量”、“控制变量”或“循环计数器”,它只能是一个数值型变量。 (2)“初值”和“终值”都是必要参数,如果没有指定“步长”,则缺省值为1。 (3)“步长”可以是正数或负数。“步长”决定循环的执行情况:如果“步长”的 值为正数,则“初值”必须小于或等于“终值”;否则“初值”必须大于或等于 “终值”。 (4) 可以在循环体中的任何位置放置任意多个Exit For 语句,当执行到Exit For 语 句时,随时退出本循环。 (5) For 与Next 语句中的循环变量必须是同一个变量,Next中的循环变量可以省 去。 6.2.2 Fox-Next语句的功能
For i = 1 To 9 For j = 1 To 9 Print Tab((j - 1) * 8 + 2); i & "×" & j & "=" & i * j; Next j Print Next i End Sub 在这段程序中,外循环变量i控制输出多少行,内循环变量j控制一行输出多少列,属 于双重循环。执行过程是:外层循环变量i取初值1,内循环就要执行一轮,即内层循 环就要执行9次(j依次取1、2、3、…9),输出“九九乘法口诀表”第1行;接着, 外层循环变量i取2,内循环同样要执行一轮,即循环9次(j再次取1、2、3、…9), 输出“九九乘法口诀表”第2行……,直到输出“九九乘法口诀表”第9行,所以内循 环的循环体共执行9×9次,即81次。 例6.8 模拟一个三位数的计数器。 分析:构造一个三位数的计数器,需要三个变量,其取值范围分别为0~9,。在窗体 上添加3个文本框和1个命令按钮,它们的属性设置放在Form_Load事件中。执行结果 如图6-11所示。代码如下:Private Sub Command1_Click() For i = 0 To 9 For j = 0 To 9 For k = 0 To 9 Text1 = i Text2 = j 图6-11 例6-9运行结果 Text3 = k
百度文库
图6-3 程序运行结果
例6.2求任意数n的阶乘。 分析:计算阶乘要作累积运算,与例6.1相比,只需将前面介绍过的累加变成 即可。累加需要累加器,累加器初值一般为0,累积需要累积器,累积器初值一 般为1。程序界面设计与例6.1类似。程序代码如下: Dim n As Integer, i As Integer, f As Integer n = InputBox(“请输入N的值”) f=1 i=1 Do While i <= n f=f*i i=i+1 Loop Print "f="; f 注意:这里的n不能太大,否则会出现“溢出”错误。因为累积器f的数据类型 为整型,能存放的最大正数为32767,如果要计算的n较大时,可将f的数据类型 改为长整型、单精度型或双精度型。
相关文档
最新文档