第 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 流程图规定的几何图形
符 号 作 用 符 号 符 号
起始框:表示程序的起 始和终止 输入输出框: 表示输 入输出数据
处理框:表示完成某种 项目的操作 流程线: 表示程序执 行的方向
判断框:表示进行判断 连接点: 表示两段流
do while语句流程图程图流程的连接点
(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图 (c)PAD图
图411 顺序结构
2.选择结构
选择结构是一种常用的主要基本结构,是计算机科学用来描述自然界和社会生活中分支现象的重要手 段。在实际工作中,常常需要根据某个条件是否成立,来决定下一步应做什么工作。设计程序让计算机工 作,同样存在这种情况。在这种情况下,程序不再按照行号的顺序来执行各语句行的语句,而是根据给定 的条件来决定选取哪条路径,执行哪些语句。选择结构的特点是:根据所给定选择条件为真(即条件成立) 与否,而决定从各实际可能的不同操作分支中,选择执行某一分支的相应操作,并且任何情况
下均有“无 论分支多少,仅选其一”的特性。使用上面介绍的 3种描述方法绘制的选择结构图如图 412 所示。
(a)流程图 (b)NS图 (c)PAD图
图412 选择结构
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 所示;
,如图 4-2-3 所示。程序代码如下。
当该数为奇数时(此处输入 11),显示“是奇数”
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 = V al(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个画面
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论