C語(yǔ)言課件:第5章 選擇語(yǔ)句_第1頁(yè)
C語(yǔ)言課件:第5章 選擇語(yǔ)句_第2頁(yè)
C語(yǔ)言課件:第5章 選擇語(yǔ)句_第3頁(yè)
C語(yǔ)言課件:第5章 選擇語(yǔ)句_第4頁(yè)
C語(yǔ)言課件:第5章 選擇語(yǔ)句_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1第5章選擇語(yǔ)句 本章要點(diǎn)邏輯表達(dá)式if語(yǔ)句switch語(yǔ)句語(yǔ)句現(xiàn)在我們見(jiàn)過(guò)了return語(yǔ)句和表達(dá)式語(yǔ)句。C語(yǔ)言的語(yǔ)句:選擇語(yǔ)句:if和switch語(yǔ)句。循環(huán)語(yǔ)句:while,do和for語(yǔ)句。跳轉(zhuǎn)語(yǔ)句:break,continue和goto語(yǔ)句,return語(yǔ)句也算此類(lèi)。復(fù)合語(yǔ)句:把幾條語(yǔ)句組合成一條語(yǔ)句??照Z(yǔ)句:不執(zhí)行任何操作。5.1 邏輯表達(dá)式包括If語(yǔ)句在內(nèi)的一些C語(yǔ)句必須測(cè)試表達(dá)式的值為“真(true)”或“假(false)”。例如if語(yǔ)句要檢測(cè)表達(dá)式ij,真值表明i小于j。在許多編程語(yǔ)言里面類(lèi)似ij的表達(dá)式具有“布爾”類(lèi)型或“邏輯”類(lèi)型,值為真或假。而C語(yǔ)言的運(yùn)算產(chǎn)生整數(shù):0(假

2、)或1(真)5.1.1 關(guān)系運(yùn)算符C的關(guān)系運(yùn)算符如下: 大于 =大于等于關(guān)系運(yùn)算符應(yīng)用于表達(dá)式中的結(jié)果: 0(假)或 1(真)。關(guān)系運(yùn)算符可用于比較整數(shù)和浮點(diǎn)數(shù),也允許比較混合類(lèi)型操作數(shù)。關(guān)系運(yùn)算符關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符。 i + j k - 1 意味著:(i + j) (k - 1 )關(guān)系運(yùn)算符是左結(jié)合。表達(dá)式i j k是合法的,等價(jià)于: (i j) k,ij的結(jié)果(1或0)再與k比較大小。如果想檢測(cè)j的值是否在i和k之間,得用邏輯表達(dá)式,單純的關(guān)系運(yùn)算是不行的,如下: i j & j k 5.1.2 判等運(yùn)算符C的判等運(yùn)算符如下: = 等于 !=不等于判等運(yùn)算符和關(guān)系運(yùn)算符一樣是

