BBS水木清华站∶精华区

发信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信区: test 
标  题: 星星流讲座 0016 (修订版) 
发信站: ☆清华电机☆ (Tue May 16 10:36:18 1995) 
 
 
第 4 讲 之 1            基本的流程控制 
                        Topic: if-else & goto (1) 
 
现在我们来研究一下程式中如何做流程控制 (Flow Control)。什麽 
是流程控制呢?就是控制你的程式要如何执行的方法。我们以一个 
模拟收银机的例子来说好了: 
 
我们现在想用电脑做一部收银机,收银机就是一次输入一个数值, 
然後加以加总,加上百分之五的营业税,收银员再输入收入金额, 
收银机显示应找金额。对於这个问题,我们可以用流程图表示如 
下:(注:由於硬体的关系,没有办法画出标准的流程图,请将就 
著看看,或是期待 WWW 版吧! :) ) 
 
               () 开始 
                   ↓ 
          □ 输入一数字并加总 ←┬———┐ 
 
          □ 输入一数字并加总 ←┬———┐ 
                   ↓           │ 是   │ 
             ◇ 数字是否小於 0?┘      │否 
                   ↓否                 │ 
             ◇ 数字是否为 0 ? ————┘ 
                   ↓是 
           □ 结总并加上营业税 
                   ↓ 
          □ 要求操作员输入收银金额 ←┐ 
                   ↓                 │是 
        ◇ 检查金额是否小於应收货款 —┘ 
                   ↓否 
             □ 输出找钱金额 
                   ↓ 
               () 结束 
 
我们看到程式流程中有分支,而且是判断某个条件是否成立,条件成 
立的话就跳到那里,这种型态的流程分支叫做条件跳跃,在 C 语言 
中以 if 这个叙述来达成。if 的语法如下: 
 
        if 条件运算式 
            条件成立时执行的程式区块或叙述式 
        else 
            条件不成立时执行的程式区块或叙述式 
 
我们把上面的收银机程式实作如下: 
 
/* checker.c */ 
#include <stdio.h> 
 
void main (void) 

    int sum, input, cash; 
    sum = 0; 
    cash = 0; 
    input = 1; 
 
label1: 
    if (input != 0) 
    { 
        scanf ("%d", &input); 
        if (input > 0) 
            sum += input; 
        goto label1; 
    } 
 
    sum *= 1.05; 
    printf ("Total = %d\nCash = ? ", sum); 
label2: 
    scanf ("%d", &cash); 
    if (cash < sum) 
        goto label2; 
    printf ("Change = %d\n", cash - sum); 

 
※ 上次贴的为本讲初稿,贴太快了以致内容有错,更正後重贴。 
 
-- 
本文原作者为徐振家,原作刊载於星星神教总坛 ☆清华电机☆ test 板。 
你可以以电子文件的形式将本文自由流传於台湾学术网路,但必须包含此版权声明。 
原作者依中华民国著作权法之规定,享有本文之著作权,请勿抄袭以免触法。 
未经授权任何人不得以任何形式对本文做任何修改及商业上之应用。 
其他网路的转载或其他用途的应用,请先知会作者,并取得其同意。 
对本文有任何疑问或意见请 mail 给 ax.bbs@bbs.ee.nthu.edu.tw,谢谢。 
 
 

BBS水木清华站∶精华区