發信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信區: test
標  題: 星星流講座 0016 (修訂版)
發信站: ☆清華電機☆ (Tue May 16 10:36:18 1995)
轉信站: star

星星流講座 0016         C 語言講座

第 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);
}
 

※ 上次貼的為本講初稿,貼太快了以致內容有錯,更正後重貼。