C語(yǔ)言-桂林理工大學(xué)4-第四章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第1頁(yè)
C語(yǔ)言-桂林理工大學(xué)4-第四章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第2頁(yè)
C語(yǔ)言-桂林理工大學(xué)4-第四章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第3頁(yè)
C語(yǔ)言-桂林理工大學(xué)4-第四章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第4頁(yè)
C語(yǔ)言-桂林理工大學(xué)4-第四章 選擇結(jié)構(gòu)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩7頁(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語(yǔ)言程序設(shè)計(jì) 授課教案學(xué)時(shí)安排:4 授課題目:選擇結(jié)構(gòu)程序設(shè)計(jì)目標(biāo)要求: 理解算法的特征及結(jié)構(gòu)化程序設(shè)計(jì)的思想,掌握分枝程序設(shè)計(jì)技術(shù),能夠熟練運(yùn)用它們來(lái)進(jìn)行程序設(shè)計(jì)。 授課類型: 理論課 授課場(chǎng)地: 教室 教學(xué)方式:講授、演示、提問(wèn)、討論 教輔設(shè)備: 投影儀 授課內(nèi)容:第四章選擇結(jié)構(gòu)程序設(shè)計(jì)41 關(guān)系運(yùn)算符和邏輯運(yùn)算符一、關(guān)系運(yùn)算符和關(guān)系表達(dá)式1 關(guān)系運(yùn)算符關(guān)系運(yùn)算又稱比較運(yùn)算,是進(jìn)行數(shù)據(jù)間的大小、相等的比較操作。Turbo C提供6種關(guān)系運(yùn)算符: 小于 大于= 大于等于= = 等于!= 不等于關(guān)系運(yùn)算符的比較運(yùn)算結(jié)果是一個(gè)邏輯值,“真”或“假”,C語(yǔ)言中,以“1”代表“真”,以“0”代表“

2、假”。2 關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式(如算術(shù)表達(dá)式、賦值表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式等)連接起來(lái)的式子,就稱為關(guān)系表達(dá)式。關(guān)系表達(dá)式的值就是關(guān)系運(yùn)算符的比較運(yùn)算結(jié)果值,1或0,分別代表關(guān)系表達(dá)式成立或不成立。*等于運(yùn)算符(= =)和賦值運(yùn)算符(=)是完全不同的兩個(gè)運(yùn)算符,前者用于比較相等的操作,后者用于賦值操作,如: main() int I; printf( “first:%d,I=%dn”,I=3,I); printf(“second:%d,I=%dn”,I=5,I); 程序的運(yùn)行結(jié)果為:first:3,I=3 second:0,I=3二、邏輯運(yùn)算符和邏輯表達(dá)式1邏輯運(yùn)算符 邏輯

3、與 & 邏輯或 | 邏輯非 !2邏輯表達(dá)式用邏輯運(yùn)算符將參與邏輯運(yùn)算的操作數(shù)連接起來(lái)的式子稱為邏輯表達(dá)式。*Turbo C編譯系統(tǒng)規(guī)定,對(duì)于非0的操作數(shù)均認(rèn)為是“真”,即1。*在邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符。如: main() int a,b=20; b=(a=b)&b; printf(b=%dn,b); ba&(b=a); printf(b=%dn,b); 程序運(yùn)行結(jié)果為:b=1 b=1分析:b=(a=b)&b;是賦值語(yǔ)句,其求解過(guò)程是:首先圓括號(hào)之內(nèi)要先操作,將b的值20賦給a,接著完成同b的邏輯與運(yùn)算

4、,并將結(jié)果(1)賦給b。而對(duì)于后一語(yǔ)句ba&(b=a);,則先算ba(也就是120),結(jié)果為0,緊接著要進(jìn)行邏輯與的運(yùn)算,但由于第一個(gè)操作數(shù)已經(jīng)為0,所以邏輯與運(yùn)算符&之后的另一個(gè)操作數(shù)(即b=a)就不必運(yùn)算了,(此時(shí)整個(gè)邏輯表達(dá)式的值已經(jīng)確定為0),這樣,&運(yùn)算符之后的賦值表達(dá)式b=a就不被執(zhí)行了,所以b的值仍為1。*優(yōu)先級(jí): 高 ?。ǚ牵?算術(shù)運(yùn)算符 關(guān)系運(yùn)算符 & 和 | 賦值運(yùn)算符 低42 if語(yǔ)句if語(yǔ)句用來(lái)判定所給定的條件是否滿足,根據(jù)判定的結(jié)果(真或假)決定執(zhí)行給出的兩種操作之一。421 if語(yǔ)句三種形式1、 if(表達(dá)式)語(yǔ)句例如:if(xy)printf(“%d”,x);流程

5、圖見圖4-1 (a )2、 if(表達(dá)式)語(yǔ)句1 else 語(yǔ)句2例如:if(xy)printf(“%d”,x);else printf(“%d”,y);流程圖見圖4-1 (b )圖4-1 復(fù)合語(yǔ)句在if語(yǔ)句中的使用基本形式中的語(yǔ)句(如s、s1、s2等)均可采用多于一條語(yǔ)句的復(fù)合語(yǔ)句結(jié)構(gòu),這時(shí)要使用花括號(hào)把各語(yǔ)句括起來(lái)而成為復(fù)合語(yǔ)句。*注意不要將= =與=混淆,這種錯(cuò)誤是編程錯(cuò)誤,而不是語(yǔ)法錯(cuò)誤,編譯器不會(huì)發(fā)現(xiàn)),如下面兩個(gè)語(yǔ)句都沒(méi)有錯(cuò)誤,但表示了完全不同的意義:if (x=y) printf(“%d”,x);if (x= =y) printf(“%d”,x);第一個(gè)語(yǔ)句把y的值賦給x,只要x

