第五章選擇分支結構程式設計

2021-03-04 09:31:19 字數 4638 閱讀 6269

選擇結構是三種基本結構(順序、選擇、迴圈)之一。作用是根據所指定的條件是否滿足,決定從給定的兩組操作選擇其中的一種。

c語言中的選擇結構是用if語句實現的。if語句的常用的形式是:

if(關係/邏輯表示式)語句1 else 語句2

例5-1:用c語言實現圖示的分段函式。

數學上描述此分段函式:

1, x>0

y= -1, 其它

用c語言描述:

if(x>0)y=1;else y=-1;

其中:x>0是乙個關係表示式,「>」是乙個關係運算子。x>0關係表示式成立,也就是說由關係表示式x>0構成的邏輯運算為真時,y<=1,否則y<=-1。

5、1 關係運算子和關係表示式

關係運算是邏輯運算中比較簡單的一種,「關係運算」就是「比較運算」。即,將兩個值進行比較,判斷是否符合或滿足給定的條件。如果符合或滿足給定的條件,則稱關係運算的結果為「真」;如果不符合或不滿足給定的條件,則稱關係運算的結果為「假」。

例5-1中,x>0是比較運算,也就是關係運算,「>」是一種關係運算子。

假如x=4,那麼x>0條件滿足,就是說關係運算x>0的結果為「真」。

5.1.1 關係運算子及其優先次序

c語言提供6種關係運算子:

關於優先次序:

(1) 前4種關係運算子的優先級別相同,後兩種也相同。前4種高於後兩種。

(2) 關係運算子的優先順序低於算術運算子。

(3) 關係運算子的優先順序高於賦值運算子。

例5-2:

c>a+b 等價於 c>(a+b) ;關係運算子的優先順序低於算術運算子

a> b==c 等價於 (a>b)==c ;「>」優先順序高於「==」

a==ba=b>c 等價於 a=(b>c) ;關係運算子的優先順序高於賦值運算子。

5.1.2 關係表示式

用關係運算子將兩個表示式(算術、關係、邏輯、賦值表示式等)連線起來所構成的表示式,稱為關係表示式。

關係表示式的值是乙個邏輯值,即「真」或「假」。c語言沒有邏輯型資料,以1代表「真」,以0代表「假」。

例5-3:假如a=3,b=2,c=1,則:

關係表示式「a>b」的值為「真」,即表示式的值為:1。

關係表示式「b+c5、2 邏輯運算子和邏輯表示式

邏輯表示式:用邏輯運算子(邏輯與、邏輯或、邏輯非)將關係表示式或邏輯量連線起來構成邏輯表示式。

5、2、1 邏輯運算子及其優先順序

c語言提供三種邏輯運算子:

(1)&& 邏輯與(相當日常生活中:而且,並且,只在兩條件同時成立時為「真」)

(2)|| 邏輯或(相當日常生活中:或,兩個條件只要有乙個成立時即為「真」)

(3)! 邏輯非(條件為真,運算後為假,條件為假,運算後為真)

「&&」,「||」是雙目運算子,「!」是單目運算子。

例5-3:邏輯運算舉例

a&&b 若a、b為真,則a&&b為真。

a||b 若a、b之一為真,則a||b為真。

!a 若a為真,則!a為假,反之若a為假,則!a為真。

表5.1為邏輯運算的真值表

在乙個邏輯表示式中如果包含多個邏輯運算子,則按照以下的優先順序:

(1)!(非)-&&(與)-||(或),「!」為三者中最高。

(2)邏輯運算子中的&&和||低於關係運算子,!高於算術運算子。

例5-4:

a> b&&x>y 等價於 (a>b)&&(x>y)

a==b||x==y 等價於 (a==b)||(x==y)

!a||a>b 等價於 (!a)||(a>b)

5、2、2 邏輯表示式

邏輯表示式:用邏輯運算子(邏輯與、邏輯或、邏輯非)將關係表示式或邏輯量連線起來構成邏輯表示式。

邏輯表示式的值是乙個邏輯量「真」或「假」。c語言編譯系統在給出邏輯運算結果時,以1代表「真」,以0代表「假」,但在判斷乙個量是否為「真」時,以0代表「假」,以非0代表「真」(即認為乙個非0的數值是「真」)。

例5-5:非0值作為邏輯值參與運算=「真」(此時與1的作用一樣)

若a=4, 則!a=0(假)。

若a=4,b=5, 則a&b=1(真),a||b=1(真),!a||b=1(真)

4&&0||2=1(真)

『c』(真)&&』d』(真)=1

從例子還可以看出:系統給出的邏輯運算結果不是0就是1,不可能是其它數值。而在邏輯表示式中作為參與邏輯運算的運算物件可以是0(作為「假」)也可以是任何非0的數值(按「真」對待)。

事實上,邏輯運算子兩側的物件不但可以是0和1或者是0和非0的整數,也可以是任何型別的資料(如字元型、實型、指標型)。

如果在乙個表示式中不同位置上出現數值,應區分哪些是作為數值運算或關係運算的物件(原值),哪些是作為邏輯運算的物件(邏輯值)。

