【不是惡夢的開始,而是再度的精進。】
在程式設計中,作決策是很基本的,就像是十字路口般,根據不同的選擇,程式的執行會有不同的方向與結果。當我們想要根據判斷條件的結果來執行不同的敘述時,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的另一種形式,可以這麼說嗎?
延伸閱讀
留言列表