天天看點

《C語言程式設計》一 3.2 二分支選擇結構

使用二分支結構的形式主要有兩種,由使用基本的if語句實作,即if-else語句和省略else的if語句。在if語句中的條件表達式可由關系表達式或邏輯表達式組成。是以在講解if語句之前,首先介紹一下關系表達式和邏輯表達式。

例3-1的程式中,if((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0))的條件表達式中包含了關系運算符“==”(等于)和“!=”(不等于)。

關系運算符是二進制運算符,共有6個運算符,如表3-1所示。

《C語言程式設計》一 3.2 二分支選擇結構

關系表達式是由關系運算符将運算對象連接配接起來的式子,運算對象可以是常量、變量或者任何有效的c語言表達式。關系表達式的運算結果為邏輯值,如果表達式成立,結果為邏輯真,否則為邏輯假。在c語言中邏輯“真”用整數“1”來表示,邏輯“假”用整數“0”來表示。

關系運算符優先級低于算術運算符,關系運算符中,“<”,“>”,“<=”,“>=”的優先級高于“==”和“!=”的優先級。當多個關系運算符同時出現在一個表達式中,根據優先級決定計算順序,相同優先級的關系運算符按照從左到右的順序計算。

下面的關系表達式是有效的:

3<0,表達式不成立,結果為0。

7>6>5,7>6表達式成立,結果為1,再計算1>5,表達式不成立,結果為0。

若x=2,y=4,z=-5,則關系表達式x+3>y+z成立,結果為1。

若x=2,y=4,則關系表達式x!=3>y先計算3>y,結果為0,再計算x!=0,結果為1。

關系運算符也可以用來比較字元型資料,字元型資料按ascii碼值的大小比較。例如‘a’>‘a’結果為1,‘a’>‘b’結果為0。

注意 浮點數的比較不能用“==”或“!=”關系運算符,因為float型和double型的資料是由二進制方式存儲,都有精度限制。十進制小數沒有準确的二進制表示,是以浮點數判斷相等的方式一般采用判斷兩個數差的絕對值小于一個可以接受的範圍。例如浮點變量a,不能用if(a==0.0)判斷a是否等于0.0,而應轉換成if(a−0.0>1e−4)。

例3-1的程式中,if((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0))的條件表達式中包含了邏輯運算符“||”和“&&”。邏輯表達式能夠表達比關系表達式更複雜的條件。c語言中邏輯運算符包括“&&”(邏輯與)、“||”(邏輯或)和“!”(邏輯非)。

邏輯表達式是用邏輯運算符将運算對象連接配接起來的式子。運算對象可以是關系表達式和邏輯表達式。邏輯表達式的結果為真(1)或假(0)。表3-2是三種邏輯運算符的真值表。

《C語言程式設計》一 3.2 二分支選擇結構

邏輯與“&&”和邏輯或“||”為二進制運算符,邏輯非“!”為一進制運算符,“!”的優先級最高,“&&”的優先級次之,“||”的優先級最低。表3-3說明了算術運算符、關系運算符和邏輯運算符的優先級和運算的結合方向。

《C語言程式設計》一 3.2 二分支選擇結構

括号的優先級最高,它也可以使表達式更清晰易讀。

若x=2,y=4,z=5,下面的表達式是合法的邏輯表達式:

xz>x+y等價于z>(x+y),結果為0(假)。

z&&!y+2等價于z&&((!y)+2),結果為1(真)。

z||y&&!x等價于z||(y&&(!x)),結果為1(真)。

5&&-1,5和-1均為非0值,為真,進行“與”運算的結果為1(真)。

注意 邏輯表達式在求解中,并不是所有的運算符都執行,目前面的表達式已經能夠确定結果時,後面的運算符就不再執行。例如邏輯表達式a&&b&&c,當a為假時,不管b和c的值為真或假,結果均為假(0),是以當a為真時才判斷b的值,當b為真時才判斷c的值;表達式a||b||c,當a為真時,不管b和c的值為真或假,結果均為真(1),是以當a為假時才判斷b的值,當b為假時才判斷c的值。

在解決實際問題時,經常會遇到根據不同的情況采取不同的行為的情形。c語言中的分支結構就是根據條件值選擇要執行的語句,分支結果分為二分支選擇結構和多分支選擇結構,用if-else結構和switch-case結構實作。

基本的if語句有兩種形式,if語句和if-else語句。

1.if語句

最簡單的選擇語句具有如下的文法結構:

if(表達式)

語句;

如果表達式為真,則執行if結構内的語句,否則不執行該語句,直接執行if結構後面的語句。執行流程如圖3-1所示。

if語句中的表達式可以是任何表達式,如關系表達式、邏輯表達式或算術表達式,也可以是整數,隻要表達式的值為0(假)或非0(真)即可。

《C語言程式設計》一 3.2 二分支選擇結構

【例3-2】 從鍵盤上輸入一個整數,求其絕對值。

/*

程式名:prg3-2.c

功能:求一個整數的絕對值

輸出結果為:

例3-2中如果輸入為正數或零,則跳過if語句直接列印;否則,執行if語句。

注意 如果if表達式為真時,要執行多條語句,要将多條語句用花括号括起來,構成一個複合句。一個複合句的通用格式如下:

例3-3說明了複合語句的使用。

【例3-3】 從鍵盤中輸入兩個數到little、large變量值中,如果little變量中的值大于large,則交換兩個變量的值。

如果表達式為真,執行語句1,否則執行語句2,兩者隻能選擇一個執行。當語句1或語句2有不止一條語句時構成複合語句,用花括号括起來,格式如下:

if-else結構的執行流程如圖3-2所示。

《C語言程式設計》一 3.2 二分支選擇結構

【例3-4】 從鍵盤輸入兩個數,輸出兩數相除的

結果。

運作結果1:

運作結果2:

繼續閱讀