




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、C程序設(shè)計(jì)第5章 選擇結(jié)構(gòu)程序設(shè)計(jì)本章要點(diǎn)關(guān)系運(yùn)算符和關(guān)系表達(dá)式邏輯運(yùn)算符和邏輯表達(dá)式if語句switch語句程序舉例5.1 關(guān)系運(yùn)算符和關(guān)系表達(dá)式所謂“關(guān)系運(yùn)算實(shí)際上是“比較運(yùn)算。將兩個(gè)值進(jìn)行比較,判斷比較的結(jié)果是否符合給定的條件。例如,a3是一個(gè)關(guān)系表達(dá)式。如果a的值為5,那么關(guān)系表達(dá)式的值為“真;如果a的值為2,不滿足“a3條件,那么稱關(guān)系表達(dá)式的值為“假。5.1.1 關(guān)系運(yùn)算符及其優(yōu)先次序 C語言提供6種關(guān)系運(yùn)算符: (1) 小于 (2) 大于 (4) = 大于或等于 (5) = = 等于 (6) != 不等于優(yōu)先級相同高優(yōu)先級相同低優(yōu)先次序:1前4種關(guān)系運(yùn)算符的優(yōu)先級別高于后兩種。2
2、關(guān)系運(yùn)算符的優(yōu)先級低于算術(shù)運(yùn)算符。3關(guān)系運(yùn)算符的優(yōu)先級高于賦值運(yùn)算符。以上關(guān)系如圖5-1所示。算術(shù)運(yùn)算符關(guān)系運(yùn)算符賦值運(yùn)算符(高)(低)圖5-1例如:ca+b 等效于c(a+b)a=bc等效于a=bc 等效于a=(bc)5.1.2 關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式可以是算術(shù)、關(guān)系、邏輯、賦值、字符表達(dá)式連接起來的式子,稱關(guān)系表達(dá)式。關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真或“假。 例如: ab, a+bb+c, a(b=5), (ab)(by) 可寫成ab&xy ( !a)|(ab) 可寫成!a|ab5.2.2 邏輯表達(dá)式 用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來的式子就是邏輯表達(dá)式。邏輯表達(dá)式的
3、值應(yīng)該是一個(gè)邏輯量“真或“假。 邏輯值及其判斷 C語言編譯系統(tǒng)在給出邏輯運(yùn)算結(jié)果時(shí),以數(shù)值1代表“真,以0代表“假,但在判斷一個(gè)量是否為“真時(shí),以0代表“假,以非0代表“真。 例如:假設(shè)a=4,b=5。 !a 的值為0。 a&b 的值為1。 a|b 的值為1。 !a|b 的值為1。 4&0|2 的值為1。 說明:由系統(tǒng)給出的邏輯運(yùn)算結(jié)果不是0就是1,不可能是其它數(shù)值。而在邏輯表達(dá)式中作為參加邏輯運(yùn)算的運(yùn)算對象操作數(shù)可以是0假或任何非0的數(shù)值真。 分析:53&2|84-!0注意: 在邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)
4、算符。 1a&b&c 只有a為真時(shí),才需要判別b的值,只有a和b都為真的情況下才需要判別c的值,見圖5.3。圖5-3(2)a|b|c 只要a為真,就不必判斷b和c;只有a假,才判別b;a和b都為假才判別c,見圖 如果有下面的邏輯表達(dá)式:(m=ab)&(n=cd) 當(dāng)a=1,b=2,c=3,d=4,m和n的原值為1時(shí),執(zhí)行之后m=0,n=1。 圖5-4 例:要判別某一年year是否閏年。閏年的條件是符合下面二者之一: 能被4整除,但不能被100整除。能被4整除,又能被400整除。 可以用一個(gè)邏輯表達(dá)式來表示:(year%4=0 & year%100!=0) | year%400=0 可以加一個(gè)“
5、!用來判別非閏年:!(year%4=0 & year%100!=0) | year%400=05.3 if語句 5.3.1 if語句的三種形式1.單分支形式 if(表達(dá)式) 語句 例如: if(xy) printf(“%d,x); 這種if語句的執(zhí)行 過程見圖5-5(a)。 0 表達(dá)式 語句1圖5-5a 2雙分支形式 if表達(dá)式) 語句1else 語句2 例如: if(xy) printf“d,x; else printf“d,y; 見圖5-5b。語句1語句2真假圖5-5b表達(dá)式3多分支形式 if(表達(dá)式1)語句1 else if(表達(dá)式2) 語句2 else if(表達(dá)式3) 語句3 : :
6、 else if表達(dá)式m語句m else 語句n 流程圖如圖5-6。表達(dá)式1FT表達(dá)式3FT表達(dá)式2FT表達(dá)式4FT語句4語句5語句3語句2語句1圖5-6例如: ifnumber500 cost=0.15; else ifnumber300 cost=0.10: else ifnumber100 cost=0.075; else ifnumber50 cost=0.05; else cost=0;說明: (1)假設(shè)表達(dá)式的值為0,按“假處理,假設(shè)表達(dá)式的值為非0,按“真處理。(2)在if和else后面可以有多個(gè)操作語句,此時(shí)用花括號“將幾個(gè)語句括起來成為一個(gè)復(fù)合語句。例5.1 輸入兩個(gè)實(shí)數(shù),按
7、代數(shù)值由小到大次序輸出這兩個(gè)數(shù)。void main()float a,b,t;scanf(“%f,%f,&a,&b);if(ab)t=a;a=b;b=t;printf(“%5.2f,%5.2f,a,b); abt運(yùn)行情況如下:3.6,-3.2-3.20,3.60例5.2 輸入3個(gè)數(shù)a,b,c,要求按由小到大的順序輸出。 void main() float a,b,c,t;scanf(“%f,%f,%f,&a,&b,&c); if(ab) t=a;a=b;b=t; if(ac) t=a;a=c;c=t; if(bc) t=b;b=c;c=t; printf(“%5.2f,%5.2f,%5.2f,
8、a,b,c);運(yùn)行情況如下: 3.7,11.00,3.00,7.00 5.3.2 if 語句的嵌套一般形式如下: if( )if( )語句1else 語句2elseif( )語句3else 語句4應(yīng)當(dāng)注意if與else的配對關(guān)系。else總是與它上面的最近的if配對。 例 5.3 有一函數(shù) -1 (x0) 編一程序,輸入一個(gè)x值,輸出y值。 有以下幾種寫法,請判斷哪些是正確的? 程序1: main() int x,y;scanf(“%d,&x);if(x0) y=-1;else if(x=0) y=0;else y=1;printf(“x=%d,y=%dn, x,y);可以用流程圖5-7來表示
9、。圖5-7輸入x開始x=0) if(x0)y=1; elsey=0; elsey=-1;見流程圖5-8。 x0 x0y=0y=1y=-1YNYN圖5-8程序3:將上述if語句改為:y=-1;if(x!=0)if(x0) y=1;else y=0;見流程圖5-9可看出是錯(cuò)誤的。 x0 x0y=0y=1YNYN圖5-9y=-1 程序4:將上述if語句改為: y=0; if(x=0) if(x0) y=1; else y=-1;見流程圖5-10可看出是錯(cuò) 誤的。 x0 x0y=-1y=1y=0YNYN圖5-105.3.3 條件運(yùn)算符 假設(shè)有以下if語句 if(ab) max=a; else max=
10、b;可以用下面的條件運(yùn)算符來處理: max=(ab)?a:b; 其中 ? 和 : 為條件運(yùn)算符,有三個(gè)操作對象,稱三目運(yùn)算符。條件表達(dá)式的一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3它的執(zhí)行過程見圖5-11。 圖5-11表達(dá)式1條件表達(dá)式取表達(dá)式2的值真(1)條件表達(dá)式取表達(dá)式3的值假(0) 說明: 1條件運(yùn)算符優(yōu)于賦值運(yùn)算符。低于關(guān)系和算術(shù)運(yùn)算符。 例如: int a=5,b=6; max=(ab)?a:b 等價(jià)于max=ab?a:b 執(zhí)行結(jié)果是將 a 和 b 兩者中大的賦給 max。 ab?a:b+1 相當(dāng)于 ab?a:(b+1) 2條件運(yùn)算符的結(jié)合方向?yàn)椤白杂易宰蟆?例如: ab?a:cd?
11、c:d 相當(dāng)于 ab?a:(cd?c:d) 假設(shè): a=1,b=2,c=3,d=4,那么表達(dá)式的值等于4。3條件表達(dá)式中,表達(dá)式2和表達(dá)式3不僅可以是數(shù)值表達(dá)式,還可以是賦值表達(dá)式或函數(shù)表達(dá)式。例如: ab?(a=100):(b=100) ab? printf(“%d,a):printf(“%d,b) 4表達(dá)式1,表達(dá)式2和表達(dá)式3的類型不同。 例如: xy?1:1.5 如果xy,值應(yīng)為1,由于1.5是實(shí)型,比整型高,因此,將1轉(zhuǎn)換成實(shí)型值1.0。例5.4 輸入一個(gè)字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換,然后輸出最后得到的字符。 main() char ch;
12、scanf(“%c,&ch); ch=(ch=A& ch=Z)?(ch+32):ch; printf(“%c,ch); 運(yùn)行結(jié)果如下: A a5.4 switch語句 一般形式:switch(表達(dá)式) case 常量表達(dá)式1: 語句1 case 常量表達(dá)式2: 語句2 . . . case 常量表達(dá)式n: 語句ndefault : 語句n+1 例如: 根據(jù)考試成績的等級打印出百分制分?jǐn)?shù)段。switch(grade) caseA:printf(“85-100n);caseB:printf(“70-84n); caseC:printf(“60-69n); caseD:printf(“60n); d
13、efault:printf(“errorn); 說明:(1) switch后面括弧內(nèi)的“表達(dá)式可以為任何類型。(2根據(jù)case后面的常量表達(dá)式來尋找入口。(3每一個(gè)case的常量表達(dá)式的值必須互不相同,否那么就會出現(xiàn)互相矛盾的現(xiàn)象。(4各個(gè)case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。 (5執(zhí)行完一個(gè)case后面的語句后,流程控制轉(zhuǎn)移到下一個(gè)case繼續(xù)執(zhí)行?!癱ase常量表達(dá)式只是起語句標(biāo)號作用,并不是在該處進(jìn)行條件判斷。 應(yīng)該在執(zhí)行一個(gè)case分支后,使流程跳出switch結(jié)構(gòu),即終止switch語句的執(zhí)行。將上面的switch結(jié)構(gòu)改寫如下: switch(grade) case A:
14、printf(“85-100n);break; case B:printf(“70-84n); break; case C:printf(“60-69n); break; case D:printf(“60n); break; default:printf(“errorn); 流程圖見圖5.12所示。 輸出7084輸出6069輸出60n); break;. 5.5 程序舉例 例5.5 寫程序,判斷某一年是否閏年。 閏年的條件是符合下面二者之一: 能被4整除,但不能被100整除。 能被4整除,又能被400整除。 year40&year100 !=0|year400=0 用圖5-13來表示判別閏年
15、的算法。圖5-13 year被4整除真假year被100整除真假year被400整除真真假假leap=1leap=0leap=0leap=1leap輸出“閏年”輸出“非閏年” void main() int year,leap;scanf(“%d,&year);if(year%4=0)if(year%100=0)if(year%400=0)leap=1; else leap=0; else leap=1; else leap=0;if(leap) printf(“%d is,year);else printf(“%d is not,year); printf(“a leap yearn);運(yùn)行
16、情況:19891989 is not a leap year20002000 is a leap year也可以將程序中第411行改寫成以下的if語句: if(year%4!=0) leap=0;else if(year%100!=0) leap=1;else if(year%400!=0) leap=0;else leap=1;也可以用一個(gè)邏輯表達(dá)式包含所有的閏年條件,將上述if語句用下面的if語句代替:if(year%4=0 & year%100!=0)|(year%400=0) leap=1;else leap=0; 例 5.6 求ax2+bx+c=0方程的解。 求解時(shí),應(yīng)該有以下幾種可
17、能: a=0,不是二次方程。 b2-4ac=0,有兩個(gè)相等實(shí)根。 b2-4ac0,有兩個(gè)不等實(shí)根。 b2-4ac0 輸出“非二次” 方程輸出兩個(gè)相等實(shí)根:-b/2a輸出兩個(gè)實(shí)根 x1,x2輸出兩個(gè)復(fù)根: p+qi,p-qi計(jì)算復(fù)根的實(shí)部和虛部:實(shí)部 p=-b/2a圖5-14虛部 #include “math.hmain()float a,b,c,disc,x1,x2,realpart,imagpart;scanf(“%f,%f,%f,&a,&b,&c);printf(“The equation);if(fabs(a)=1e-6)printf(“is not quadratic);elsedis
18、c=b*b-4*a*c;if(fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(“has distinct real roots:%8.4f and %8.4fn,x1,x2); else realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf(“has complex roots:n); printf(“%8.4f+%8.4fin,realpart,imagpart); printf(“%8.4f-%8.4fin,realpart,imagpart); 運(yùn)行結(jié)果如下:1,2,1The equation has two equalroots:-1.00001,2,2The equation has complex roots:-1.0000+1.0000i-1.0000-1.0000i2,6,1The equation has distinct real roots:-0.1771 and -2.8229 例5.7 運(yùn)輸公司對用戶計(jì)算運(yùn)費(fèi)。距離(s)越遠(yuǎn),每公里運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下: s250km 沒有折扣 250 =s500 %2折扣 500 =s1000 %5折扣 1000=s2000
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠房收購協(xié)議合同范例
- 九龍坡區(qū)家具運(yùn)輸合同范例
- 保姆勞務(wù)合同范本
- 鹵味培訓(xùn)合同范本
- 北京存量房合同范本
- 單位集資住房合同范本
- 脊椎損傷康復(fù)的護(hù)理
- 疫情背景下的職業(yè)健康與防護(hù)措施
- 科技企業(yè)技術(shù)創(chuàng)新與研發(fā)策略規(guī)劃
- 社區(qū)服務(wù)與殘障者長期康復(fù)的緊密結(jié)合
- 2023年部編人教版六年級道德與法治下冊全冊課件【全套】
- 《茉莉花》(課件)人音版音樂六年級上冊
- 肌肉注射的常見并發(fā)癥及預(yù)防處理措施
- 景觀模型設(shè)計(jì)與制作:第7章 建筑模型制作基本技法
- 關(guān)愛婦女防治兩癌講座課件
- DL∕T 584-2017 3kV~110kV電網(wǎng)繼電保護(hù)裝置運(yùn)行整定規(guī)程
- (正式版)FZ∕T 80018-2024 服裝 防靜電性能要求及試驗(yàn)方法
- 北師大版八年級下冊生物教案全冊
- 技術(shù)學(xué)院各部門廉政風(fēng)險(xiǎn)點(diǎn)、防控措施匯編
- JGJ133-2001 金屬與石材幕墻工程技術(shù)規(guī)范
- 穩(wěn)定性冠心病診斷與治療指南
評論
0/150
提交評論