基礎程式設計(6)-if/else條件控制

學程式有很多必需要知道的”常識”,就像電腦有很多電腦常識一樣,這些常識是很基礎的。可是我擔心把這些常識一股腦兒說出來,只會讓初學者更恐懼(雖然這些文章對初學者來說搞不好也太難了),所以很多東西我決定放在後面相關的章節再一起介紹。前面幾篇文章介紹的都是程式最基礎的概念,包括風格、變數與運算子,從這一篇開始講的是程式語法的「流程控制」。

程式區塊(Blocks)

程式的基本概念中有提到,程式的單位是「行」,並且有些語言會在每一行的結尾加上分號(;)表示結束。不過就像我們寫文章有句子和段落一樣,程式也有所謂的”區塊”;每個區塊就像「盒子」一樣,把某些語法包在裡面。不同程式語言描述區塊的方式不一樣。C 語言使用大括號「{}」來包圍程式區塊,BASIC 語言則是使用 End 作結尾。寫程式的時候如果沒有正確的指定程式區塊的範圍,就像沒有蓋蓋子的盒子,或是破了洞的盒子一般,程式編譯或執行的時候會產生錯誤。在學習這一節的主題前,務必先掌握程式區塊的概念。

IF敘述

IF 翻譯成中文就是「如果」,所以這個敘述應該是滿好理解的,在流程圖中使用菱形來表示。IF 表示需要判斷的描述,例如:「如果下雨,我就不出門了,在家看電視。」改寫成程式就會像這樣(語法適用於C/C++/Java):

if (rain == true) {    //IF成立
    out = false;
    todo = "watch TV";
}

我們可以看到 IF 後面的括號()放的是一個關係運算式,並且如果 IF 假設成立,接著要做的事情被寫在大括號{}中。

當條件有二個以上時,可以使用邏輯運算子做連接。例如:「如果下雨,而且超過晚上8點,我就不出門了。」這裡換成 BASIC 語法讓大家可以比較兩者的不同(語法適用於VB.NET)。

IF rain = true AND timeNow > "20:00" THEN
    out = false
    todo = "watch TV"
END IF

IF/ELSE敘述

IF 語法可以加入 ELSE 表示當 IF 不成立的時候要做的事。例如:「如果考試不及格就要補考,不用補考(及格)的話我們就出去玩。」(語法適用於C/C++/Java)

if (pass == false) {
    makeup = true;
    outing = false;
}
else {  //pass == true
    makeup = false;
    outing = true;
}

IF 如果成立,就不會執行 ELSE 裡的程式;反之如果不成立,IF 裡的程式就會被略過,只執行 ELSE。

多重IF敘述

有的時候需要判斷”可能狀況”會有好幾種,這個時候可以使用多重IF敘述來描寫。例如:「如果考試不到60分就要補考,不到40分就要重修。」(語法適用於VB.NET)

IF score < 40 THEN '40以下
    repeat = true
    pass = false
ELSEIF score < 60 THEN   '60-40分
    makeup = true
    pass = false
ELSE    '及格
    pass = true
END IF

程式是由上往下執行的,所以如果第一個判斷式就寫 <60,那麼 40 分以下的也會被歸類在這個範圍裡。和前面 IF/ELSE 的概念一樣,只會執行成立的區塊,其它區塊的程式都會被略過。當然,這個程式也是可以反著寫的,變成(語法適用於C/C++/Java):

if (score > 60) {  //及格
    pass = true;
}
else if(score > 40) {   //60-40分
    makeup = true;
    pass = false;
}
else {  //40以下
    repeat = true;
    pass = false;
}

巢狀IF/ELSE敘述

買行裹箱的時候可以把小的行裹箱裝在大的裡面。IF/ELSE敘述也一樣,稱作巢狀敘述。不過和行裹箱不同的是,IF/ELSE沒有什麼大小的問題,只需要注意不可以交錯即可(語法適用於C/C++/Java)。

if (條件式) {
    //do something

    if (條件式) {
        //do something
    }
}
else {
    //do something
}

條件運算子(Conditional Operators)

前面談到運算子的時候,還有一種運算子沒有提,稱作條件運算子(?:)。簡單來說它就是 IF/ELSE 的簡化敘述,但因為太過簡化所以不容易閱讀,建議不要隨便使用它。只有 C、C++、Java 這種 C 寫作風格的語言支援。語法格式如下:

變數 = (條件式) ? { 成立 } : { 不成立 };

參考範例:

hour = (hour <= 12) ? hour : hour-12;
System.out.println("目前時間為:" + hour + (hour < 12) ? "AM" : "PM");