吉林大學(xué)《C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》課程選擇程序結(jié)構(gòu)設(shè)計(jì)_第1頁(yè)
吉林大學(xué)《C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》課程選擇程序結(jié)構(gòu)設(shè)計(jì)_第2頁(yè)
吉林大學(xué)《C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》課程選擇程序結(jié)構(gòu)設(shè)計(jì)_第3頁(yè)
吉林大學(xué)《C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》課程選擇程序結(jié)構(gòu)設(shè)計(jì)_第4頁(yè)
吉林大學(xué)《C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》課程選擇程序結(jié)構(gòu)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C程序設(shè)計(jì)第5章 選擇結(jié)構(gòu)程序設(shè)計(jì)本章要點(diǎn)關(guān)系運(yùn)算符和關(guān)系表達(dá)式邏輯運(yùn)算符和邏輯表達(dá)式if語(yǔ)句switch語(yǔ)句程序舉例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語(yǔ)言提供6種關(guān)系運(yùn)算符: (1) 小于 (2) 大于 (4) = 大于或等于 (5) = = 等于 (6) != 不等于優(yōu)先級(jí)相同高優(yōu)先級(jí)相同低優(yōu)先次序:1前4種關(guān)系運(yùn)算符的優(yōu)先級(jí)別高于后兩種。2

2、關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符。3關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(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á)式連接起來(lái)的式子,稱關(guān)系表達(dá)式。關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真或“假。 例如: ab, a+bb+c, a(b=5), (ab)(by) 可寫(xiě)成ab&xy ( !a)|(ab) 可寫(xiě)成!a|ab5.2.2 邏輯表達(dá)式 用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來(lái)的式子就是邏輯表達(dá)式。邏輯表達(dá)式的

3、值應(yīng)該是一個(gè)邏輯量“真或“假。 邏輯值及其判斷 C語(yǔ)言編譯系統(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。 說(shuō)明:由系統(tǒng)給出的邏輯運(yùn)算結(jié)果不是0就是1,不可能是其它數(shù)值。而在邏輯表達(dá)式中作為參加邏輯運(yùn)算的運(yùn)算對(duì)象操作數(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的值,見(jiàn)圖5.3。圖5-3(2)a|b|c 只要a為真,就不必判斷b和c;只有a假,才判別b;a和b都為假才判別c,見(jiàn)圖 如果有下面的邏輯表達(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á)式來(lái)表示:(year%4=0 & year%100!=0) | year%400=0 可以加一個(gè)“

5、!用來(lái)判別非閏年:!(year%4=0 & year%100!=0) | year%400=05.3 if語(yǔ)句 5.3.1 if語(yǔ)句的三種形式1.單分支形式 if(表達(dá)式) 語(yǔ)句 例如: if(xy) printf(“%d,x); 這種if語(yǔ)句的執(zhí)行 過(guò)程見(jiàn)圖5-5(a)。 0 表達(dá)式 語(yǔ)句1圖5-5a 2雙分支形式 if表達(dá)式) 語(yǔ)句1else 語(yǔ)句2 例如: if(xy) printf“d,x; else printf“d,y; 見(jiàn)圖5-5b。語(yǔ)句1語(yǔ)句2真假圖5-5b表達(dá)式3多分支形式 if(表達(dá)式1)語(yǔ)句1 else if(表達(dá)式2) 語(yǔ)句2 else if(表達(dá)式3) 語(yǔ)句3 : :

6、 else if表達(dá)式m語(yǔ)句m else 語(yǔ)句n 流程圖如圖5-6。表達(dá)式1FT表達(dá)式3FT表達(dá)式2FT表達(dá)式4FT語(yǔ)句4語(yǔ)句5語(yǔ)句3語(yǔ)句2語(yǔ)句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;說(shuō)明: (1)假設(shè)表達(dá)式的值為0,按“假處理,假設(shè)表達(dá)式的值為非0,按“真處理。(2)在if和else后面可以有多個(gè)操作語(yǔ)句,此時(shí)用花括號(hào)“將幾個(gè)語(yǔ)句括起來(lái)成為一個(gè)復(fù)合語(yǔ)句。例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 語(yǔ)句的嵌套一般形式如下: if( )if( )語(yǔ)句1else 語(yǔ)句2elseif( )語(yǔ)句3else 語(yǔ)句4應(yīng)當(dāng)注意if與else的配對(duì)關(guān)系。else總是與它上面的最近的if配對(duì)。 例 5.3 有一函數(shù) -1 (x0) 編一程序,輸入一個(gè)x值,輸出y值。 有以下幾種寫(xiě)法,請(qǐng)判斷哪些是正確的? 程序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來(lái)表示

9、。圖5-7輸入x開(kāi)始x=0) if(x0)y=1; elsey=0; elsey=-1;見(jiàn)流程圖5-8。 x0 x0y=0y=1y=-1YNYN圖5-8程序3:將上述if語(yǔ)句改為:y=-1;if(x!=0)if(x0) y=1;else y=0;見(jiàn)流程圖5-9可看出是錯(cuò)誤的。 x0 x0y=0y=1YNYN圖5-9y=-1 程序4:將上述if語(yǔ)句改為: y=0; if(x=0) if(x0) y=1; else y=-1;見(jiàn)流程圖5-10可看出是錯(cuò) 誤的。 x0 x0y=-1y=1y=0YNYN圖5-105.3.3 條件運(yùn)算符 假設(shè)有以下if語(yǔ)句 if(ab) max=a; else max=

