循序判斷語法
初寫:2003.04.20, 更新日期:2021.12.23
 
作者:曾聖超老師
 
C語言條件敘述: 概念簡分為單路選擇、雙路選擇、跟多路選擇。
  • if (單路選擇)語法格式 :
    if ( 判斷條件 C1 )
       {
         符合條件欲執行工作
       }


    • 如果符合判斷式C1,則執行工作區1繼續執行工作區2.
    • 如果不符合判斷式C1,跳過工作區1繼續執行工作區2.



    • 練習1:請輸入下列程式


    • 作業1: 輸入大於60的數,並寫下結果。
    • 作業2: 輸入小於60的數,並寫下結果。
    • 作業3.

    • 流程圖



  • 條件的判斷: 比較運算子(Comparison Operator)
    算子 範例 結合 備註
     >  a > b  比較a大於b  
     <  a < b  比較a小於b  
     ==  a == b  比較a,b是否相等  
     !=  a != b  比較a,b是否不相等  
     >=  a >= b  比較a大於或等於b  誤:a=>b
     <=  a <= b  比較a小於或等於b  誤:a=<b
    a, b 位置可以是單一變數、數值、運算式。

  • if - else  語法格式 (雙路選擇):
    if ( 判斷條件C1 )
      {
         符合條件執行程式區一;
         ...
      }
    else
     {
         不符合條件之程式區二;
         ...
     }



  • if - else if - else 語法格式(多重選擇):
    if ( 條件C1 )
     {
         符合C1之執行區1;
     }
    else if ( 條件C2 )
     {
         符合C2之執行區2;
     }
    else if ( 條件C3 )
     {
         符合C3之執行區3;
     }
     ...

    else
    {
         如果都沒有符合上述的判斷條件時,
         執行區;
    }
    運作流程:
    若符合條件C1,則執行程式區1後,退出整個判斷;
    若不符合條件C1,則接著至判斷條件C2,
    若符合條件C2,則執行程式區2後,退出判斷;
    不符合條件C2,則繼續判斷條件C3;
    依此類推,
    最後,若都不符合上述所有條件時,
    則執行else內的 執行工作,然後退出判斷。


    • 範例練習:

    • 實作1: 請問當grade=101時,結果為何?
    • 實作2: grade = -1時,你的程式輸出結果為何?
    • 實作3: 如果分數範圍不在0~100,程式要求要輸出Error Input,
      程式又須如何修改(code紀錄至講義)。


  • 條件的結合: 邏輯運算子(Logical Operator)( A, B為條件 )
    算子 範例 結合 備註
     &&  A && B  將 A, B 條件作 And 運算  A  B
     ||  A || B  將 A, B 條件作 OR 運算  A  B
     !  ! A  將 A 條件作 Not 運算  非 A
    • 實作:
      1. 二元運算子在 (90 ≦ score ≦ 100) 的寫法.
      2. if(90<=score<=100) ?


  • 實作練習
    • 求體指數(Body Mass Index, BMI)
      BMI=(體重,Kilograms)/(身高的平方,Meters)
      標準:
      Below 18.5(含)  太瘦(Underweight)
      18.5–25.0(含)  正常(Normal)
      25.0–30.0(含)  過重(Overweight)
      30.0–35.0(含)  肥胖(Obese)
      35.0–         過度肥胖(Too Fat)

      ================================
      Input Height(cm):170.0 
      Input Weight(kg):60.0
      bmi=20.76
      正常(Normal)
      ================================


    • 輸入一正整數,判斷輸入為奇數,或是偶數!
      Input a number:7
      7 is odd number.
      Input a number:6
      6 is even number.

    • 張三是一個農夫,每日上山砍柴,他為了要能將砍回來的木條堆棧起來,
      必須將不同長度的木條排成三角形,假如木條的長度都是整數,

      請寫一個程式幫助張三判斷,
      每次拿的三條木條能否構成三角形?
      輸出: 可構成三角形(Yes), 不能構成三角形(No)

      Input triangle lengths:6 3 4
      Yes
      Input triangle lengths:1 3 1
      No

    • 請寫一個寫程式判斷,西元某一年,是不是閏年(leap year)?
      說明:地球公轉的平均週期365.2422日,早在埃及時期,就知道一年約有365.25日,
      到了羅馬凱薩大帝,規定每四年一閏(就是閏年是366日),這樣一來可彌補這個差異。
      但0.2422和0.25仍有誤差,過了1500年後,發現誤差大到影響天數,
      故教皇Gregory採用天文學家建議,訂出後來使用的格里曆閏年,規則如下:
      西元年:
      1.不可被4整除,為平年。
      2.可被4整除,且不可被100整除,為閏年。
      3.可被100整除,且不可被400整除,為平年。
      4.可被400整除,為閏年。

      輸出:是閏年輸出 Yes , 否則輸出 No

      Input year:
      1972
      1999
      2020

      Output:
      Yes
      No
      Yes


  • 判斷語法的精簡式(三元運算子) :
    ( 判斷運算式 ) ? ( 運算1 ) : ( 運算2 );
    此判斷運算式Condition,可寫成一個Boolean運算式
    若判斷條件運算為(true),則執行運算式1;若為不符合(false),則執行運算式2。

    範例:
    var = x ? y : z;
    等同於下面:
    if( x )  var = y;
    else     var = z;
    在C的判斷語法中,判斷條件若不等於零時,運算結果為真(true).


    例子:
    if( i>j )
         k = i;
    else
         k = j;

    可寫成:
    k = ( i>j ) ?  i : j

參考資料: