Linux 版 (精华区)
发信人: netiscpu (夜☆星光点点☆), 信区: Linux
标 题: ◇ 星星流讲座 0018
发信站: 紫 丁 香 (Sun Nov 8 18:28:33 1998), 转信
寄信人: guest.bbs@hgluo.hust.edu.cn
标 题: ◇ 星星流讲座 0018
发信站: 华南理工大学 BBS木棉站
日 期: Thu Feb 20 14:46:49 1997
发信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信区: test
标 题: 星星流讲座 0018
发信站: ☆清华电机☆ (Tue May 16 11:39:54 1995)
;35m第 4 讲 之 3 基本的流程控制
Topic: Flow Designm
再来看看比较难一点的部份:
label1:
if (input != 0) ◇ 数字是否为 0 ?
{
scanf ("%d", &input); □ 输入一数字并加总
if (input > 0) ◇ 数字是否小於 0?
sum += input;
goto label1;
}
sum *= 1.05; □ 结总并加上营业税
这个地方和我们的流程图顺序不一样,我们的流程图顺序是:
□ 输入一数字并加总 ←┬———┐
↓ │ 是 │
◇ 数字是否小於 0?┘ │否
↓否 │
◇ 数字是否为 0 ? ————┘
↓是
为什麽要把顺序换过来呢?那是因为流程图本身有问题。当数字小於 0 的
时候,当然是不能加总的 (钱有负值的吗?) 。而当数字等於 0 的时候,
表示输入完毕,就不需要再输入了,所以我们先判断输入数字是否为 0,
如果为 0 那就不需要再输入下一个了。输入一个数字之後,判断它的值是
否合法,然後再加总。
你也许会想到,为什麽不等全部输入完再判断呢?我们可以用阵列呀!
这是因为用阵列太浪费空间了。
现在相信给各位一个流程图,你大概都能用 if-else 和 goto 来完成了,
我们比较感兴趣的是:怎麽设计流程图?
写程式解决一个问题,可以分成五个步骤:
定义问题 (Requirement Collection)
↓
分析需求 (Requirement Analysis)
↓
程式设计 (Coding)
↓
测试更正 (Testing and Debugging)
↓
程式维护 (Maintainence)
我们现在要讲的,就是实施前两个步骤的一种方法。首先是定义问题:我
们要做一个收银机的程式,它可以加总,算出总金额和找钱的数目。这是
我们写这个程式的终极目标,所以不管怎麽样,做出来的程式一定必须符
合这个需求。
有了需求,我们就要分析它,研究出如何做它,一个基本的方法是画流程
图。流程图最常用的就是方块和菱形,方块代表程序,菱形代表条件判断
和分支,只要会这两个就可以了,其他的除非你考试要考,否则也不太用
的到 :p 我们现在就收银机程式的需求来想想如何画流程图。
收银机的行为是操作员把资料一笔一笔的输入,输入完之後按加总键算出
总金额。我们使用的键盘上并没有什麽加总键可以利用,这时候该怎麽办
呢?我们可以利用输入一个不可能发生的数值来当做是加总键。什麽是不
可能发生的数值?那当然是小於或等於 0 的数值了,我们就挑 0 来当做
我们的加总键。为什麽挑 0 呢?因为所有的电脑里处理条件跳跃都用 0
当作基准,这是比较深入一些的考量了。到目前为止,我们就可以画出如
下的流程了:
□ 输入一数字 ←—┬———┐
↓ │ 是 │
◇ 数字是否小於 0?┘ │否
↓否 │
◇ 数字是否为 0 ? ————┘
输入一个数值,如果数值的值不对,那麽表示操作员操作错误,必须重新
输入。那麽,输入完的数字要存在那儿呢?这是一个问题,因为如果是正
确的数字,它就没有储存的必要,直接加进总金额就可以了。所以我们可
以画流程图如下:
□ 输入一数字并加总 ←┬———┐
↓ │ 是 │
◇ 数字是否小於 0?┘ │否
↓否 │
◇ 数字是否为 0 ? ————┘
但是数字小於 0 时是不可以加总的,所以正确的流程图应为:
□ 输入一数字 ←—┬———┐
↓ │ 是 │
◇ 数字是否小於 0?┘ │否
↓否 │
□ 加总 │
↓ │
◇ 数字是否为 0 ? ————┘
接下来後面的东西就简单了:
() 开始
↓
□ 输入一数字 ←—┬———┐
↓ │ 是 │
◇ 数字是否小於 0?┘ │否
↓否 │
□ 加总 │
↓ │
◇ 数字是否为 0 ? ————┘
↓是
□ 结总并加上营业税
↓
□ 要求操作员输入收银金额 ←┐
↓ │是
◇ 检查金额是否小於应收货款 —┘
↓否
□ 输出找钱金额
↓
() 结束
写程式最大的障碍不在於技术不够,而是在於想像力不足。所以对於解决问题,
平常就必须多多努力学习如何分析它,这才是学习程式设计最主要的课题。
--
本文原作者为徐振家,原作刊载於星星神教总坛 ☆清华电机☆ test 板。
你可以以电子文件的形式将本文自由流传於台湾学术网路,但必须包含此版权声明。
原作者依中华民国著作权法之规定,享有本文之著作权,请勿抄袭以免触法。
未经授权任何人不得以任何形式对本文做任何修改及商业上之应用。
其他网路的转载或其他用途的应用,请先知会作者,并取得其同意。
对本文有任何疑问或意见请 mail 给 ax.bbs@bbs.ee.nthu.edu.tw,谢谢。
--
m;32m※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: mtlab.hit.edu.cn]
--
Enjoy Linux!
-----It's FREE!-----
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.818毫秒