第四章選擇結構程式設計

2021-03-04 09:39:16 字數 3833 閱讀 9073

選擇結構是結構化程式設計的三種基本結構之一。c語言用關係運算或邏輯運算來判斷條件是否能夠得到滿足,並根據計算的結果決定程式的不同流程,實現選擇結構的程式設計。

4.1 關係運算和邏輯運算

4.1.1 邏輯值及其在c語言中的表示

關係運算和邏輯運算的運算結果都是乙個邏輯值,邏輯值只有兩個值,即:「真」和「假」。在c語言中,沒有專門的「邏輯型別」,而是用數值1來表示「真」,用數值0來表示「假」,因此邏輯值也可以作為乙個整數參與算術運算。

4.1.2 關係運算子與關係表示式

所謂「關係運算」實際上就是「比較運算」,即將兩個資料進行比較,判定兩個資料是否符合給定的關係。例如,a > b中的「>」表示乙個大於關係運算。如果a的值是8,b的值是5,則這個關係運算的結果為「真」,即條件成立;如果a的值是6,b的值是9,則運算的結果為「假」,即條件不成立。

1.關係運算子及其優先順序

c語言提供了六種關係運算子,如表4.1所示。

表4.1關係運算子及其優先順序

在關係運算子中,前4個優先順序相同,後2個優先順序相同,且前4個的優先順序高於後2個。所有關係運算子的優先順序都比算術運算子的優先順序低、但都比賦值運算子的優先順序高。

需要注意的是有些運算子是由兩個字元組合而成的,如:」<=」,其兩個字元之間不能有空格。

2.關係表示式

用關係運算子將兩個表示式連線起來,進行關係運算的式子,稱為關係表示式。被連線的表示式可以是算術表示式、關係表示式、邏輯表示式、賦值表示式、字元表示式。例如:

a>b、(a+3)>(b-4)、』a』<』b』、a>c==b等都是合法的關係表示式。關係運算的運算結果實際上是乙個整數值:0或者1。

例如,假設n1=5,n2=8,n3=10,則:

(1)關係表示式n1==n2的值為0。

(2)關係表示式n1<=n3的值為1。

(3)關係表示式n1+n2>n3的值為1。

(4)關係表示式n1== n2>n3的值等為0。

注意:當需要比較兩個實型數是否相等時,應當避免使用x==y這樣的關係表示式,因為通常存放在記憶體中的實型數是有誤差的,因此有可能不能精確相等。這時可以根據其精度要求,用表示式fabs(x-y)<0.

000001來判斷兩個單精度實數x和y是否相等,用表示式fabs(a-b)<1e-14來判斷兩個雙精度實數a和b是否相等。

4.1.3 邏輯運算子與邏輯表示式

1.邏輯運算子及其優先順序

c語言提供了三種基本的邏輯運算子,如表4.2所示。在邏輯代數中還存在其它的邏輯運算,但它們都可以轉化為這三種基本的邏輯運算的組合。

表4.2 邏輯運算子及其優先順序

其中,「&&」和「||」運算子是雙目運算子,具有自左向右的結合性。「!」運算子是單目運算子,應該出現在運算物件的左邊,具有自右向左的結合性。

邏輯運算子與賦值運算子、算術運算子、關係運算子之間從高到低的運算優先次序是:

! (邏輯非)、算術運算子、關係運算子、&&(邏輯與)、||(邏輯或)、賦值運算子。

2.邏輯表示式

由邏輯運算子和運算物件所組成的表示式稱為邏輯表示式。邏輯運算的物件可以是c語言中任意合法的表示式。邏輯表示式的運算結果或者為1(「真」),或者為0(「假」)。

例如:在關係表示式(x>y)為真的條件下,若a值為10,b值為16,表示式(a>b)&&(x>y)的值為「假」,用數值0來表示;若a值為10,b值為6,表示式(a>b)&&(x>y)的值則為「真」,用數值1來表示。

對於參與關係運算或邏輯運算的任意乙個表示式,如果該表示式的值為零,就代表乙個邏輯「假」值;只要表示式的值不是零,無論是正數還是負數,都代表乙個邏輯「真」值。

邏輯運算子的運算規則如表4.3所示。

在c語言中,常用邏輯表示式來表示多個條件的組合。

如:(a!=0)&&(b*b-4*a*c>0)

表4.3 邏輯運算子的運算規則

數學表示式0 值得注意的是,c語言在求解邏輯表示式的值時,採用「非完全求解」的方法。即:當求出某個邏輯運算子的左邊的運算量的值就能夠明確地確定這個邏輯運算的結果時,就可以提前結束求解過程,直接給出運算結果。

例如:(1) a && b && c