3、左結(jié)合,結(jié)果也是0(假)或 1(真)。判等運(yùn)算符的優(yōu)先級(jí)低于關(guān)系運(yùn)算符。 表達(dá)式 i j = j k 相當(dāng)于 (i j) = (j y & x+ = y-; 結(jié)果:b=0,x = 3,y = 5短路計(jì)算例子1:int b, x = 3, y = 5;b = x y & x+ = y-; 結(jié)果:b=0,x = 3,y = 5例子2:int b,x = 9, y = 5;b = x y | x+ = y-; 結(jié)果:b=1,x = 9,y = 5若程序中出現(xiàn)兩個(gè)例子的語(yǔ)句,對(duì)程序有什么影響?不要出現(xiàn)類(lèi)似寫(xiě)法!若x=5,y=3則結(jié)果變成:b=0,x=6, y=2優(yōu)先級(jí)名稱(chēng)符號(hào)結(jié)合性1(后綴)自增、自減

4、+ -左結(jié)合2(前綴)自增、自減+ -右結(jié)合一元正號(hào)、負(fù)號(hào)+ -右結(jié)合一元邏輯運(yùn)算符非!右結(jié)合3乘法類(lèi)* / %左結(jié)合4加法類(lèi)+ -左結(jié)合5關(guān)系運(yùn)算符 = =左結(jié)合6判等運(yùn)算符= !=左結(jié)合7二元邏輯運(yùn)算符與&左結(jié)合二元邏輯運(yùn)算符或 |左結(jié)合8賦值= *= /= %= += -=右結(jié)合例:判斷閏年 閏年的條件是:(1)能被4整除,但不能被100整除的年份都是閏年,如1996,2004年是閏年;(2)能被100整除,又能被400整除的年份是閏年。如1600,2000年是閏年。不符合這兩個(gè)條件的年份不是閏年。問(wèn):如何利用邏輯表達(dá)式描述“某年是閏年”這個(gè)條件? 答: year%4=0 & year%

5、100!=0 | year%400=0如果優(yōu)先級(jí)結(jié)合性記不住,可以用括號(hào):5.2 if語(yǔ)句if 語(yǔ)句最簡(jiǎn)單的格式:if (表達(dá)式) 語(yǔ)句語(yǔ)句假(0)表達(dá)式真(非0)計(jì)算 (表達(dá)式)的值if語(yǔ)句的表達(dá)式能判定變量是否落在某個(gè)數(shù)值范圍內(nèi),如判定 0 i n 是否成立:if (0 = i & i n) 相反情況判定:if (i = n) 5.2.1 復(fù)合語(yǔ)句為了讓if語(yǔ)句處理多條語(yǔ)句,就需要引入復(fù)合語(yǔ)句(compound statement):多條語(yǔ)句例子:if (line_num = MAX_LINES) line_num = 0; page_num+; 復(fù)合語(yǔ)句也出現(xiàn)在循環(huán)和其他需要多條語(yǔ)句,但

6、C語(yǔ)言語(yǔ)法卻要求是一條語(yǔ)句的地方。5.2.2 else子句if (表達(dá)式) 語(yǔ)句1else 語(yǔ)句2 語(yǔ)句1 語(yǔ)句2非00表達(dá)式例子:if (i j) max = i;else max = j;if語(yǔ)句的嵌套/找出i、j和k中的最大值if (i j) if (i k) max = i; else max = k;else if (j k) max = j; else max = k;/增加花括號(hào),增強(qiáng)可讀性if (i j) if (i k) max = i; else max = k; else if (j k) max = j; else max = k;5.2.3 級(jí)聯(lián)式if語(yǔ)句if (表達(dá)

7、式1 )語(yǔ)句1else if(表達(dá)式2)語(yǔ)句2else if(表達(dá)式3)語(yǔ)句3else if(表達(dá)式m)語(yǔ)句melse 語(yǔ)句n級(jí)聯(lián)式if語(yǔ)句if (n 0) printf(n is less than 0n);else if (n = 0) printf(n is equal to 0n);else printf(n is greater than 0n);例子:計(jì)算股票經(jīng)紀(jì)人的傭金股票經(jīng)紀(jì)人的傭金計(jì)算表:交易額范圍傭金費(fèi)用低于$2,500$30 + 1.7%$2,500$6,250$56 + 0.66%$6,250$20,000$76 + 0.34%$20,000$50,000$100 +

8、0.22%$50,000$500,000$155 + 0.11%超過(guò)$500,000$255 + 0.09%最低收費(fèi)39美元。broker.c要求用戶(hù)輸入交易額,然后顯示傭金數(shù)額:Enter value of trade: 30000Commission: $166.00 /* Calculates a brokers commission */#include int main(void) float commission, value; printf(Enter value of trade: ); scanf(%f, &value);if (value 2500.00f) commiss

9、ion = 30.00f + .017f * value;else if (value 6250.00f) commission = 56.00f + .0066f * value;else if (value 20000.00f) commission = 76.00f + .0034f * value;else if (value 50000.00f) commission = 100.00f + .0022f * value;else if (value 500000.00f) commission = 155.00f + .0011f * value;else commission =

10、 255.00f + .0009f * value;if (commission j ? i : j;/* k is now 2 */k = (i = 0 ? i : 0) + j;/* k is now 3 */條件運(yùn)算符的優(yōu)先級(jí),只比賦值運(yùn)算符高,比其他的都低。例子例:if(ab) max=a; else max=b;替換為:max=(ab)?a:b;可以應(yīng)用于return語(yǔ)句:return i j ? i : j;可以應(yīng)用于printf語(yǔ)句:printf(%dn, i j ? i : j); 5.2.6 C89中的布爾值C89沒(méi)有定義布爾值類(lèi)型??梢远x一個(gè)int變量,賦值為0或1:in

11、t flag;flag = 0;flag = 1;5.2.6 C89中的布爾值為了程序更便于理解,可以定義宏:#define TRUE 1#define FALSE 0使用上述的宏:flag = FALSE;flag = TRUE;例子判定flag為真if (flag = TRUE) 或:if (flag) 判定flag為假if (flag = FALSE) 或:if (!flag) 定義類(lèi)型的宏定義一個(gè)int型的宏:#define BOOL int#define TRUE 1#define FALSE 0聲明布爾型時(shí)就用BOOL代替intBOOL flag=TRUE;5.2.7 C99中的布

12、爾值*C99中提供了 _Bool類(lèi)型:_Bool flag;_Bool是一個(gè)整型值(無(wú)符號(hào)整型),只能賦值為 0或1。往_Bool變量中存儲(chǔ)非零值會(huì)使值變?yōu)?1:flag = 5; /* flag is assigned 1 */C99中的布爾值C99提供了一個(gè)新頭文件 ,該文件提供了bool宏。如果包括了 ,我們可以這樣寫(xiě):bool flag; /* same as _Bool flag; */頭還提供了 true和false兩個(gè)宏表示1和0:flag = false;flag = true;5.3 switch語(yǔ)句可以用級(jí)聯(lián)式if語(yǔ)句,把表達(dá)式和一系列值比較: if (grade = 4)

13、 printf(Excellent);else if (grade = 3) printf(Good);else if (grade = 2) printf(Average);else if (grade = 1) printf(Poor);else if (grade = 0) printf(Failing);else printf(Illegal grade);switch語(yǔ)句C語(yǔ)言提供switch語(yǔ)句做為上頁(yè)用法的替換 switch (grade) case 4: printf(Excellent); break; case 3: printf(Good); break; case 2:

14、 printf(Average); break; case 1: printf(Poor); break; case 0: printf(Failing); break; default: printf(Illegal grade); break;switch語(yǔ)句switch語(yǔ)句比級(jí)聯(lián)式if語(yǔ)句更容易閱讀,執(zhí)行速度也快。其格式如下:switch (表達(dá)式) case 常量表達(dá)式1: 語(yǔ)句1case 常量表達(dá)式2: 語(yǔ)句2case 常量表達(dá)式n: 語(yǔ)句ndefault :語(yǔ)句n + 1switch語(yǔ)句一般形式:switch( 表達(dá)式) case E1: 語(yǔ)句組 1; break; case E2

15、: 語(yǔ)句組 2; break; . case En: 語(yǔ)句組 n; break; default: 語(yǔ)句組 ; break; switch語(yǔ)句控制表達(dá)式: switch后邊的表達(dá)式要求是整型(C語(yǔ)言字符也是當(dāng)成整數(shù)處理),不能用浮點(diǎn)數(shù)和字符串。分支標(biāo)號(hào): case 常量表達(dá)式常量表達(dá)式不能包含變量和函數(shù)調(diào)用。語(yǔ)句:每個(gè)分支標(biāo)號(hào)后可以跟任意數(shù)量的語(yǔ)句,不需要花括號(hào)語(yǔ)句最后通常是break語(yǔ)句switch語(yǔ)句多個(gè)分支共用一組語(yǔ)句: switch (grade) case 4: case 3: case 2: case 1: printf(Passing); break; case 0: print

16、f(Failing); break; default: printf(Illegal grade); break;switch語(yǔ)句為了節(jié)省空間,可把多個(gè)分支放一行。switch (grade) case 4: case 3: case 2: case 1:printf(Passing);break;case 0: printf(Failing);break;default: printf(Illegal grade);break;不要求必須有default,如果沒(méi)有,控制表達(dá)式的值和任何分支都不匹配,就會(huì)傳給switch后面的語(yǔ)句。break的作用執(zhí)行break語(yǔ)句,就可以跳出switch語(yǔ)句

17、,繼續(xù)執(zhí)行switch后面的語(yǔ)句。如果沒(méi)有break語(yǔ)句,就會(huì)從一個(gè)分支繼續(xù)到下一個(gè)分支。例子:switch (grade) case 4: printf(Excellent); case 3: printf(Good); case 2: printf(Average); case 1: printf(Poor); case 0: printf(Failing); default: printf(Illegal grade);如果grade等于3,結(jié)果為:GoodAveragePoorFailingIllegal grade例子:顯示法定格式的日期要求按下列格式顯示日期:Dated this

18、_ day of _ , 20_.要求用戶(hù)以mm/dd/yy方式錄入日期,然后按上面方式顯示Enter date (mm/dd/yy): 7/19/14Dated this 19th day of July, 2014.用switch語(yǔ)句為日添加“th” (或“st”、 “nd” 、“rd”) 。date.c#include int main(void) int month, day, year; printf(Enter date (mm/dd/yy): ); scanf(%d /%d /%d, &month, &day, &year); printf(Dated this %d, day); switch (day) case 1: case 21: case 31: printf(st); break; case 2: case 22: printf(nd); break; case 3: case 23: printf(rd); break; default: printf(th); break; printf( day of ); switch (month

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論