4.1 程序的流程分为三种
各位读到此处,应该能够从硬件上想像出计算机的运作方式了。计算机的硬件系统由CPU、I/O和内存三部分构成。内存中存储着程序,也就是指令和数据。CPU配合着由时钟发生器发出的滴答滴答的时钟信号,从内存中读出指令,然后再依次对其进行解释和执行
CPU中有各种各样的各司其职的寄存器,其中一个称为PC(Program Counter,程序计数器)的寄存器,负责存储内存地址,该地址指向下一条即将执行的指令,每解释执行完一条指令,PC寄存器的值就会自动被更新为下一条指令的地址
PC寄存器的值在大多数情况下只会增加,下面假设PC寄存器正指向内存中一个从10号地址开始的3字节指令。CPU解释执行完这条指令后,PC寄存器中的值就变成10+3=13了,也就是说,程序基本上是从内存中的低地址(编号较小的地址)开始,向着高地址(编号较大的地址)流下去的。我们把程序的这种流动称为“顺序执行”(如图4.1所示)
图4.1 硬件上的程序流程(顺序执行)
程序的流程总共有三种。除了顺序执行外,还有“条件分支”和“循环”,因为只有这三种,记忆起来还是很轻松的
正如上文所述,顺序执行是按指令记录在内存中的先后顺序依次执行的一种流程。而循环则是在程序的特定范围内反复执行若干次的一种流程。条件分支是根据若干个条件的成立与否,在程序的流程中产生若干个分支的一种流程。无论规模多么大多么复杂的程序,都是通过以上三种流程组合起来实现的
程序的三咱流程正像是河流本身,从高山的泉眼中涌出的清泉形成河流的源头(程序执行的起点)。水流从山中缓缓流下,有时向着一个方向流淌(顺序执行),有时中途分出了支流(条件分支),还有时由于地势卷起了漩涡(循环)。难道程序的流程不美吗?完全就像是裱在画卷上的山水画一样(如图4.2所示)
图4.2 程序的三种流程
还有一种称为“无条件分支”的流程,它就仿佛是瓢泼大雨引发的山洪,突然就向着某处流去了,可以认为这是一种特殊的条件分支。
虽然可能不如山水画那样优美,但还是要给大家展示一段简单的程序。代码清单4.1中列出了用VBScript(Visual Basic Scripting Edition)编写的“石头剪刀布游戏”的代码,VBScript是BASIC语言的一个版本。该程序可以在Windows 98/ME/2000/XP操作系统上运行(用于执行VBScript程序的WSH(Windows Script Host)已作为标准组件被集成在Windows 98/Me/2000/XP操作系统中)玩家和计算机进行五轮石头剪刀布比赛,比完后显示玩家获胜的次数
请用记事本等文本编辑器编写这个程序,并存储到扩展名为.vbs的文件中。只要双击保存后的文件,程序就可以执行了
图4.3 代码清单4.1执行后的结果
代码清单4.1 用VBScript编写的“石头剪刀布游戏”
‘初始化表示手势的变量
Dim gesture(2)
gesture(0)=”石头”
gesture(1)=”剪刀”
gesture(2)=”布”
‘初始化对玩家获胜次数计数的变量
wins0=0
‘初始化随机数种子
Randomize
‘显示程序启动信息
MsgBox “石头剪刀布游戏ver.1.00 by H.Yazawa”
‘进行五轮比试
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论