若a的值為「假」,就不用再判別b和c的值,直接給出整個表示式的值為「假」;若a的值為「真」,b的值為「假」,則a && b的值為「假」,就不用再判別c的值,直接給出整個表示式的值為「假」。只有當a的值為「真」時,才需要判別b的值;只有當a&&b的值為「真」時,才需要判別c的值。

如:a=0;b=1;c=1;

d=a&&b&&(c=b+3)

運算結果是:d的值為0,c的值仍為1。

(2) a || b || c

若a的值為「真」,就不用再判別b和c的值,直接給出整個表示式的值為「真」;若a的值為「假」,b的值為「真」,則a || b的值為「真」,也可以直接給出整個表示式的值為「真」;只有a和b的值均為「假」時,才需要判別c的值。

如:a=1;b=0;c=0;

d=a||b||(c=b+3)

運算結果是:d的值為1,c的值仍為0。

4.2 if語句

if語句可以根據給定的條件進行判斷,決定執行某個分支程式段,以實現選擇結構的程式設計。

4.2.1 if語句的三種形式

c語言的if語句有3種形式:單分支if語句、雙分支if語句和多分支if語句。

1.單分支 if語句

單分支 if語句的形式為:

if(表示式)語句

執行單分支選擇語句時,首先判斷表示式的值,若為非0(即判定為邏輯「真」),則執行表示式後面的語句;若為0(即判定為邏輯「假」),則不執行表示式後面的語句。控制流程如圖4.1所示。

圖4.1 單分支選擇結構

說明:(1)if語句中的「表示式」一般為關係表示式或邏輯表示式,也可以是任何資料型別的表示式,以其值的非0或0來確定邏輯真假。

(2)if(表示式)後面的語句可以是一條語句,也可以是由多個語句組合而成的復合語句。例如:if (a例4.

1 輸入乙個數,如果該數大於等於0,則輸出它的平方根,當它小於0,則不做任何處理。

#include

main()

2.雙分支if語句

雙分支if語句的形式為:

if(表示式)

語句1else

語句2當表示式的值為非0時,執行語句1;當表示式的值為0時,執行語句2。控制流程如圖4.2所示。注意:else是if語句的一部分,必須與if配套,不能單獨使用。

例4.2 輸入任意三個整數n1、n2、n3,求三個數中的最大值。

程式如下:

main()

程式執行結果為:

please input three numbers:11,22,18↙

max=22

本例中的第1個if語句,可優化為如下不帶else的形式:

max=n1; if(n2>max) max=n2;

這種優化形式的基本思想是:首先取乙個數預置為max(最大值),然後再用max依次與其餘的數逐個比較,如果發現有比max大的,就用它給max重新賦值,比較完所有的數後,max中的數就是最大值。這種方法,對從3個或3個以上的數中找最大值的處理,非常有效。

請讀者仔細體會。

例4.3 輸入三個整數,分別放在變數a、b、c中,程式把輸入的資料重新按由小到大的順序放在變數a、b、c中,最後輸出a、b、c中的值。

程式如下:

main()

if (a>c)

/*至此三個數中最小的數已放入a中*/

if (b>c)

printf (「a=%d, b=%d, c=%d\n」, a, b, c);

}程式執行結果為:

input a, b, c: 62 34 24↙

a=62,b=34,c=24

a=24,b=34,c=62

3.多分支if語句

多分支if語句的形式為:

if(表示式1) 語句1

第四章選擇結構程式設計

4.1 選擇結構程式設計的概念 在實際工作中,常常需要根據某個條件是否成立,來決定下一步應該做什麼工作。編寫程式讓計算機工作,同樣存在這種情況。在這種情況下,程式不再按照 的書寫順序來執行各語句行的語句,而是根據給定的條件來選擇,執行哪些語句行,不執行哪些語句行。選擇結構程式也稱為分支構造程式,即程...

第四章選擇結構程式設計

4.2 case語句 case語句是由乙個表示式和眾多可選擇的操作序列組成。執行時,根據表示式的求值結果,在眾多的分支中選取乙個分支執行。其形式為 case 表示式 of 常量1 語句1 常量2 語句2 常量n 語句n else 語句 n 1 可選項 end 表示式只能是順序型別 除了實型以外的簡單...

c第四章選擇結構

第四章選擇結構程式設計 一關係運算和邏輯值.1 關係運算.1 關係運算子 2 關係運算的概念 關係運算實際比較運算,其值只有兩種真值或者假值.3 關係表示式 用關係運算子和括號將表示式聯接起來符合c語言語法規定稱為關係表示式.7 3 9 4 備註 關係運算 算術運算 賦值運算優先順序.算術 關係運算...