第4章 基本算法和流程控制
更新时间:2023-05-17 07:03:01 阅读量: 实用文档 文档下载
- 第4章一元一次方程推荐度:
- 相关推荐
第 4 章 基本算法和流程控制
本章主要介绍基本的算法、Visual Basic 语言的流程控制语句,包括 If 语句、Select Case 语句、 For Next 语句、While Wend 语句和 Do Loop 语句等。
4.1 基本算法
对计算机编程语言来说,算法是用于求解某个特定问题的一些指令的集合。具体地说,用计算机所能 实现的操作或指令,来描述问题的求解过程,就得到了这一特定问题的计算机算法。
4.1.1 算法和算法的描述方法
1.什么是算法
一般来说,所谓算法是指解决一个特定问题采用的特定的、有限的方法和步骤。例如,计算 6!的步 骤是: 计算 1×2 的值为 2→计算 2×3 的值为 6→计算6×4 的值为24→计算 24×5 的值为 120, →计算 120 ×6 的值为 720,即 6!=720。
利用计算机来解决问题需要设计程序,在设计程序前要对问题进行充分的分析,设计解题的步骤与方 法,也就是设计算法,然后根据算法设计程序。例如,计算 6!的值,上面已给出了计算的步骤,要实现上 述计算,需用变量 SUM 存放初值 1,以后存放每次乘积的值和最后的计算结果,用变量N 存放初值 0,用 N=N+1 使 N 依次取整数 1、2、3、4、5 和 6,用 SUM=SUN*N 完成每次的乘法运算。根据上述算法,设 计计算 6!的程序代码如下。
SUM=1:N=0
N=N+1:SUM=SUM*N N=N+1:SUM=SUM*N N=N+1:SUM=SUM*N
N=N+1:SUM=SUM*N N=N+1:SUM=SUM*N N=N+1:SUM=SUM*N Print "6!= " SUM
如果使用上述算法计算 15!值,会使程序冗长而繁琐,这显然不是一个好算法。考虑到程序中多次使 用 N=N+1 和 SUM=SUM+N 语句,可使用循环的方法,循环一次执行一次 N=N+1 和 SUM=SUM+N 语句, 一共循环 15 次。如果是求 M!,则循环 M 次。产生循环的方法可以使用两个时钟控件对象。一个 Timer1 时钟对象的 Interval 属性值设置为 100ms, 每隔 100ms 触发一次, 执行一次N=N+1 和 SUM=SUM+N 语句。 再用一个Timer1时钟对象, 它的Interval属性值设置为M*100ms, 每隔M*100ms触发一次, 触发后使Timer1 时钟对象停止工作,即设置 Timer1 时钟对象的 Interval 属性值为 False。
由此可见,解决同一问题的算法可以有多种,应设计简单、明了,步骤尽量少的算法,这样编写出来 的程序才能短小、精练、易读。
2.算法的描述方法
算法有许多描述方法,例如前面所用的方法是自然语言法,即使用人们日常使用的语言描述解决问题 的步骤与方法。这种描述方法通俗易懂,但比较繁琐,且对条件转向等描述欠直观。针对自然语言法描述 的缺点,又产生了流程图法、NS 图法和 PAD 图等方法。计算机的算法有数值型运算算法和非数值型运算 算法。例如,前面提到的计算 M!的算法就属于数值型运算算法;而进行数据检索、分类、排序和计算机
91
绘图、制表等都属于非数值型算法。
(1)流程图:它是一种用图形来表示算法的描述方法。它通过各种几何框图和流程线来描述各步骤 的操作和执行的过程。这种方法直观形象、逻辑清楚、容易理解,但它占用篇幅大,流程随意转向,较大 的流程图不易读懂。对于初学者和编写较小的程序时,可采用流程图的方法。流程图规定的几何图形如表 411所示。
表4-1-1 流程图规定的几何图形
(2)NS 图:它是 1973年美国科学家 Nassi 和 Shneid erman B 首次提出的一种描述算法的图形方法。 NS 图形方法完全去掉了流程线,全部算法写在一个矩形框内,总框内包含其它的功能框。
(3)PAD 图:PAD 是英文 ProblemAnalysisDiagram 的缩写,其原意是问题分析图。它是近年来在软 件开发中被推广使用的一种描述算法的图形方法。它是一种二维图形,从上到下按各框图功能顺序执行, 从左到右表示层次关系。这种描述算法的方法,层次清楚,逻辑关系明了,在有多次嵌套时,不易出错。
4.1.2 三种程序控制结构
博姆(bohm)和雅可比尾(Jacopini)两位学者于 1966 年提出程序有三种基本结构:顺序结构、选择 结构和循环结构。这三种基本结构都具有只有一个入口和一个出口的特点,不会出现死循环。
VB 虽然采用面向对象的编程方法,但它还采用了事件驱动调用相对划分得比较小的过程子过程。对 于具体的过程本身,仍然要用到结构化程序的方法,用控制结构来控制程序执行的流程。
1.顺序结构
顺序结构是一种线性结构,也是程序设计中最简单、最常用的基本结构。顺序结构程序是把计算机要 执行的各种处理依次排列起来。程序运行后,便从左至右、自顶向下地顺序执行这些语句(一个语句行中, 从左至右顺序执行各条语句),直至执行完所有语句行的语句或执行至 End 语句止。一个程序通常分为 3 3 种描述方法绘制的顺序结构图如图 411 所示。
(a)流程图 (b)N-S图 图411 顺序结构
(c)PAD图
2.选择结构
选择结构是一种常用的主要基本结构,是计算机科学用来描述自然界和社会生活中分支现象的重要手 段。在实际工作中,常常需要根据某个条件是否成立,来决定下一步应做什么工作。设计程序让计算机工 作,同样存在这种情况。在这种情况下,程序不再按照行号的顺序来执行各语句行的语句,而是根据给定 的条件来决定选取哪条路径,执行哪些语句。选择结构的特点是:根据所给定选择条件为真(即条件成立) 与否,而决定从各实际可能的不同操作分支中,选择执行某一分支的相应操作,并且任何情况下均有“无 论分支多少,仅选其一”的特性。使用上面介绍的 3种描述方法绘制的选择结构图如图 412
所示。
(a)流程图 (b)NS图 图412 选择结构
(c)PAD图
3.循环结构
在设计程序让计算机工作时,常需要在某个条件成立时反复执行某段程序或某条语句,直到条件不成 立后才停止这种重复工作。 这类的程序结构叫循环结构。 循环结构又分为当型循环结构与直到型循环结构, 前者是先进行条件判断,再执行程序段或语句;后者是执行一次要重复执行的程序段或语句,再进行条件 判断。使用上面介绍的 3 种描述方法绘制的循环结构图如图 413
所示。
(a)流程图 (b)NS
图
(c)PAD图 图413 循环结构
4.2 选择结构语句
在 Visual Basic 6.0语言中,实现选择结构的语句有:If Then Else(单选择双分支)、If Then Else lf(多选择多分支)、Select Case(多分支开关)语句。条件语句的功能都是根据表达式的值是否成立, 有条件地执行一组语句。
4.2.1 If Then Else 语句
1.单行式 If Then Else 语句
【格式】If 条件 Then 语句组 1 [Else 语句组2]
【功能】格式中的“条件”可以是关系表达式表达或逻辑表达式。当条件成立(即其值为 True)时, 执行“语句组 1”的各条语句;当条件不成立(即其值为 False)时,执行“语句组 2”的各条语句,如果 没有“Else 语句组 2”选项则不执行。然后再执行其后的语句。
【说明】
(1)语句组中的语句可有多条,各条之间应用冒号分隔。
(2)格式中的“条件”可以是数值表达式和数值形式的字符串表达式,当它们的值为非零的数(例 如,123)或由非零的数组成的字符串(例如,"a string")时,执行“语句组 1”的各条语句;当它们的 值为 0 或由0 的数组成的字符串(例如,0、"0")时,执行“语句组 2”的各条语句。
【举例 1】设计一个程序如下。程序运行后,调出“输入数”对话框,要求输入一个数,如图 4-2-1 所示。输入数后单击“确定”按钮。当该数为偶数时(此处输入 10),显示“是偶数” ,如图4-2-2 所示; 当该数为奇数时(此处输入 11),显示“是奇数” ,如图 4-2-3 所示。程序代码如下。
Private Sub Form_Activate()
X = V
al(InputBox("
请输入数:
", "输入数", 0, 600, 120)) If X Mod 2 = 0 Then Print "是偶数" Else Print "是奇数" End Sub
图421 程序运行结果 图422 输入偶数的结果 图423 输入奇数的结果
2.区块式 If Then Else 语句 【格式】 If 条件 Then 语句序列 1 [Else 语句序列 2] End If
【功能】当条件成立时,执行“语句序列 1”的各条语句;当条件不成立时,执行“语句序列 2”的 各条语句,如果没有“Else 语句序列 2”选项则不执行,然后执行 End If后面的语句。
【说明】 “语句序列1”和“语句序列 2”可以由一个语句行或多个语句行组成。在书写代码的习惯上, 常把夹在关键字 If、Then 和 Else 之间的语句序列以缩排的方式排列,这样会使程序更容易阅读理解。
【举例 2】采用 If Then Else If 语句设计上面的例子如下。 Private Sub Form_Activate()
X = Val(InputBox("请输入数:", "输入数", 0, 600, 120)) If X Mod 2 = 0 Then Print "是偶数" Else
Print "是奇数" End If End Sub
4.2.2 If Then Elself 语句
无论是单行式还是区块式的 If..Then..Else 语句,都只有一个条件表达式,只能根据一个条件表 达式进行判断,因此最多只能产生两个分支。如程序需要根据多个条件表达式进行判断,产生多个分支时, 就需要使用 If..Then..Elself 语句。
【格式】 If 条件 1 Then 语句序列 1 [Elself 条件 2 Then 语句序列 2] ...... [Else 语句序列 n] End If
【功能】当条件 1 的值为 True时,则执行语句序列1;当条件 1 的值为 False 时,则再判断条件 2 的 值,依次类推,直到找到一个值为 True 的条件为止,并执行其后面的语句序列。如果所有条件的值都不 是 True,则执行关键字Else 后面的语句序列
n。
无论哪一个语句序列,
执行完后都接着执行关键字 End If 后面的语句。
【说明】语句中的“条件”和序列的要求及功能与 If Then Else语句相同。
【举例 3】制作一个“符号函数”程序。该程序运行后的 3 个画面如图 4-2-4 所示。在左边的文本框 内输入一个数值,单击“求符号函数的值”按钮,即可在右边的文本框内显示出相应的数值,其对应关系 符合符号函数的特点:输入大于零的数时输出 1,输入等于零的数时输出0,输入小于零的数时输出-1。
“符号函数”程序的窗体设计和对象属性设置比较简单,由读者自行完成。
图424 “符号函数”程序运行后的3个画面
Private Sub Command1_Click() Dim N As Integer '声明变量N 是数值型 N = Val(Text1.Text) '将 Text1 文本框中的数据转换为数值,并赋给变量 N If N > 0Then '如果N>0 则使 Text2 文本框中显示 1 Text2.Text = "1" ElseIf N = 0 Then '如果 N=0则使 Text2 文本框中显示 0 Text2.Text = "0" Else '否则(即 N<0)使 Text2 文本框中显示1 Text2.Text = "1" End If End Sub
Private Sub Command2_Click()
'在单击“退出”按钮后,退出程序运行 End End Sub
4.2.3 Select Case 语句
If Then ElseIf 语句可以包含多个 Elself 子语句, 这些 Elself 子语句中的条件一般情况下是不同的。 但当每个 ElseIf 子语句后面的条件都相同,而条件表达式的值并不相同时,使用 If Then ElseI 语句设 计程序就会很烦琐,此时可使用 Select Case 语句。
【格式】
Select Case 表达式 [Case 取值列表 1 语句序列 1] [Case 取值列表 2 语句序列 2] ...... [Case Else 语句序列 n] End Select
【功能】计算表达式的值,再将其值依次与每个 Case 关键字后面的“取值列表”中的数据和数据范 围进行比较,如果相等,就执行该 Case 后面的语句序列;如果都不相等,则执行 Case Else 子语句后面 的语句序列 n。无论执行的是哪一个语句序列,执行完后都接着执行关键字 End Select 后面的语句。程序 中的选择结构程序的流程图如图 425 所示。
图425 Select Case语句流程图
【说明】
(1)表达式可以是数值表达式或字符串表达式。
(2)每一个 Case 后面的“取值列表”中的数据是表达式可能取得的结果,其“取值列表”的格式有 以下三种。
◎ 数值型或字符型常量或表达式。 例如, “10” 、 “1,5,7” 、 “Val("n")-5” 、 “S” 、 ““A”,F,E” 、 “Chr(65) & 12”等。其中,认为数字可以是数值或字符,认为字母是变量,只有用引号括起来的字母才会被认为是 字母。
◎ 使用“To”来表示数值或字符常量区间, “To”两边可以是数值型或字符型常量。例如: “1 To 10” 、 [A To D]、 ““A” To ”D””等。注意“To”左边的数值或字符应小于“To”右边的数值或字符。
◎ 使用“Is 表达式”来表示数值或字符串区间。这种方法适用于取值为含有关系运算符的式子,在 实际输入时,加或不加 Is 都可以,光标一旦离开该行,Visual Basic会自动将它加上。例如: “Is>10” 、 “Is>=S” 、 “Is<=”X””等。可以混合使用这三种格式。例如:Case A T0 F,16,30,Is>10。其中,A T0 F 为变量 A 和 F 所表示的数据区间的数据,16 和 30 可以是数值或字符数据,Is>10 为 Is 表达式,表示所 有大于 10 的数据。
(3)如果不止一个 Case 后面的取值与表达式相匹配,则只执行第一个与表达式匹配的 Case 后面的 语句序列。
【举例 4】在窗体内创建一个名成为“Command1”的按钮和一个名成为“Label1”的标签,标签用来 显示输入的数据。单击“Command1”按钮后即可执行下面的程序。在输入不同的数据后,会在窗体中显示 不同的内容。读者可以上机操作,并输入不同的数据,以了解 Select Case 语句的功能,理解“取值列表” 格式的特点。读者还可以修改程序,来进一步掌握 Select Case 语句的功能。程序如下。
Private Sub Command1_Click()
Dim N As String, B, C As Integer '声明变量 FS1 是字符型,B 和 C 变量是数值型 N = InputBox$("请输入字符数据:") '输入一个数据,赋给变量 N Cls:Label1.Caption = N:B = 100: C = 200 Select Case N
Case "A" To "G" '输入打头字母为 A到 G(包括字母 A和 G)的字符串时,输出 1 Print "1"
Case 11, 18, 36, "20" '输入 11、36、20 时,输出 2 Print "2"
Case Val("50") 10 '输入 40 时,输出 3 Print "3"
Case B, C '输入 100 或 200时,输出 4 Print "4"
Case "H", B + C '输入H 或 300 时,输出 5 Print "5"
Case "W" + Chr(65) & 22 '输入 WA22 时,输出6 Print "6"
Case Is > "R" '输入大于 R 字母时,输出 7 Print "7"
Case "X" To "Z",30,50,Is<0 '输入 X 到 Z的字母或30 或 50 或负数时,输出 8 Print "8"
Case Else '输入不符合上述要求的数据时,输出"无符合的数据!" Print "无符合的数据!" End Select End Sub
4.2.4 选择结构的嵌套
选择结构的语句中的“语句序列”可以是一个选择结构语句,这就叫选择结构的嵌套。 【举例 5】“符号函数”程序可以采用选择结构的嵌套方式修改如下。
4.3 循环结构语句
循环结构语句是在某个条件成立时反复执行一段程序,直到条件不成立后才停止执行这段程序, 退出 循环语句。
4.3.1 For Next 语句
1.For Next 语句的格式与功能 【格式】
For 循环变量=初值 To 终值 [Step 步长值] [循环体语句序列] Next [循环变量]
【功能】(1)执行 For 语句时,首先计算初值、终值和步长值各数值型表达式的值,再将初值赋给循 环变量。然后将循环变量的值与终值进行比较,如果循环变量的值没超出了终值,则执行循环体语句序列 的语句,否则执行Next 下面的语句。
(2)执行 Next 语句时,将循环变量的值与步长值相加,再赋给循环变量,然后将循环变量的值与终 值进行比较,如果循环变量的值没超出终值,则执行循环体语句序列的语句,否则执行 Next 下面的语句。
(3)若步长值为正数,则循环变量的值大于终值时为超出;若步长值为负数,则循环变量的值小于 终值时为超出。
【说明】
(1)如果没有关键字 Step和其后的步长值,则默认步长值为 1。
(2)循环变量是数值型变量,初值、终值和步长值都是数值型的常量、变量或表达式,但不能是数 组的数组元素。
(3)在循环体语句序列中可以加入 Exit For 语句,执行该语句后会强制程序脱离循环,执行 Next 下 面的语句。Exit For 语句通常放在选择结构语句之中使用。
(4)如果出现循环变量的值总没有超出终值的情况,则会产生死循环。此时,可按 Ctrl+Break 键,
强制终止程序的运行。
2.分析程序的运行结果
分析循环语句程序的运行过程和运行结果,有利于帮助了解循环语句的功能。 【举例 1】程序如下,分析程序的运行结果。 Private Sub Form_Activate()
For N = 1 To 5 Step2 Print N, Next N
Print :Print "N=" N End Sub
该程序运行后,执行 For 语句,循环变量 N 取值 1<5(终值),因步长值为正数,没有超出终值,则 执行循环体语句“Print N,” ,在窗体中第 1行第 1 列显示变量N 的值 1。执行Next 语句时,N 加步长值 2 后再赋值给变量 N等于 3,与终值5 比较(3<5),没有超出终值,再执行“Print N,”语句,在窗体中第 1 行第 15 列(第 2 显示区的第 1列)显示 N 的值 3。
再执行 Next 语句时,N 加步长值后的取值为 5,与终值 5 比较没有超出终值,再执行“Print N,”语句, 在窗体中第 1行第 29列(第 3显示区的第 1 列)显示 N 的值 5。然后,再执行Next 语句,N加步长值后 的取值为 7,超出终值,退出循环语句,执行“Next N”语句下面的语句“Print :Print “N=” N” ,在第2 行第 1 列显示 N 的值 7。窗体显示如图 431 所示。 【举例 2】程序如下,分析程序的运行结果。 Private Sub Form_Activate()
For N = 5To1 Step2 Print N, Next N
Print :Print "N=" N End Sub
该程序运行后,执行 For 语句,循环变量 N 取值 5>1(终值),因步长值为负数,没有超出终值,则 执行执行语句“Print N,” ,在窗体中第 1行第 1 列显示变量 N的值 5。执行Next 语句时,N 加步长值2后 再赋值给N 等于 3,与终值 5 比较(3>1),没有超出终值,再执行“Print N,”语句,在窗体中显示 3。再 执行 Next 语句时,N加步长值后的取值为 1,与终值1 比较没有超出终值,再执行“Print N,”语句,在窗 体中显示 1。
然后,再执行Next 语句,N 加步长值后的取值为1,超出终值,退出循环语句,执行“Next N
”语句
下面的语句“Print :Print “N=” N” ,在第 2 行第 1 列显示“N=”和N 的值1。窗体显示如图 432 所示。
图431 例1程序运行结果 图432 例2程序运行结果
【举例 3】求 1+2+……+100的值。 设计的程序如下。
Private Sub Form_Activate()
Dim N As Integer, SUM As Long
SUM = 0 '给变量 sum赋初值 0
Rem 可循环 100 次,每一次循环使变量 N 自动加 1,N 依次取值 1、2……100
For N = 1 To 100 SUM = SUM + N Next N
Print "1+2+……+100=" SUM End Sub
程序运行结果如图 433所示。 【举例 4】求 10!的值。
‘累加语句,进行变量 N的累加 ‘显示计算结果
程序如下。程序运行结果如图434 所示。
Private Sub Form_Activate()
Dim N As Integer, SUM As Long
SUM = 1
'给变量 sum赋初值 1 Rem
For N = 1 To 10 ‘ 可循环 10 次,每一次循环使N 自动加 1,N 依次取值 1……10 SUM = SUM * N '累加语句,进行变量 N的累加 Next N
Print "10!=" SUM '显示计算结果 End Sub
图433 例3程序运行结果 图434 例4程序运行结果
【举例 5】求 1+(1+2)+……+(1+2+……+100)的值。 程序内容如下。
Private Sub Form_Activate()
Dim N As Integer, SUM, SUN1 As Long
SUM = 0: SUM1 = 0 '给变量 SUM 和 SUM1 赋初值 0
Rem 可循环 100 次,每一次循环使变量 N 自动加 1,N 依次取值 1、2……100 For N = 1 To 100
SUM = SUM + N '累加语句,进行变量N 的累加运算
SUM1 = SUM1 + SUM '累加语句,进行变量SUM 的累加运算 Next N
Print "1+(1+2)+……+(1+2+……+100)=" SUM1 '显示计算结果 End Sub
在求 1+2+……+100 值的程序中,第 1 次循环中,SUM 的值为 1;第 2 次循环中,SUM 的值为 1+2=3;……;第 100 次循环中,SUM 的值为 1+2+3+……+100=5050。可见,每次循环中 SUM 的值正好 是求 1+(1+2)+……+(1+2+……+100)值式子中的各项值,因此只要在每循环时将 SUM 进行累加即可。
程序的运行结果为:1+(1+2)+……+(1+2+……+100)=171700
4.3.2 循环结构的嵌套
1.什么是循环结构嵌套和循环嵌套的注意事项
可以把一个循环结构放入另一个循环结构之中,这称为循环结构的嵌套。例如,可以在一个 For Next 语句中嵌套另一个 For Next 语句, 组成嵌套循环, 不过在每个循环中的循环控制变量应使用不同的变量名, 以避免互相影响。
使用循环嵌套应注意以下几点。
(1)内循环与外循环的循环变量名称不能够相同。 (2)外循环必须完全包含内循环,不可以出现交叉现象。 (3)不可以没有执行 For 语句,就执行Next 语句。 下面的情况是错误的: 出现交叉现象
内外循环变量名称相同
For A=1 TO 100 For A=1 TO 100
For B=3 TO 1 Step–1 For A=3 TO 1 Step–1 …… …… Next A Next A Next B Next A 2.循环结构嵌套举例 【举例 6】求三个有趣的整数
有三个正整数,其和为 30,第 1 个数与第 2 个数的 2 倍及第 3 个数的 3 倍之和为 53,第 1 个与第 2 个数和的 2倍减去第3 个数的3 倍为 20,设计程序求这三个数。
设第 1、2、3 个数分别为 A、B、C,由题意可知 A+B+C=30,A+2*B+3*C=53,2*(A+B)3*C=20。解 决这类问题可以采用穷举法,即产生 0 到 30 的数分别赋给 A、B、C,然后按照条件进行筛选,符合条件 的便显示出来。下面介绍两种方法。
(1)方法一:程序如下。
Private Sub Form_Activate() Dim A, B As Integer For A = 0 To 30 For B = 0 To 30 For C = 0 To 30
If A + B + C = 30 And A + 2 * B + 3 * C = 53 And 2 * (A + B) 3 * C = 20 Then Print "A=" A, "B=" B, "C=" C End If Next C Next B Next A End Sub
程序运行结果是: A=15 B=7 C=8 (2)方法二:程序如下。
Private Sub Form_Activate() Dim A, B As Integer For A = 0 To 30
For B = 0 To 30
C = 30A B '保证 A+B+C=30
If A + 2 * B + 3 * C = 53 And 2 * (A + B) 3 * C = 20 Then Print "A=" A, "B=" B, "C=" C End If Next B
Next A End Sub
可以看出,该程序比第一个程序运行的时间要短,程序更优化。 (3)方法三:程序如下。
Private Sub Form_Activate() Dim A, B As Integer For A = 0 To30 For B = 0 To30
C = 30A B
If A + 2 * B + 3 * C <> 53 Or 2 * (A + B) 3 * C <> 20Then GoTo BT Print "A=" A, "B=" B, "C=" C BT:
Next B Next A End Sub
在该程序中,使用了“Goto 标号”语句,其功能是无条件转到标号(例如:BT)所指示的语句行, 标号的右边一定要加冒号“:” 。在程序中应尽量少用Goto语句。
【举例 7】猜父子年龄。
父子二人,已知儿子年龄不大于 40 岁,父亲年龄不大于 100 岁,10 年前父亲年龄是儿子年龄的 4 倍, 10 年后父亲年龄是儿子年龄的整数倍。求父子现在的年龄。
设父、子年龄各为 A、B 岁,10 年前儿子的最小岁数是 1 岁,现在至少为 11 岁,因此现在父亲年龄 至少 14 岁。由此可设 A的初值为 11,B 的初值为 14。解决这个问题也可以采用穷举法。所用的判断式子 如下。
A10=(B10)*4 和 Int((A+10)/(B+10))=(A+10)/(B+10) 设计的程序如下。
Private Sub Form_Activate()
Dim A, B As Integer For A = l4 To 100 For B = 11 To40
If (A10)=(B10) * 4 And (A+10) / (B+10) = Int((A+10) / (B+10)) Then Print "父亲现在岁数:" A, "儿子现在岁数:" B End If Next B Next A End Sub
程序运行结果如下。
父亲现在岁数:50;儿子现在岁数:20 【举例 8】人民币取法。
有面值为壹元、贰元和伍元的人民币若干,从中取出20 张使其总值为陆拾元,问有多少种取法?每种 取法中的壹元、贰元和伍元人民币各有多少张?
设取壹元人民币有 A张,贰元人民币有 B 张,伍元人民币有 C 张,共有 N 种取法。用三重循环产生 各种取法,在循环体内用条件判断语句进行是否符合条件的判断,从而找出符合其总值为 60 元的取法。 根据题意可知,变量 A、B 的循环变量的终值不能大于 20,而变量 C 的循环变量的终值不能大于 12(因5
×12=60)。程序如下。
Private Sub Form_Activate()
For A = 0 To 20 For B = 0 To 20
For C = 0 To 12
If A + B + C = 20 And A + B * 2 + C * 5 = 60 Then N = N + 1
Print Tab(1) "壹元张数:" A Print Tab(15) "贰元张数:" B Print Tab(30) "伍元张数:" C End If
Next C, B, A '三个连续的Next 可采用这种写法 Print: Print "人民币取法的总数为:" N End Sub
程序运行结果如图 4-3-5 所示。
图435 实例8程序运行结果
4.3.3 While Wend 语句
1.While Wend语句的格式和功能 【格式】 While 条件 [循环体语句序列] Wend
【功能】当条件成立时,重复执行语句序列,否则,转去执行关键字 Wend 后面的语句。执行 Wend 语句的作用就是返回到 While语句去执行。
【说明】条件实际上是一个表达式,对它的要求与对If Then Else语句的要求一样。经常使用的是关 系和逻辑表达式。
2.分析程序的运行结果 【举例 9】程序内容如下。 Private Sub Form_Activate() Dim N, SUM As Integer N = 1: SUM = 0 While N <= 3
SUM = SUM + N N = N + 1 Wend
Print "SUM=" SUM End Sub
该程序运行后,执行到 While N <= 3语句时,判断 N <= 3 关系表达式成立(其值为 True),则执行循 环体语句,使 SUM=1,N=2。执行 Wend语句返回 While语句。再判断N <= 3 关系表达式成立,则执行循 环体语句,使 SUM=3,N=3。然后,第 3 次执行 While语句,判断 N <= 3关系表达式成立,则执行循环体 语句,使 SUM=6,N=4。接着第 4 次执行While语句,判断 N <= 3 关系表达式不成立,则执行 Wend语句 下边的语句 Print "SUM=" SUM。程序运行结果为:SUM=6 。
如果将 N <= 3 关系表达式改为 N <= 100,即可求 1+2+……+100 的值。 【举例 10】程序内容如下。 Private Sub Form_Activate() Dim N As Integer N = 10:A=1:B=2:C=3 While N >4
C=A:A=B:B=C Print A,B,C N = N 3 Wend
Print "N=" N End Sub
第 1 次执行While N>4 语句时,判断N>4关系表达式成立,执行循环体语句。语句 C=A:A=B:B=C 的 作用是将 A、B 的值互换,输出 A、B、C 的值分别为 2、1、1;N = N – 3语句使变量 N变为 7。第 2次 执行 While N >4 语句时,判断N>4关系表达式成立,执行循环体语句,输出 A、B、C 的值分别为 1、2、 2;N = N – 3 语句使变量N 变为4
。第 3次执行While N >4 语句时,判断 N>4关系表达式不成立,执行 Wend语句下边的语句 Print“N=” N,输出 N=4。程序运行后的结果如图 436所示。
图436 实例10程序运行结果
【举例 11】求 2!+4!+……+10!的值 设计的程序如下。
Private Sub Form_Activate()
Dim I, J As Integer, N, SUM As Long
MUM = 0: I = 2 '给变量赋初值
FontSize = 10 '设置窗体中文字的大小 ForeColor = RGB(0, 0, 255) '设置窗体中文字的颜色为蓝色 While I <= 10 '产生 2到 10 的偶数 J = 1: N = 1 '给变量赋初值 While J <= I '求偶数的阶乘 N = N * J '进行累积运算 J = J + 1 '变量 I自动加 1 Wend
SUM = SUM + N '进行阶乘的累加 I = I + 2 '变量J 自动加 2 Wend
Print "2!+4!+……+10!=" SUM '显示计算结果
程序运行结果如图 437
所示。
图437 实例11程序运行结果
4.3.4 Do Loop 语句
1.当型 Do Loop语句 【格式】
Do [While|Unitl 条件] [循环体语句序列] Loop
【功能】选关键字 While,当条件成立(其值为 True、非零的数或非零的数字符串)时,重复执行循 环体语句序列的语句;当条件表达式不成立(其值为False、0 或”0”)时,转去执行关键字 Loop后面的语 句。
选关键字 Unitl,当条件表达式不成立(其值为 False、0 或"0")时,重复执行循环体语句序列的语句; 当条件成立(其值为 True、非零的数或非零的数字符串)时,转去执行关键字 Loop后面的语句。
当型 Do Loop语句是先判断条件,再执行循环体语句序列中的语句。
【说明】条件实际上是一个表达式,对它的要求与对If Then Else语句的要求一样。经常使用的是关 系和逻辑表达式。
在循环体语句序列中可以使用[Exit Do]语句,它的作用是退出该循环体,它一般用于循环体语句序列 中的判断语句。
2.直到型 Do Loop语句 【格式】 Do
[循环体语句序列] Loop [While|Unitl 条件]
【功能】与当型 Do Loop语句的功能基本一样,只是直到型 Do Loop语句是先执行循环体语句序列中 的语句,再判断条件。
正在阅读:
第4章 基本算法和流程控制05-17
2019届高考物理一轮复习 第4章 曲线运动万有引力与航天 6 第二节05-24
安徽体育运动职业技术学院运动训练05-21
国旗下讲话——认真复习,迎接期中考试(6月15日)09-05
全国第三批本科院校排名02-08
2018年河北师范大学数学与信息科学学院824计算机专业基础之计算机操作系统考研冲刺狂背五套题04-27
2011年高考物理试题分类汇编 电磁感应06-21
蚁族的奋斗经典语句02-11
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 算法
- 流程
- 基本
- 控制
- 2021年人教版六年级数学下册二单元考试题(A4版)
- 母爱是条宽阔的河
- 毕业设计-安旭梅
- 八年级地理下册第十章中国在世界中导学案
- 2013年中央电大刑法学(1)形成性考核册参考答案
- 桥梁钢结构涂装中重防腐技术的应用
- 2015年中考北大附属实验学校物理调研试题
- 工程项目部工作流程
- Quantum fluctuations and glassy behavior of electrons near metal-insulator transitions
- 基尔霍夫定律及叠加原理的验证
- 考研英语常见形近词辨析
- 第2讲 消费者购买决策过程(一)
- 计算机文化基础实验报告参考答案
- 基于变异系数法的灰色关联分析模型及其应用
- 04疏散标志设计原则
- 校园周边环境整治工作总结
- 一个中小企业网络规划与设计的方案
- 谈谈数学教具的制作
- 橱柜设计师培训手册
- 信息系统分析与设计课程设计任务书