6、的值不等于0,都顯示x的值,第二個(gè)語(yǔ)句則表示,只有在x等于y時(shí),才顯示x的值。例1:判斷奇、偶數(shù)。 main() main() int a; int a; printf(“input a:”); printf(“input a:”); scanf(“%d”,&a); scanf(“%d”,&a); if (a%2=0) if (a%2=0) printf(“even number.n”); printf(“even number.n”); else printf(“odd number.n”); 3、 if(表達(dá)式1)語(yǔ)句1 else if(表達(dá)式2)語(yǔ)句2 else if(表達(dá)式3)語(yǔ)句3

7、else if(表達(dá)式m)語(yǔ)句m else 語(yǔ)句m+1(實(shí)際是else子句中嵌套if語(yǔ)句)執(zhí)行流程見圖4-2。圖4-2例如:if(number500) cost=0.15;else if(number300)cost=0.10;else if(number100)cost=0.075;else if(number50) cost=0.05;else cost=0;說(shuō)明:(1) 三種形式的if語(yǔ)句中的“表達(dá)式”一般為關(guān)系表達(dá)式或邏輯表達(dá)式,但不限于這兩種表達(dá)式。記?。篊語(yǔ)言中需要邏輯值的地方,只有0代表“假”,非0(其它)均代表“真”。例如:if(a)printf(“%d”,a);- print

8、f() 這條語(yǔ)句一定運(yùn)行,因?yàn)閍=97,即“真”。例如:P198例11-13倒數(shù)12行,bit=(mask&n)?1:0。mask,n都是整數(shù),&(位與)后也是整數(shù)。(2) else子句不能單獨(dú)使用,必須是if語(yǔ)句的一部分,與if配對(duì)使用。(3) 在if和else后面可以只含一個(gè)內(nèi)嵌的操作語(yǔ)句,也可以有多個(gè)操作語(yǔ)句構(gòu)成的語(yǔ)句塊(復(fù)合語(yǔ)句)。語(yǔ)句塊用括起來(lái),語(yǔ)句塊后面不要“;”號(hào)。例如:if(a+bc&b+ca&c+ab) s=0.5*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c); printf(area);else printf(“it is not a tri

9、angle”)例:輸入兩個(gè)實(shí)數(shù),按數(shù)值由小到大的次序輸出這兩個(gè)數(shù)。(難點(diǎn):交換數(shù)據(jù)算法)main() float a,b,t; /* t-臨時(shí)變量 */ scanf(a,b); if(ba)t=a;a=b;b=t; /* 交換a,b */ printf(a,b);例:輸入三個(gè)數(shù)a,b,c,按照由小到大的順序輸出。算法:(偽代碼-三個(gè)數(shù)的選擇法排序)if ba 將a,b交換 (a是a,b中的小者)if ca 將a,c交換 (a是a,c中的小者,因此a是三者中的最小者)if cb 將b,c交換 (在剩下的兩個(gè)數(shù)b,c中選次小數(shù),存放在b中)輸出a,b,c。main() float a,b,c,t;

10、 /* t-臨時(shí)變量 */ scanf(a,b,c); if(ba)t=a;a=b;b=t; /* 交換a,b */ if(ca)t=a;a=c;c=t; /* 交換a,b */ if(cb)t=b;b=c;c=t; /* 交換a,b */ printf(a,b,c);422 if語(yǔ)句的嵌套if語(yǔ)句的嵌套:if語(yǔ)句的if塊或else塊中,由包含一個(gè)if語(yǔ)句。一般形式: if() if()語(yǔ)句1; else 語(yǔ)句2; else if()語(yǔ)句3; else 語(yǔ)句4;注意:應(yīng)當(dāng)注意if與else的配對(duì)關(guān)系。else總是與它上面的最近的未配對(duì)的if配對(duì)。例:函數(shù): -1(x0)編一個(gè)程序,輸入x,輸出