10、b;可以用下面的條件運(yùn)算符來(lái)處理: max=(ab)?a:b; 其中 ? 和 : 為條件運(yùn)算符,有三個(gè)操作對(duì)象,稱三目運(yùn)算符。條件表達(dá)式的一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3它的執(zhí)行過(guò)程見(jiàn)圖5-11。 圖5-11表達(dá)式1條件表達(dá)式取表達(dá)式2的值真(1)條件表達(dá)式取表達(dá)式3的值假(0) 說(shuō)明: 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è)字符,判別它是否大寫(xiě)字母,如果是,將它轉(zhuǎn)換成小寫(xiě)字母;如果不是,不轉(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語(yǔ)句 一般形式:switch(表達(dá)式) case 常量表達(dá)式1: 語(yǔ)句1 case 常量表達(dá)式2: 語(yǔ)句2 . . . case 常量表達(dá)式n: 語(yǔ)句ndefault : 語(yǔ)句n+1 例如: 根據(jù)考試成績(jī)的等級(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); 說(shuō)明:(1) switch后面括弧內(nèi)的“表達(dá)式可以為任何類型。(2根據(jù)case后面的常量表達(dá)式來(lái)尋找入口。(3每一個(gè)case的常量表達(dá)式的值必須互不相同,否那么就會(huì)出現(xiàn)互相矛盾的現(xiàn)象。(4各個(gè)case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。 (5執(zhí)行完一個(gè)case后面的語(yǔ)句后,流程控制轉(zhuǎn)移到下一個(gè)case繼續(xù)執(zhí)行?!癱ase常量表達(dá)式只是起語(yǔ)句標(biāo)號(hào)作用,并不是在該處進(jìn)行條件判斷。 應(yīng)該在執(zhí)行一個(gè)case分支后,使流程跳出switch結(jié)構(gòu),即終止switch語(yǔ)句的執(zhí)行。將上面的switch結(jié)構(gòu)改寫(xiě)如下: 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); 流程圖見(jiàn)圖5.12所示。 輸出7084輸出6069輸出60n); break;. 5.5 程序舉例 例5.5 寫(xiě)程序,判斷某一年是否閏年。 閏年的條件是符合下面二者之一: 能被4整除,但不能被100整除。 能被4整除,又能被400整除。 year40&year100 !=0|year400=0 用圖5-13來(lái)表示判別閏年

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行改寫(xiě)成以下的if語(yǔ)句: 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語(yǔ)句用下面的if語(yǔ)句代替: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)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)。距離(s)越遠(yuǎn),每公里運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下: s250km 沒(méi)有折扣 250 =s500 %2折扣 500 =s1000 %5折扣 1000=s2000

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論