要学会流程图(Flow Chart)
程序的流程分为三种:顺序执行、条件分支、循环
用户的操作等产生事件后,由事件决定程序的流程。Windows应用程序的运行就是由事件驱动的。例如,选择“打开文件”菜单项就能打开一个窗口,在里面可以指定要打开文件的名称和存储位置。
之所以能够这样是因为一旦触发了“选中了菜单项”这个事件,程序的流程就相应地流转到了处理打开窗口的那部分。
程序的流程。程序员一般都是先考虑程序的流程再开始编写程序的。只有编写过程序的人才能体会到“程序是流动着的”。
顺序执行是按照指令记录在内存中的先后顺序依次执行的一种流程。而循环则是在程序的特定范围内反复执行若干次的一种流程。
条件分支是根据若干个条件的成立与否,在程序的流程中产生若干个分支的一种流程。无论规模多么大多么复杂的程序,都是通过把以上三种流程组合起来实现的。
用 VBScript(Visual Basic Scripting Edition)编写的“石头剪刀布游戏”的代码,VBScript 是 BASIC 语言的一个版本。
该程序可以在 Windows 98/Me/2000/XP 操作系统上运行 。玩家和计算机可以进行五轮石头剪刀布比赛,比完后会显示玩家获胜的次数。
用记事本等文本编辑器编写这个程序,并存储到扩展名为“.vbs”的文件中,比如 ShitouJiandaoBu.vbs。只要双击保存后的文件,程序就可以执行了。
用 VBScript 编写的“石头剪刀布游戏”
' 初始化表示手势的变量
Dim gesture(2)
gesture(0) = " 石头 "
gesture(1) = " 剪刀 "
gesture(2) = " 布 "
' 初始化对玩家获胜次数计数的变量
wins = 0
' 初始化随机数种子
Randomize
' 显示程序启动信息
MsgBox " 石头剪刀布游戏 Ver.1.00 "
' 进行五轮比试
For i = 1 To 5
' 输入玩家的手势
user = CInt(InputBox("0: 石头、1: 剪刀、2: 布 "))
' 用随机数决定计算机的手势
computer = CInt(Rnd * 2)
' 生成提示双方出的手势的字符串
s = " 玩家:" & gesture(user) & "、计算机:" & gesture(computer)
' 判定胜负,显示结果
If user = computer Then
MsgBox s & "... 平局! "
ElseIf computer = (user + 1) Mod 3 Then
MsgBox s & "... 玩家获胜! "
wins = wins + 1
Else
MsgBox s & "... 计算机获胜! "
End If
Next
' 显示玩家的获胜次数
MsgBox " 玩家获胜次数: " & wins
“石头剪刀布游戏”的程序是由顺序执行、条件分支和循环三种流程组成的。
对于没有学过 VBScript 的人来说,也许会觉得程序代码就好像是魔法的咒语一样。因此就需要用一种无论是谁都能明白的方法来表示代码中的程序。
为此所使用的图表,就是已经知道的“流程图”。
所谓流程图,正如其名,就是表示程序流程(Flow)的图(Chart)。有很多专业的程序员,他们在编写程序前,都会通过画流程图或是类似的图来思考程序的流程。
流程图的方便之处在于它并不依赖于特定的编程语言。
上图的流程图所表示的流程不仅能转换成 VBScript 程序,还可以转换成用其他 语言编写的程序,比如 C 语言或 Java 语言。
可以认为编程语言只不过是将流程图上的流程用文字(程序)重现出来罢了。各种编程语言的差 异正如一种自然语言中各地方言的差异一样。
只要给出了详细的流程图,就可以编写出基本相同的程序。
画流程图可能会花费一个月之久,但是对照着流程图专心写程序只需要两天的时间。作为程序员必须要学会灵活地运用流程图。在思考程序流程的时候,也要首先在头脑中画出流程图。
画流程图来思考算法 为了充分体现流程图的用途,下面稍微涉及一些有关算法的内容。
所谓算法(Algorithm),就是解决既定问题的步骤。想让计算机解决问题,就需要把问题的解法转换成程序的流程。
仅用一条语句就能实现出“石头剪刀布游戏”的编程语言是不存在 的。如果眼下待解决的问题是如何编写“石头剪刀布游戏”,那么就必 须考虑如何把若干条指令组合起来并形成一个解决问题的流程。
如果 能够想出可以巧妙实现“石头剪刀布游戏”的流程,那么这个问题也就 解决了,换言之算法也就实现了。
要是被问到:“这个程序的 算法是怎样的呢?”那么只要回答清楚程序的流程就可以了。或者画出 流程图也是可以的,因为表示程序流程的流程图本身就能解释算法。
思考算法时的要点是要分两步走,先从整体上考虑程序的粗略流程,再考虑程序各个部分细节的流程。
粗略的流程。这是一种相当简单的流程,虽然或多或少会有例外,但是几乎所有的程序从整体来看都具有一个一成不变的流程,那就是“初始化处理”→“循环处理”→“收尾处理”。
首先,用户启动了程序(程序执行初始化处理)。接下来用户根据自己的需求操作程序(程序进入循环处理阶段)。
最后用户关闭了程序(程序执行收尾处理)。这样的使用方法就可以直接作为程序的整体流程。
还是以“石头剪刀布游戏”为例,分出初始化处理、循环处理、收尾处理之后,就可以画出如下图那样的粗略的流程图。
图中把 5 次循环处理看作是一个整体,当成是一次处理(用矩形表示)。
因为程序没有按照自己的想法来工作而烦恼的人,不妨试试从勾画反映程序整体流程的粗略流程图下手。
只要在此之上慢慢地细化流程,就能得到详细的流程图。接下来再按照流程图所示的流程埋头编写程序就轻松了。