零基礎學程式設計 04 條件分支結構

2021-09-10 02:08:08 字數 4720 閱讀 7160

乙個陽光明媚的晚上,李華的爸爸老王對李華說,「你去買5個包子,如果遇到賣西瓜的,買乙個。」李華陷入了沉思:這是個有趣的任務,但是程式設計該怎麼實現呢?

之前我們寫的**都是順序結構。所謂順序結構,就是從第一行開始,一行一行按順序執行。但這種結構無法解決上面的問題,為此需要引入if語句。先來看乙個例子,這樣有乙個直觀的認識。

int a =2;

if(a >0)

這就是乙個最簡單的語句,if後面是乙個條件,當滿足條件時會執行大括號中的內容,不滿足則跳到大括號結束。這個語句很容易理解,if是「如果」的意思,就是說,如果a>0,則把a顯示到螢幕上。

在解釋if語句之前,先來講一下布林型別。

作為資料型別

int,double,char類似,我們要講的布林型別bool也是一種資料型別。它只有兩個值,truefalse,表示真和假。

bool flag =

true

;

這樣就定義了乙個值為truebool型別變數。

關係運算子

許多關係運算子會返回布林值,例如>(大於),<(小於),==(等於,特別注意是兩個等號),!=(不等於),>=(大於或等於),<=(小於或等於)。寫下5 > 2就相當於寫下了true3+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當且僅當ab都為true時為truea || b只要ab有乙個為true他就為true!a則是反過來,atrue!afalseafalse!atrue。這和我們對邏輯的直觀認識是一樣的。

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

《注》:初學者可能對a = a+1這個語句表示疑惑,要注意c++中的等號=並不是數學上的相等,而是賦值的意思,這句話的意思是,把a+1的值2賦值給a,因此執行完a變成了2.

還可以加入else

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 ifelse,否則判斷表示式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當作falsea = 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萬的西二旗程式猿們?可是每個人條件不同,理想很豐滿,現實很骨感。有些非計算機專業的同學學習程式設計還是有些吃力。其實要想短時間內學會一門程式語言也不是沒有可能。本系列教程就是想給零基礎的同學帶入到程式設計這個神奇的世界中,凡事只要入門了後面學起來就會快起來。...