版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第5章: 選擇語句1第5章選擇語句選擇語句第5章: 選擇語句本章要點(diǎn)第5章: 選擇語句語句 現(xiàn)在我們見過了return語句和表達(dá)式語句。 C語言的語句: 選擇語句:if和switch語句。 循環(huán)語句:while,do和for語句。 跳轉(zhuǎn)語句:break,continue和goto語句,return語句也算此類。 復(fù)合語句:把幾條語句組合成一條語句。 空語句:不執(zhí)行任何操作。第5章: 選擇語句5.1 邏輯表達(dá)式 包括If語句在內(nèi)的一些C語句必須測試表達(dá)式的值為“真(true)”或“假(false)”。 例如if語句要檢測表達(dá)式ij,真值表明i小于j。 在許多編程語言里面類似ij的表達(dá)式具有“布爾
2、”類型或“邏輯”類型,值為真或假。 而C語言的運(yùn)算產(chǎn)生整數(shù):0(假)或1(真)第5章: 選擇語句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ù),也允許比較混合類型操作數(shù)。第5章: 選擇語句關(guān)系運(yùn)算符 關(guān)系運(yùn)算符的優(yōu)先級低于算術(shù)運(yùn)算符。 i + j k - 1 意味著:(i + j) (k - 1 ) 關(guān)系運(yùn)算符是左結(jié)合。 表達(dá)式i j k是合法的,等價于: (i j) k,ij的結(jié)果(1或0)再與k比較大小。 如果想檢測j的值是否在i和k之間,表達(dá)式如下: i j & j k 第
3、5章: 選擇語句5.1.2 判等運(yùn)算符 C的判等運(yùn)算符如下: = 等于 !=不等于 判等運(yùn)算符和關(guān)系運(yùn)算符一樣是是左結(jié)合,結(jié)果也是0(假)或 1(真)。 判等運(yùn)算符的優(yōu)先級低于關(guān)系運(yùn)算符。 表達(dá)式 i j = j k 相當(dāng)于 (i j) = (j 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第5章: 選擇語句優(yōu)先級優(yōu)先級名稱名稱符號符號結(jié)合性結(jié)合性1(后綴后綴)自增、自減自增、自減+ -左結(jié)合左結(jié)合2(前綴前綴)自增、自減自增、自減+ -右結(jié)合右結(jié)
4、合一元正號、負(fù)號一元正號、負(fù)號+ -右結(jié)合右結(jié)合一元邏輯運(yùn)算符非一元邏輯運(yùn)算符非!右結(jié)合右結(jié)合3乘法類乘法類* / %左結(jié)合左結(jié)合4加法類加法類+ -左結(jié)合左結(jié)合5關(guān)系運(yùn)算符關(guān)系運(yùn)算符 = =左結(jié)合左結(jié)合6判等運(yùn)算符判等運(yùn)算符= !=左結(jié)合左結(jié)合7二元邏輯運(yùn)算符與二元邏輯運(yùn)算符與&左結(jié)合左結(jié)合二元邏輯運(yùn)算符或二元邏輯運(yùn)算符或 |左結(jié)合左結(jié)合8賦值賦值= *= /= %= += -=右結(jié)合右結(jié)合第5章: 選擇語句例:判斷閏年例:判斷閏年 閏年的條件是:(1)能被4整除,但不能被100整除的年份都是閏年,如1996,2004年是閏年;(2)能被100整除,又能被400整除的年份是閏年。如1
5、600,2000年是閏年。不符合這兩個條件的年份不是閏年。問:如何利用邏輯表達(dá)式描述“某年是閏年”這個條件? 答: year%4=0 & year%100!=0 | year%400=0year%4=0 & year%100!=0 | year%400=0如果優(yōu)先級結(jié)合性記不住,可以用括號:第5章: 選擇語句5.2 if語句 if 語句最簡單的格式:if (表達(dá)式) 語句語句語句假假(0)表達(dá)式表達(dá)式真真(非非0)v計算計算 (表達(dá)式表達(dá)式)的值的值vif語句的表達(dá)式能判定變量是否落在某個數(shù)值范語句的表達(dá)式能判定變量是否落在某個數(shù)值范圍內(nèi),圍內(nèi),如判定如判定 0 i n 是否成
6、立:是否成立:if (0 = i & i n) v相反情況判定:相反情況判定:if (i = n) 第5章: 選擇語句5.2.1 復(fù)合語句 為了讓if語句處理多條語句,就需要引入復(fù)合語句(compound statement): 多條語句 例子:if (line_num = MAX_LINES) line_num = 0; page_num+; 復(fù)合語句也出現(xiàn)在循環(huán)和其他需要多條語句,但C語言語法卻要求是一條語句的地方。第5章: 選擇語句5.2.2 else子句 if (表達(dá)式) 語句1else 語句2 語句語句1 語句語句2非非00表達(dá)式表達(dá)式v例子:例子:if (i j) max
7、= i;else max = j;第5章: 選擇語句if語句的嵌套/找出i、j和k中的最大值if (i j) if (i k) max = i; else max = k;else if (j k) max = j; else max = k;/增加花括號,增強(qiáng)可讀性if (i j) if (i k) max = i; else max = k; else if (j k) max = j; else max = k;第5章: 選擇語句5.2.3 級聯(lián)式if語句if (表達(dá)式1 )語句1else if(表達(dá)式2)語句2else if(表達(dá)式3)語句3else if(表達(dá)式m)語句melse 語
8、句n第5章: 選擇語句級聯(lián)式if語句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); 第5章: 選擇語句例子:計算股票經(jīng)紀(jì)人的傭金 股票經(jīng)紀(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 + 0.22%$50,000$500,000$155 + 0.11%超過$500,0
9、00$255 + 0.09% 最低收費(fèi)39美元。第5章: 選擇語句broker.c要求用戶輸入交易額,然后顯示傭金數(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);第5章: 選擇語句if (value 2500.00f) commission = 30.00f + .0
10、17f * 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 = 255.00f + .0009f
11、 * value;if (commission j ? i : j;/* k is now 2 */k = (i = 0 ? i : 0) + j;/* k is now 3 */ 條件運(yùn)算符的優(yōu)先級,只比賦值運(yùn)算符高,比其他的都低。第5章: 選擇語句例子 例:If(ab) max=a; else max=b; 替換為:max=(ab)?a:b; 可以應(yīng)用于return語句:return i j ? i : j; 可以應(yīng)用于printf語句:printf(%dn, i j ? i : j); 第5章: 選擇語句5.2.6 C89中的布爾值 C89沒有定義布爾值類型。 可以定義一個int變量,賦
12、值為0或1:int flag;flag = 0;flag = 1; 為了程序更便于理解,可以定義宏:#define TRUE 1#define FALSE 0第5章: 選擇語句例子 使用上頁的宏:flag = FALSE;flag = TRUE; 判定flag為真if (flag = TRUE) 或:if (flag) 判定flag為假if (flag = FALSE) 或:if (!flag) 第5章: 選擇語句定義類型的宏 定義一個int型的宏:#define BOOL int 聲明布爾型時就用BOOL代替intBOOL flag;第5章: 選擇語句5.2.7 C99中的布爾值* C99中
13、提供了 _Bool類型:_Bool flag; _Bool是一個整形值(無符號整形),只能賦值為 0或1。 往_Bool變量中存儲非零值會使值變?yōu)?1:flag = 5; /* flag is assigned 1 */第5章: 選擇語句C99中的布爾值 C99提供了一個新頭文件 ,該文件提供了bool宏。 如果包括了 ,我們可以這樣寫:bool flag; /* same as _Bool flag; */ 頭還提供了 true和false兩個宏表示1和0:flag = false;flag = true;第5章: 選擇語句5.3 switch語句 我們可以用級聯(lián)式if語句,把表達(dá)式和一系列
14、值比較: if (grade = 4) 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); 第5章: 選擇語句switch語句 C語言提供switch語句做為上頁用法的替換 switch (grade) case 4: printf(Excellent); break; case 3
15、: printf(Good); break; case 2: printf(Average); break; case 1: printf(Poor); break; case 0: printf(Failing); break; default: printf(Illegal grade); break;第5章: 選擇語句switch語句 switch語句比級聯(lián)式if語句更容易閱讀,執(zhí)行速度也快。 其格式如下:switch (表達(dá)式) case 常量表達(dá)式1: 語句1case 常量表達(dá)式2: 語句2case 常量表達(dá)式n: 語句ndefault :語句n + 1第5章: 選擇語句l swit
16、ch語句一般形式:switch( 表達(dá)式) case E1: 語句組 1; break; case E2: 語句組 2; break; . case En: 語句組 n; break; default: 語句組 ; break; 第5章: 選擇語句switch語句 控制表達(dá)式: switch后邊的表達(dá)式要求是整型(C語言字符也是當(dāng)成整數(shù)處理), 不能用浮點(diǎn)數(shù)和字符串。 分支標(biāo)號: case 常量表達(dá)式 常量表達(dá)式不能包含變量和函數(shù)調(diào)用。 語句: 每個分支標(biāo)號后可以跟任意數(shù)量的語句,不需要花括號 語句最后通常是break語句第5章: 選擇語句switch語句 多個分支共用一組語句: switch
17、 (grade) case 4: case 3: case 2: case 1: printf(Passing); break; case 0: printf(Failing); break; default: printf(Illegal grade); break;第5章: 選擇語句switch語句 為了節(jié)省空間,可把多個分支放一行。switch (grade) case 4: case 3: case 2: case 1:printf(Passing);break;case 0: printf(Failing);break;default: printf(Illegal grade);b
18、reak; 不要求必須有default,如果沒有,控制表達(dá)式的值和任何分支都不匹配,就會傳給switch后面的語句。第5章: 選擇語句break的作用 執(zhí)行break語句,就可以跳出switch語句,繼續(xù)執(zhí)行switch后面的語句。 如果沒有break語句,就會從一個分支繼續(xù)到下一個分支。 例子:switch (grade) case 4: printf(Excellent); case 3: printf(Good); case 2: printf(Average); case 1: printf(Poor); case 0: printf(Failing); default: printf
19、(Illegal grade); 如果grade等于3,結(jié)果為:GoodAveragePoorFailingIllegal grade第5章: 選擇語句例子:顯示法定格式的日期 要求按下列格式顯示日期:Dated this _ day of _ , 20_. 要求用戶以mm/dd/yy方式錄入日期,然后按上面方式顯示Enter date (mm/dd/yy): 7/19/14Dated this 19th day of July, 2014. 用switch語句為日添加“th” (或“st”、 “nd” 、“rd”) 。第5章: 選擇語句date.c#include int main(void
20、) 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; 第5章: 選擇語句 printf(
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二硫化碳生產(chǎn)工測試驗(yàn)證評優(yōu)考核試卷含答案
- 電力通信運(yùn)維員崗前規(guī)章制度考核試卷含答案
- 片基流延工誠信道德能力考核試卷含答案
- 電子玻璃制品鍍膜工安全宣教測試考核試卷含答案
- 安全員考試請假條
- 2025年超細(xì)銀粉末、銀鈀粉、鈀粉、鉑粉項(xiàng)目合作計劃書
- 2026年智能心率帶項(xiàng)目營銷方案
- 2025年江蘇省南通市中考物理真題卷含答案解析
- 2025年山東省日照市中考英語真題卷含答案解析
- 2025康復(fù)醫(yī)學(xué)與技術(shù)專業(yè)知識題庫及答案
- 招標(biāo)代理機(jī)構(gòu)入圍 投標(biāo)方案(技術(shù)方案)
- 運(yùn)輸車隊年終總結(jié)報告
- 房屋損壞糾紛鑒定報告
- 精益生產(chǎn)方式-LEAN-PRODUCTION
- 中學(xué)體育與健康課程與教學(xué)論P(yáng)PT高職完整全套教學(xué)課件
- 頸動脈外膜剝脫術(shù)
- 養(yǎng)老設(shè)施建筑設(shè)計規(guī)范
- Starter-軟件簡易使用手冊
- RFJ01-2008 人民防空工程防護(hù)設(shè)備選用圖集
- GB/T 27818-2011化學(xué)品皮膚吸收體外試驗(yàn)方法
- FZ/T 80004-2014服裝成品出廠檢驗(yàn)規(guī)則
評論
0/150
提交評論