11、y。算法1:輸入x y x0? n y=-1 / y x=0? n y0? n y=1 /輸出y。main() int x,y; scanf(&x); if(x0)y=1; printf(x,y);算法2:輸入x y x0? n y=-1 y x=0? ny=0y=1 輸出y。main() int x,y; scanf(&x); if(xb)max=a;else max=b;可以使用條件運(yùn)算符來(lái)處理:max=ab?a:b;(注:ab關(guān)系運(yùn)算有沒(méi)有()都一樣)。它這樣執(zhí)行,ab為“真”嗎?如果為“真”,條件表達(dá)式為a,否則為b。條件表達(dá)式的一般形式:表達(dá)式1?表達(dá)式2:表達(dá)式3執(zhí)行過(guò)程:說(shuō)明:(

12、1) 條件運(yùn)算符的執(zhí)行順序:先求解表達(dá)式1,若為非0(真)則求解表達(dá)式2,表達(dá)式2的值就是整個(gè)條件表達(dá)式的值。若表達(dá)式1的值為0(假),則求解表達(dá)式3,此時(shí)表達(dá)式3的值就是整個(gè)條件表達(dá)式的值。(2) 條件運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符,低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符。例如:max=ab?a:b 等價(jià)于: max=(ab)?a:b)(3) 條件運(yùn)算符的結(jié)合性“自右向左”。例如:ab?a:cd?c:d。先考慮優(yōu)先級(jí)、再考慮結(jié)合性:上面表達(dá)式等價(jià)與: (ab)?a:(cd)?c:d)。(4) 表達(dá)式2和表達(dá)式3不僅可以是數(shù)值表達(dá)式,還可以是賦值表達(dá)式,函數(shù)表達(dá)式。例如:ab?(a=100):(b=100)

13、 ;ab?prinf(“%d”,a): prinf(“%d”,a) ;(5) 表達(dá)式1,表達(dá)式2,表達(dá)式3的類型都可以不同。條件表達(dá)式值的類型是表達(dá)式2,表達(dá)式3中類型較高的類型。例如:xy?1:1.5 整個(gè)表達(dá)式類型為實(shí)型。例:輸入一個(gè)字符,如果是大寫字母,轉(zhuǎn)換為小寫,如果不是不轉(zhuǎn)換。最后輸出。main() char ch; scanf(ch); ch= (ch=A&ch=A&ch0,有兩個(gè)不等實(shí)根。 b2-4ac0,有兩個(gè)共軛復(fù)根。N-S流程圖見下圖。據(jù)此編寫程序如下:#include main() float a,b,c,d,disc,x1,x2,realpart,imagpart; s

14、canf(%f,%f,%f,&a,&b,&c); printf(The equation); if(fabs(a)=le-6) printf(is not a quadratic); else disc=b*b-4*a*c; if(fabs(disc)le-6) x1=(-bsqrt(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

15、comPlex rootsn); printf(%8.4f+%8.4fin,realpart,imagpart); printf(%8.4f-%8.4fin,realpart,imagpart); 程序中用disc代表b2-4ac,先計(jì)算disc的值,以減少以后的重復(fù)計(jì)算。對(duì)于判斷b2-4ac是否等于0時(shí),要注意一個(gè)問(wèn)題:由于disc(即b2-4ac)是實(shí)數(shù),而實(shí)數(shù)在計(jì)算和存儲(chǔ)時(shí)會(huì)有一些微小的誤差,因此不能直接進(jìn)行如下判斷:if(disc=0)因?yàn)檫@樣可能會(huì)出現(xiàn)本來(lái)是零的量,由于上述誤差而被判別為不等于零而導(dǎo)致結(jié)果錯(cuò)誤。所以采取的辦法是判別disc的絕對(duì)值(fabs(disc)是否小于一個(gè)很小

16、的數(shù)(例如10-6),如果小于此數(shù),就認(rèn)為disc=0。程序中以realpart代表實(shí)部P,以imagpart代表虛部q,以增加可讀性。例2 運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)。路程(S)越遠(yuǎn),每公里運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下: s250km沒(méi)有折扣 250S500 2%折扣 500S1000 5%折扣 1000S2000 8%折扣 2000S=3000) c=12; elsec=S/250; switch(c) case 0d=0;break; case 1d=2;break; case 2 case 3d=5;break; case 4 case 5 case 6 case 7d=8;break; case 8 case 9 case 10 case 11d=10;break; case 12d=15;break; f=P*w*S*(1-d/1000); printf(freight=%154f,f); 請(qǐng)注意:c、S是整型變量,因此c=S/250為整數(shù)。當(dāng)S3000時(shí),令

溫馨提示

  • 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)論