close

【不是惡夢的開始,而是再度的精進。】

 

在程式設計中,作決策是很基本的,就像是十字路口般,根據不同的選擇,程式的執行會有不同的方向與結果。當我們想要根據判斷條件的結果來執行不同的敘述時,if判斷式會是一個很實用的選擇,它會忠實的測試判斷條件的值,再決定是否執行後面的敘述,if判斷式的格式如下: 

 

if(判斷條件)
{
  敘述1;
  敘述2;
  ....
  敘述n;
}


當if判斷條件為真時,則處理主體區塊內的敘述。若if判斷式主體區塊內的敘述主體中要處理的敘述只有一個,則可省略左右大括號。當if判斷條件為偽時,則跳到下一個敘述來執行。

 

例: 

#include<iostream>
using namespace std;

int main(int argc, char** argv)
{
    int mathi = 0;
    cout << "輸入數學分數 :  ";
    cin >> mathi ;
    cout << "\n\n";
    
    if(mathi < 60)
      cout << "不及格喔 . . .\n";
      cout << "數學成績 :  " << mathi ;
      cout << "\n\n";
      
      system("pause");
      return 0; 
 }

 

在範例中會不會輸出提醒成績不及格,完全是依據你輸入的數值來作判斷,當判斷式 mathi < 60 的時候,才會執行 cout << "不及格喔. . ."; 這一行的敘述,當 mathi >= 60 時,就是判斷條件為偽時,則當作沒事的跳到下一個敘述來執行。這是單一選擇要不要執行某一區塊敘述,然而有時候當判斷條件為偽時,我們會希望執行另一個區塊敘述,這時候就可以用 if-else 來處理,if-else 格式如下: 

 

if(判斷條件)
{
 敘述主體1;
}
else
{
敘述主體2;
}


例: 

#include<iostream>
using namespace std;

int main(int argc, char** argv)
{
    int mathi = 0;
    cout << "輸入數學分數 :  ";
    cin >> mathi ;
    cout << "\n\n";
    
    if(mathi < 60)
      cout << "不及格喔 . . .\n";
    else
      cout << "恭喜! 成績及格了喔...\n";  
      cout << "數學成績 :  " << mathi ;
      cout << "\n\n";
      
      system("pause");
      return 0; 
 } 

 
 當我們有兩個或更多的相關條件時,只使用if(判斷條件)會有一點麻煩,因此我們可以在判斷式中加入 &&(and) 或 ||(or) 或 !(not) 等邏輯運算來結合成一串成單一判斷式,以達到最終只需要一個if(判斷條件)。


我們舉 &&(and) 為例: 

#include<iostream>
using namespace std;

int main(int argc, char** argv)
{
    int mathi = 0;
    cout << "輸入數學分數 :  ";
    cin >> mathi ;
    cout << "\n\n";
    
    int engi = 0;
    cout << "輸入英文分數 :  ";
    cin >> engi;
    cout << "\n\n";
    
    if(mathi > 95 && engi > 95)
      cout << "高手一枚喔 . . .\n";
 
      cout << "數學成績 :  " << mathi;
      cout << "\n";
      cout << "英文成績 :  " << engi;
      cout << "\n\n"; 
      system("pause");
      return 0; 
 } 
 

 

此範例中必須數學與英文成績都大於95分時,才會執行  cout << "高手一枚喔 . . .\n"; 這一行敘述。而if判斷式中若有 &&(and) 邏輯時,會先判斷 && 前面的條件是否為真,若為真時才會繼續判斷 && 後面的條件是否為真,若 && 前面的條件為偽時則直接跳出判斷。乍看之下好像沒甚麼差別,可是當你把成績比較不容易過關的科目擺在 && 的前面時,只要這一科沒過關時就不必再作 && 後面的條件測試,當少數資料需要判斷時,似乎沒有甚麼差別,可是要判斷一百萬筆資料或更多資料時,速度上就會有差別了,此範例代表數學這一科比較不容易過關。


當if判斷條件為真實,所要執行的敘述本身也是一個if判斷式,就是敘述主體中又包含了if判斷式,就稱這個敘述為巢狀if,格式如下: 

 

if(判斷條件1)

  if(判斷條件2)
  {
    敘述主體2;
  } 
   ....
   其他敘述;
}

例:

 #include<iostream>
 using namespace std;
 
 int main(int argc, char** argv)
 {
      int mathi = 0;
      cout << "輸入數學分數  :   ";
      cin >> mathi;
      cout << "\n\n";
      
      int engi = 0;
      cout << "輸入英文分數  :  ";
      cin >> engi;
      cout << "\n\n";
      
      if(mathi > 95)
        {
            if(engi > 95)
              {
                  cout << "高手一枚喔....\n";
          }
        }
        
     cout << "數學成績 :  " << mathi;
     cout << "\n";
     cout << "英文成績 :  " << engi;
     cout << "\n\n";    
     
     system("pause");
     return 0;   
 }
 

 
 有沒有一種似曾相似的感覺,原來在if判斷式中使用 && 邏輯判斷,就是巢狀if的另一種形式,可以這麼說嗎?

 

 


延伸閱讀

[做中學 dev c++] dev c++

 

[伊蒙 dev c++] 視窗程式學習筆記

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 伊蒙‧普羅客 的頭像
    伊蒙‧普羅客

    面向陽光,陰影就會在身後

    伊蒙‧普羅客 發表在 痞客邦 留言(0) 人氣()