例5-6:計算:5>3&&2||8<4-!0 (注意運算子優先順序、數值所起作用-是邏輯值,原值)

在邏輯表示式的求解中,並不是所有的邏輯運算子都被執行,只是在必須執行下乙個邏輯運算子才能求出表示式的解時,才執行該運算子。

例如:a&&b&&c,只有a為真,才需要判別b的值;只有a、b都為真,才需要判別c的值。只要a為假,此時整個表示式已經確定為假,就不必判別b,c;如果a為真,b為假,不判斷c。

a||b||c,只要a為真,整個表示式已經確定為真,就不必判斷b和c;只有a為假,才判斷b;a、b都為假才判斷c。

例子:如果a,b,c,d,m,n分別為:1,2,3,4,1,1,分析整個表示式(m=a>b)&&(n=c>d)結果和m,n的結果。

由於「a>b」為假(0),所以賦值後m=0,賦值表示式m=a>b也為0。此時整個表示式的結果已經知道(0),所以不進行表示式n=c>d的計算,所以表示式計算機結束後,n=1(未改變)。

掌握c語言的關係運算子和邏輯運算子後,可以用乙個邏輯表示式來表示乙個複雜的條件。

例如:判斷某一年是否閏年。(閏年的條件是符合下面兩個條件之一:

1、能被4整除,但不能被100整除;2、能被4整除,又能被400整除)。因為能夠被400整除一定能被4整除所以第二個條件可以簡化為能夠被400整除。判斷閏年的條件可以用乙個邏輯表示式表示:

(year%4==0&&year%100!=0)||year%400==0

表示式為「真」,閏年條件成立,是閏年,否則非閏年。

5、3 if語句

if語句用來判定所給定的條件是否滿足,根據判定的結果(真或假)決定執行給出的兩種操作之一。

5、3、1 if語句三種形式

1、 if(表示式)語句

例如:if(x>y)printf(「%d」,x);

2、 if(表示式)語句1 else 語句2

例如:if(x>y)printf(「%d」,x);else printf(「%d」,y);

3、 if(表示式1)語句1

else if(表示式2)語句2

else if(表示式3)語句3

…else if(表示式m)語句m

else 語句m+1

(實際是else子句中巢狀if語句)

例如:if(number>500) cost=0.15;

else if(number>300)cost=0.10;

else if(number>100)cost=0.075;

else if(number>50) cost=0.05;

elsecost=0;

說明:(1) 三種形式的if語句中的「表示式」一般為關係表示式或邏輯表示式,但不限於這兩種表示式。記住:c語言中需要邏輯值的地方,只有0代表「假」,非0(其它)均代表「真」。

例如:if(『a』)printf(「%d」,』a』);- printf(…) 這條語句一定執行,因為』a』=97,即「真」。

例如:p198例11-13倒數12行,bit=(mask&n)?1:0。mask,n都是整數,&(位與)後也是整數。

(2) else子句不能單獨使用,必須是if語句的一部分,與if配對使用。

(3) 在if和else後面可以只含乙個內嵌的操作語句,也可以有多個操作語句構成的語句塊(復合語句)。語句塊用{}括起來,語句塊後面不要「;」號。

例如:if(a+b>c&&b+c>a&&c+a>b)

else printf(「it is not a ********」)

例5-1:輸入兩個實數,按數值由小到大的次序輸出這兩個數。(難點:交換資料演算法)

main()

例5-2:輸入三個數a,b,c,按照由小到大的順序輸出。

演算法:(偽**-三個數的選擇法排序)

if bif cif c輸出a,b,c。

main()

5、3、2 if語句的巢狀

if語句的巢狀:if語句的if塊或else塊中,由包含乙個if語句。一般形式:

if(…)

if(…)語句1;

else 語句2;

else

if(…)語句3;

else 語句4;

注意:應當注意if與else的配對關係。else總是與它上面的最近的未配對的if配對。特別是if/else子句數目不一樣時(if子句數量只會大於或等於else子句數量)。

例如:程式設計者希望下面的配對關係。但是它不符合程式設計者的原意。

if(…)

if(…)語句1;

else

if(…)語句2;

else 語句3;

if(…)

第五章分支結構

一 選擇題 1 經過以下語句定義後,表示式z x y?x y 的值為 int x 1,y 2,z 3 a.2 b.3 c.6 d.5 2 能正確表示邏輯關係 a 10或a 0 的c 語言表示式是 a.a 10 or a 0 b.a 0 a 10 c.a 10 a 0 d.a 10 a 0 3.已知i...

第五章迴圈結構程式設計

迴圈的執行形式 while 布林表示式 do 語句 例如 k 10 while k 0 do begin writeln k k k 1 end 其中 1 while 和do是pascal保留關鍵字,是while迴圈語句的組成部分。2 保留關鍵字do後面的 語法 只能是一條語句,稱為 迴圈體 如果迴...

第五章迴圈結構

一般形式 break 用於迴圈語句和switch語句中,作用是跳出它所在的迴圈語句或switch 語句。在多層迴圈中,乙個break語句只向外跳一層。break語句用在for while do while等迴圈體中時,常與if條件語句一起使用,用來加速迴圈,其一般形式是 while 表示式1 2 c...