乙個陽光明媚的晚上,李華的爸爸老王對李華說,「你去買5個包子,如果遇到賣西瓜的,買乙個。」李華陷入了沉思:這是個有趣的任務,但是程式設計該怎麼實現呢?
之前我們寫的**都是順序結構。所謂順序結構,就是從第一行開始,一行一行按順序執行。但這種結構無法解決上面的問題,為此需要引入if
語句。先來看乙個例子,這樣有乙個直觀的認識。
int a =2;
if(a >0)
這就是乙個最簡單的語句,if後面是乙個條件,當滿足條件時會執行大括號中的內容,不滿足則跳到大括號結束。這個語句很容易理解,if是「如果」的意思,就是說,如果a>0,則把a顯示到螢幕上。
在解釋if
語句之前,先來講一下布林型別。
作為資料型別
和int
,double
,char
類似,我們要講的布林型別bool
也是一種資料型別。它只有兩個值,true
和false
,表示真和假。
bool flag =
true
;
這樣就定義了乙個值為true
的bool
型別變數。
關係運算子
許多關係運算子會返回布林值,例如>
(大於),<
(小於),==
(等於,特別注意是兩個等號),!=
(不等於),>=
(大於或等於),<=
(小於或等於)。寫下5 > 2
就相當於寫下了true
,3+2 != 5
就相當於false
。
bool b1, b2, b3;
int a =
4, b =8;
b1 =
(a <=2)
;// b1為false
b2 =
(a*2
== b)
;// b2為true
b3 = b1;
// b3為false
邏輯運算子
布林值也可以進行運算,運算子為&&
(與),||
(或),!
(非)。前兩個是二元運算子,最後乙個是一元運算子。a && b
當且僅當a
和b
都為true
時為true
,a || b
只要a
和b
有乙個為true
他就為true
,!a
則是反過來,a
為true
時!a
為false
,a
為false
時!a
為true
。這和我們對邏輯的直觀認識是一樣的。
bool b1, b2, b3;
b1 =(4
<=2)
;// b1為false
b2 =
!b1;
// b2為true
b3 =
(b1 && b2)
;// b3為false
接下來可以講if
語句了,語法是:
if
(表示式)
表示式為布林值,當表示式為true
時,執行大括號中的語句,否則跳過大括號。
int a =1;
if(a <=1)
cout << a;
//輸出2
《注》:初學者可能對還可以加入elsea = a+1
這個語句表示疑惑,要注意c++中的等號=
並不是數學上的相等,而是賦值的意思,這句話的意思是,把a+1
的值2賦值給a
,因此執行完a
變成了2.
if
(表示式)
else
如果表示式為true
,執行第乙個大括號裡的語句,否則執行第二個大括號的語句。
int a =1;
if(a >1)
else
cout << a;
//輸出2
else後面也可以繼續寫if,就像這樣
if
(表示式1
)else
if(表示式2
)else
if(表示式3
)else
中間的else if
可以重複任意多次,最後的else可以省略。它的執行過程是,先判斷表示式1,若為true
,執行第乙個大括號裡的內容,然後跳過後面的所有else if
和else
,否則判斷表示式2,若為true
執行第二個大括號,然後跳過後面的,否則判斷表示式3,以此類推。如果所有表示式都是false
,則執行else裡面的內容。
int a =
10, b;
if(a >
100)
else
if(a >50)
else
if(a >5)
else
if(a >0)
else
cout << b;
//輸出5
現在我們可以考慮開頭的問題了:買5個包子,如果遇到賣西瓜的,買乙個。寫成**是:下面講兩個比較隱蔽的錯誤。然後,李華開心地拿著乙個包子回家了……int a;
if(遇到賣西瓜的)
else
買包子(a個)
;
非零即真
看這個例子:
int a =5;
if(a =6)
else
a的值是5,因此a等於6是錯的,所以應該輸出false,但實際上輸出的是true,為什麼呢?如果前面看的仔細就會發現問題:第2行判斷相等應該是a == 6
而不是a = 6
,兩個等號重合在一起,而這兩個等號,又給我們帶來了更多的等號,但是,為什麼會變成這樣呢?打死白學家!
原來,c++在判斷邏輯值的時候遵循「非零即真」的原則,對於非布林值,只要不是0就當作true
,0當作false
。a = 6
這條語句會把a
賦值為6,相當於if(6)
,6不是0,因此會按照true
來處理。這是乙個很隱蔽的錯誤,由於符合語法,編譯器不會報錯,因此難以發現,一定要注意兩個等號才是關係運算子,乙個等號是賦值。
避免此類錯誤的乙個小技巧是把常量寫前面,例如a == 6
寫成6 == a
,這樣如果不小心寫成了6 = a
,編譯器會報錯,很容易發現。
大括號不要丟
c++靠大括號來確定**的結構,縮排只是為了人看著舒服,編譯器會忽略。如果不寫大括號,只有後面的第一行語句受if影響。這是另外乙個隱蔽的bug。
if
(false
) cout <<
"first line\n"
; cout <<
"second line\n"
;
這段**會輸出second line,因為它相當於如下**:
if
(false
)cout <<
"second line\n"
;
因此乙個好習慣是,if後面一律使用大括號,即使只有一行語句。(以後要講的for、while同理)
bool是一種資料型別,值為true或false。a < b
這種關係表示式會返回布林值。
可以用&&
,||
,!
對bool型別進行邏輯運算。
記住if、if … else、if … else if … else的用法。
注意賦值要用兩個等號,盡量不要省略大括號。
編寫乙個程式,從鍵盤輸入乙個1~12的整數,輸出這個月有幾天。
樣例:輸入:
10
輸出:31
思考這段**的執行結果,執行一下看看你想的對不對
#include
using
namespace std;
intmain()
Python基礎04 條件控制
目錄python 條件語句是通過一條或多條語句的執行結果 true 或者 false 來決定執行的 塊。python中if語句的一般形式如下偽 所示 if語句 if 判定條件1 執行 1 elif 判定條件2 執行 2 else 執行 3如果判定條件1為true,執行執行 1 如果為false,判斷...
零基礎學習01(條件,迴圈和其他語句 )
一.print和import更多資訊 1.使用逗號輸出 列印多個表示式,將它們用逗號隔開 2.賦值魔法 多個賦值 交換變數 鏈式賦值 增量賦值 二.條件和條件語句 1.if語句和else,elif if語句,當if後面的表示式為真時執行 a int input input num if a 2 pr...
零基礎學程式設計系列一
每個人都有夢想,你是否也曾羨慕過那些月薪5萬的西二旗程式猿們?可是每個人條件不同,理想很豐滿,現實很骨感。有些非計算機專業的同學學習程式設計還是有些吃力。其實要想短時間內學會一門程式語言也不是沒有可能。本系列教程就是想給零基礎的同學帶入到程式設計這個神奇的世界中,凡事只要入門了後面學起來就會快起來。...