在日常生活中的很多時候,我們要進行判斷,比如說:判斷1+1是否等於2,今天的主食吃米飯還是饅頭,喜歡一個人到底要不要表白......咳咳,總之,需要做判斷的情況有很多很多。程序本就是為了解決問題而編寫的,自然也有很多需要進行判斷的地方。這一節的內容就是學會如何使用分支語句進行判斷。
在學習分支語句前先介紹一個新的數據類型:布爾值(bool)
在C++中,布爾值只有兩種,即真(true)和假(false),然后我們來看一下布爾表達式,布爾表達式是用來判斷布爾值為真還是假的表達式,例如:
1+1==2; //布爾值為真
1+1!=3; //布爾值為假
連接兩邊的叫做關系運算符,有下面幾種:(注意等於是兩個“=”)
下面我們學習最簡單的單分支if語句:
if(boolean-expression)//括號中的是一個布爾值,當其為真時,執行下面statement語句 { statement(s);//要執行的部分,有分號 }//注意括號要成對,沒有分號
然后我們來學習如何聲明布爾值,並在if分支語句中使用它:
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 bool boolean = 1; 8 //聲明一個bool類型的變量boolean,1或其他非0值表示true,0表示false; 9 if (boolean)//以if關鍵字開頭的分支語句,當括號內為真時,輸出true; 10 { 11 cout << "true"; 12 } 13 return 0; 14 }
運行后的結果就是輸出一個單詞“true”,如果將boolean = 1改成boolean = 0,那么運行的結果是什么都不輸出,因為boolean現在的值是false。
但是如果我們想知道boolean是什么的時候,我們可以使用雙分支if-else語句:
if(boolean-expression) { statement(s)-for-true-case; } else //如果布爾表達式不是true,執行下面語句 { statement(s)-for-false-case; }
舉個例子,如果我們想讓用戶輸入一個圓的半徑進而求出圓的面積,那么用戶就不能輸入小於0的數:
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 const double PI = 3.14159;//定義一個常量PI的數值為3.14159 8 double radius = 0,area = 0; 9 //定義double變量radius和area分別為圓的半徑和所求的面積 10 cin >> radius;//輸入圓的半徑 11 12 if(radius>=0)//判斷輸入的半徑是否合法 13 { 14 area = radius*radius*PI; 15 cout << "面積為:" << area; 16 } 17 else 18 { 19 cout << "無效輸入,請輸入不小於0的值"; 20 } 21 return 0; 22 }
如果statement只有一句(像上面else中的情況),可以不寫括號,但是並不建議,因為在修改時很容易造成錯誤。
然后就是if嵌套語句和多分支的if-else語句:
上圖中的a就是if嵌套語句,b則是多分支語句,兩者表達的意思一樣,但是第二種風格要更好一些。
接下來我們來學習邏輯運算符:
以及它們各自的真值表:
"!", "&&", "||" 分別表示離散數學中的邏輯非,邏輯與,邏輯或(相當於集合的補,交,並)。
比如說我要判斷一個整數是否大於10且小於等於20:
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int num = 0; 8 cin >> num; 9 10 if(num>10&&num<=20) 11 { 12 cout << "合法輸入" 13 } 14 else 15 { 16 cout << "非法輸入"; 17 } 18 return 0; 19 }
除了if,還有一種分支語句,是switch語句。switch語句可以簡化多重情況的分支語句。
switch(switch-expression) { case value1:statement(s)1;break; //當switch表達式匹配到的值為value1時,執行statement1語句,並且跳出語句塊 case value2:statement(s)2;break; //當switch表達式匹配到的值為value12時,執行statement2語句,並且跳出語句塊 ... case value1n:statement(s)n;break; //當switch表達式匹配到的值為valuen時,執行statementn語句,並且跳出語句塊 default:statement-for-default; //當switch表達式匹配不到給定的value時,執行statement-for-default語句后退出 } //上面代碼等同於下面代碼: if(if-expression==value1) { statement(s)1; } else if(if-expression==value2) { statement(s)2; } else ...if(if-expression==valuen) { statement(s)n; } else { statement-for-default; }
再來說一下條件表達式,它是C++中唯一一個三元運算符,格式如下:
bool-expression ? expression1 : expression2; //如果bool表達式為真,則表示expression1,否則為expression2 //相當於: if (bool-expression) { expression1; } else { expression2; }
運算符的優先級:
因為要記住這些優先級很麻煩,所以建議可以不用去記優先級,多用括號即可。