【程序员思维进阶】(2)

文章介绍了程序流程的三种基本类型:顺序执行、条件分支和循环,并通过VBScript编写的“石头剪刀布游戏”示例来阐述这些概念。强调了流程图在设计程序和表达算法中的重要性,以及如何通过流程图来思考和构建程序的粗略及详细流程。文章提倡程序员应学会使用流程图来提高编程效率。
摘要由CSDN通过智能技术生成

要学会流程图(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 次循环处理看作是一个整体,当成是一次处理(用矩形表示)。

因为程序没有按照自己的想法来工作而烦恼的人,不妨试试从勾画反映程序整体流程的粗略流程图下手。
只要在此之上慢慢地细化流程,就能得到详细的流程图。接下来再按照流程图所示的流程埋头编写程序就轻松了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值