中南大學(xué)c語言課件判斷結(jié)構(gòu).ppt_第1頁
中南大學(xué)c語言課件判斷結(jié)構(gòu).ppt_第2頁
中南大學(xué)c語言課件判斷結(jié)構(gòu).ppt_第3頁
中南大學(xué)c語言課件判斷結(jié)構(gòu).ppt_第4頁
中南大學(xué)c語言課件判斷結(jié)構(gòu).ppt_第5頁
已閱讀5頁,還剩27頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1,第四章 選擇結(jié)構(gòu)程序設(shè)計,關(guān)系運(yùn)算符和關(guān)系表達(dá)式 邏輯運(yùn)算符和邏輯表達(dá)式 if語句 switch語句 程序舉例,上一章介紹了最簡單的C程序設(shè)計,實(shí)際上是由輸入語句、賦值語句、輸出語句等組成的順序結(jié)構(gòu)程序。本章介紹選擇結(jié)構(gòu)程序設(shè)計,下章介紹循環(huán)程序設(shè)計。,2,一、關(guān)系運(yùn)算符,關(guān)系運(yùn)算符又稱比較運(yùn)算符,用來對兩個值進(jìn)行比較,判斷比較的結(jié)果是否符合給定的條件。,如 a 4 c 5 d = 3,關(guān)系運(yùn)算的結(jié)果為“真”(即“條件滿足”)或?yàn)椤凹佟保础皸l件不滿足”) 在C語言中,“真”用1表示,“假”用0表示。,4.1 關(guān)系運(yùn)算符和關(guān)系表達(dá)式,3, (大于) = (大于或等于) (小于) = (小于或等于) = (等于) != (不等于),高優(yōu)先級,低優(yōu)先級,c a = b a b = c a = b c,(c a) = b (a b) = c a = (b c),6種關(guān)系運(yùn)算符及其優(yōu)先級,一、關(guān)系運(yùn)算符,4.1 關(guān)系運(yùn)算符和關(guān)系表達(dá)式,4,用關(guān)系運(yùn)算符將兩個表達(dá)式連接起來構(gòu)成的式子叫做關(guān)系表達(dá)式。其中表達(dá)式可以是算術(shù)表達(dá)式、賦值表達(dá)式、字符表達(dá)式,也可以就是關(guān)系表達(dá)式,還可以是下節(jié)要介紹的邏輯表達(dá)式。 關(guān)系表達(dá)式的值是一個邏輯值,即“真”或“假”。 在C語言中,“真”用1表示,“假”用0表示。,例:a b a + b b + c (a = 3) (b = 5) a b,二、關(guān)系表達(dá)式,4.1 關(guān)系運(yùn)算符和關(guān)系表達(dá)式,5,例:若a = 3; b = 2; c = 1; 則: a b 的值為1 a b c 的值為0 b + c b) = c 的值為1;,注意: 關(guān)系運(yùn)算符是左結(jié)合 數(shù)值量比較:數(shù)字的大小 字符量比較:ASCII碼大小,二、關(guān)系表達(dá)式,4.1 關(guān)系運(yùn)算符和關(guān)系表達(dá)式,6,& 邏輯與 | 邏輯或 ! 邏輯非,雙目運(yùn)算符,單目運(yùn)算符,邏輯運(yùn)算符是指用形式邏輯原則來建立數(shù)值間關(guān)系的符號。 C語言的邏輯運(yùn)算符,一、邏輯運(yùn)算符,4.2 邏輯運(yùn)算符和邏輯表達(dá)式,7,邏輯運(yùn)算規(guī)則表,一、邏輯運(yùn)算符,4.2 邏輯運(yùn)算符和邏輯表達(dá)式,8,!(邏輯非) 算術(shù)運(yùn)算符 關(guān)系運(yùn)算符 & 和 | 賦值運(yùn)算符,高,低,a b & x y a = b | x = y ! a | a b b + ! a + c c = a | b,邏輯運(yùn)算符與其它運(yùn)算符的優(yōu)先級別,(a b) & (x y) (a = b) | (x = y) (!) | (a b) b + (! a) + c c = (a | b),一、邏輯運(yùn)算符,4.2 邏輯運(yùn)算符和邏輯表達(dá)式,9,用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來就構(gòu)成了邏輯表達(dá)式。,例:(a b) (!a) | (a b),邏輯表達(dá)式的值是一個邏輯值,即“真”或“假”。 邏輯運(yùn)算符兩側(cè)的運(yùn)算對象不但可以是0或1,或者是0或非0的整數(shù),實(shí)際上還可以是任何其它數(shù)值數(shù)據(jù)類型(如字符型、實(shí)型、指針型等)的數(shù)據(jù)。系統(tǒng)以其值為非0或0來判斷“真”或“假”。,二、邏輯表達(dá)式,4.2 邏輯運(yùn)算符和邏輯表達(dá)式,10,例1:a = 3; 則!a的值為0 例2:若a = 3, b = 4; 則a 則a & b | c的值為1 例4:“csu” & “changsha”的值為1 例5:(4 5) - !0的值為-1,二、邏輯表達(dá)式,4.2 邏輯運(yùn)算符和邏輯表達(dá)式,例:判斷下列邏輯表達(dá)式的值,11,二、邏輯表達(dá)式,4.2 邏輯運(yùn)算符和邏輯表達(dá)式,邏輯表達(dá)式求解中注意事項(xiàng),在邏輯表達(dá)式求解中,并不是所有原邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運(yùn)算符才能求出表達(dá)式的解時,才執(zhí)行該運(yùn)算符。,對a & b & c,若a為假(0)時,則不判斷b和c 對a | b | c,若a為真(非0)時,則不判斷b和c,#include main() int a=1, b=2, c=3, d=4, m=1, n=1; ( m = a b ) ,0,1,12,二、邏輯表達(dá)式,4.2 邏輯運(yùn)算符和邏輯表達(dá)式,關(guān)系表達(dá)式和邏輯表達(dá)式用途(表示復(fù)雜的條件),例:判別某一年year是否閏年。,閏年的條件是符合下面二者之一:能被4整除,但不能被100整除。能被400整除。,(year%4=0 & year%100!=0) | (year%400=0) !(year%4=0 & year%100!=0) | (year%400=0) (year%4!=0) | (year%100=0 & year%400!=0),非閏年,13,4.3 if語句,if語句是用來判定所給定的條件是否滿足,根據(jù)判定的結(jié)果(真或假)決定執(zhí)行給出的兩種操作之一,即用來實(shí)現(xiàn)選擇結(jié)構(gòu)。,一、if語句的三種形式,形式1: if (表達(dá)式) 語句,if (x y) printf(“%d”, x);,14,4.3 if語句,一、if語句的三種形式,形式2: if (表達(dá)式) 語句1 else 語句2,if (x y) printf(“%d”, x); else printf(“%d”, y);,15,4.3 if語句,一、if語句的三種形式,形式3: if (表達(dá)式1) 語句1 else if (表達(dá)式2) 語句2 else if (表達(dá)式3) 語句3 else 語句n+1,16,4.3 if語句,一、if語句的三種形式,. if (number5000) rate=0.15; else if (number3000) rate=0.10; else if (number1000) rate=0.075; else if (number500) rate=0.05; else rate=0; cost=number*rate; .,17,4.3 if語句,二、使用if語句的注意事項(xiàng),三種形式的if語句后面的表達(dá)式一般為邏輯表達(dá)式或關(guān)系表達(dá)式,但也可以是其它數(shù)值類型的表達(dá)式(如整型、實(shí)型、字符型和指針型),if (3) printf(“O. K.”); if (a) printf(“O.K.”); y = 0; if (y = 0) printf(“O.K.”); y = 0; if (!y) printf(“O.K.”);,18,4.3 if語句,二、使用if語句的注意事項(xiàng),如果語句i為多個操作語句,則必須用 括起來成為一個復(fù)合語句。,if ( r 0) circle = 2 * 3.1415926 * r; area = 3.1415926 *r *r; ,19,4.3 if語句,例1 輸入兩個實(shí)數(shù),按從小到大輸出。 #include main() float a,b,t; scanf(“%f, %f“, ,例2 輸入三個實(shí)數(shù),按從小到大輸出。 #include main() float a,b,c,t; scanf(“%f,%f,%f“, ,if(ab) t=a; a=b; b=t; printf(“%f,%fn“,a,b);,20,4.3 if語句,三、if語句的嵌套,在if語句中又包含一個或多個if語句稱為if語句嵌套。應(yīng)該注意if與else的配對關(guān)系。從最內(nèi)層開始,else總是與它上面最近的而且是未曾配對的if配對。試分析:,if ( ) if ( ) 語句1 else 語句2 else if ( ) 語句3 else 語句4,if ( ) if ( ) 語句1 else if ( ) 語句2 else 語句3,if ( ) if ( ) 語句1 else if ( ) 語句2 else 語句3,21,4.3 if語句,三、if語句的嵌套,例:下面實(shí)現(xiàn)函數(shù)的程序段哪些是正確的,哪些是錯誤的?,if (x0 ) y = -1; else if( x= =0) y=0; else y=1;,if ( x=0) if(x0) y=1; else y=0; else y=-1;,y=-1; if(x!=0) if(x0) y=1; else y=0;,y=0; if(x=0) if(x0) y = 1; else y = -1;,22,4.3 if語句,三、條件運(yùn)算符,if (ab) max=a; else max=b; 可改為: max=(ab) ? a: b;,若在if語句中,在表達(dá)式為“真”和“假”時,都只執(zhí)行一個賦值語句給同一個變量賦值,則可以用簡單的條件運(yùn)算符處理。如:,表達(dá)式1?表達(dá)式2:表達(dá)式3,條件運(yùn)算符要求三個操作對象,是C語言中唯一的三目運(yùn)算符。其一般形式為:,23,4.3 if語句,三、條件運(yùn)算符,max = ab ? a: b; max = (ab) ? a: b;,條件運(yùn)算符優(yōu)先于賦值運(yùn)算符,而低于算術(shù)運(yùn)算符和關(guān)系運(yùn)算符。,ab ? a: b + 1; ab ? a: (b+1);,條件運(yùn)算符的結(jié)合方向?yàn)樽杂蚁蜃蟆?ab? a: cb? a: (cd? c: d);,a = 1, b = 2, c = 3, d = 4; 則結(jié)果為3,24,4.3 if語句,三、條件運(yùn)算符,條件運(yùn)算符中表達(dá)式2和表達(dá)式3不僅可以是數(shù)值表達(dá)式,還可以是賦值表達(dá)式或函數(shù)表達(dá)式。,ab ? (a=100) : (b=100);,ab ? printf( “%d”, a): printf( “%d”, b);,printf( “%d”, ab ? a: b);,if (ab) printf( “%d”, a); else printf(“%d”, b);,25,4.4 switch語句,一、if語句與switch語句的區(qū)別,if語句只有兩個分支可供選擇。 switch語句可用于多個分支選擇 多分支選擇也可以用嵌套的if語句實(shí)現(xiàn),但程序冗長且可讀性差。,switch (表達(dá)式) case 常量表達(dá)式1: 語句1; case 常量表達(dá)式2: 語句2; case 常量表達(dá)式n: 語句n; default: 語句n+1; ,26,4.4 switch語句,例:根據(jù)考試成績的等級打印出百分制分?jǐn)?shù)段: switch (grade) case A:printf(“85100n”); case B:printf(“7084n”); case C:printf(“6069n”); case D:printf(“60n”); default :printf(“errorn”); ,27,4.4 switch語句,二、switch語句說明,switch后面括號內(nèi)的“表達(dá)式”可以是整型或字符表達(dá)式,也可以是枚舉型數(shù)據(jù)。新的ANSI標(biāo)準(zhǔn)允許上述表達(dá)式和case后的常量表達(dá)式為任何類型。 每一個case后的常量表達(dá)式的值必須互不相同。 各個case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。,case B :printf(“7084n”); case B :printf(“6069n”);,case C :printf(“6069n”); case B :printf(“7084n”);,28,4.4 switch語句,二、switch語句說明,在執(zhí)行switch語句時,根據(jù)switch后面表達(dá)式的值找到匹配的入口標(biāo)號,然后從此標(biāo)號開始執(zhí)行下去,不再進(jìn)行判斷。,switch (grade) case A:printf(“85100n”); case B:printf(“7084n”); case C:printf(“6069n”); case D:printf(“60n”); default :printf(“errorn”); ,break; break; break; break;,29,4.4 switch語句,二、switch語句說明,多個case可以共用一組執(zhí)行語句。,例:判斷閏年每個月的天數(shù),switch (month) case 2: printf(“this month has 29 daysn”); break; case 4: case 6: case 9: case 11: printf(“this month has 30 daysn”); break; default : printf(“this month has 31 daysn”); ,30,4.5 程序舉例,例1 有一函數(shù)(見下面),寫一程序,輸入x,輸出x和y。,#include main() int x, y; printf(“input x:”); scanf(“%d“, ,31,4.5 程序舉例,例2 給出一百分制成績,要求輸出成績等級及評語。 85100為A, 7084 為B, 6069 為C, 小于60為D 其它 為E。,#include main() int score; char grade; printf(“input score

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論