-C語言程序設(shè)計(jì)課件0905選擇結(jié)構(gòu)程序設(shè)計(jì)_第1頁
-C語言程序設(shè)計(jì)課件0905選擇結(jié)構(gòu)程序設(shè)計(jì)_第2頁
-C語言程序設(shè)計(jì)課件0905選擇結(jié)構(gòu)程序設(shè)計(jì)_第3頁
-C語言程序設(shè)計(jì)課件0905選擇結(jié)構(gòu)程序設(shè)計(jì)_第4頁
-C語言程序設(shè)計(jì)課件0905選擇結(jié)構(gòu)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、選擇結(jié)構(gòu)程序設(shè)計(jì)課程:程序設(shè)計(jì)語言教材:譚浩強(qiáng)C程序設(shè)計(jì)第三版教師:陳小荷本章重點(diǎn)掌握關(guān)系運(yùn)算符、邏輯運(yùn)算符的優(yōu)先次序,理解條件表達(dá)式的意義。掌握if語句的四種形式,能針對(duì)具體問題正確運(yùn)用。理解switch語句的控制結(jié)構(gòu),能正確運(yùn)用。關(guān)系運(yùn)算符 小于 大于 優(yōu)先級(jí)高(6)= 大于或等于= 等于 優(yōu)先級(jí)低(7)!= 不等于關(guān)系表達(dá)式比較兩個(gè)運(yùn)算數(shù),表達(dá)式成立則值為1 ( true ) ,否則值為 0 ( false ) : x y / 未知 x + 5 x/ 1 ( true ) x + 5 = x / 1 ( true )關(guān)系運(yùn)算符與算術(shù)運(yùn)算符算術(shù)運(yùn)算符的優(yōu)先級(jí)是3(乘除余)和4(加減)以下兩

2、個(gè)表達(dá)式的值是多少?10 + ( 20 10 ) * 100以下四個(gè)表達(dá)式,如果要加括號(hào),并且不能改變?cè)瓉淼膬?yōu)先次序,應(yīng)該怎么加?10 + 20 z z = x y , z ! = x y z 的值是多少?如果它們的值分別是 1、3、5 呢?數(shù)學(xué)書上 x y z 的意思是 x大于y,y大于z,這個(gè)意思用C語言來表達(dá),應(yīng)該是:x y & y z關(guān)系運(yùn)算符和賦值運(yùn)算符重溫:賦值運(yùn)算符的優(yōu)先級(jí)低(14) x = y z 等價(jià)于下面哪個(gè)表達(dá)式? ( x = y ) z x = ( y z )若 x, y, z 的初值分別是 5, 3, 1 ,下面表達(dá)式的值是多少? x = y z 邏輯值表第一行是標(biāo)題

3、。以第二行為例,讀法是:若a真b真,則非a和非b均假,a & b 為真,a | b 亦為真。邏輯表達(dá)式求值是自左至右的,一旦發(fā)現(xiàn)已經(jīng)可以根據(jù)一個(gè)運(yùn)算數(shù)求值,就不會(huì)再對(duì)第二個(gè)運(yùn)算數(shù)求值。例如,在 a & b 中,如果已知a假,則整個(gè)邏輯表達(dá)式為假,不必再考慮b的值邏輯運(yùn)算符的優(yōu)先級(jí)和結(jié)合方向邏輯反的結(jié)合方向是自右至左,其他邏輯運(yùn)算符的結(jié)合方向均為自左至右邏輯非 ! ,優(yōu)先級(jí)2算術(shù)運(yùn)算符,優(yōu)先級(jí)3和4關(guān)系運(yùn)算符,優(yōu)先級(jí)6和7邏輯與 & ,優(yōu)先級(jí)11邏輯或 | | ,優(yōu)先級(jí)12賦值運(yùn)算符,優(yōu)先級(jí)14表達(dá)式求值假定以下變量 a, b, c, d 的值分別是 0, 1, 2, 3 ,變量 x 和 y 的

4、值未知,請(qǐng)對(duì)下列表達(dá)式求值:x = y & 10 = y & x != xa b | 3 1 a x - 1 a & b | | c & d a & ( b | c ) & d表達(dá)式求值假定 a, b, c 的值分別是 3, 4, 5 a + b c & b = = c ( a + b ) c ) & ( b = = c ) a | b + c & b c ! ( a b ) & ! c | 1 ! ( x = a ) & ( y = b ) & 0 ! ( a + b ) + c 1 & b + c / 2練習(xí)寫一些表達(dá)式判斷是否“及格”(60分及格)判斷是否“英文字母”判斷是否“小寫英文字

5、母或阿拉伯?dāng)?shù)字”判斷是否“能被4整除”判斷是否“能被4整除但不能被100整除”判斷是否“閏年”形式1:if (e) s ;是否執(zhí)行s,取決于e的值 sample : 輸入g, 0,兩個(gè)printf語句的執(zhí)行情況如何? # include if ( isletter(ch) ) /* 判斷ch是否字母*/printf(“%c is a letter n”, ch);printf(“thank you.n”);形式2:if (e) s1; else s2;e的值非 0, 執(zhí)行 s1, 否則執(zhí)行 s2sample : 輸入g, 0,兩個(gè)printf 語句的執(zhí)行情況如何?if ( isletter(c

6、h) ) printf(“%c is a letter n”, ch);else printf(“%c is not a letter n”, ch);s 可以是一個(gè)復(fù)合語句sample: 三個(gè)變量的排序(升序)if ( ab ) tmp=a; a=b; b=tmp; if ( ac ) tmp=a; a=c; c=tmp; if ( bc ) tmp=b; b=c; c=tmp; 形式3:多分枝的if語句注意下面語句的邏輯關(guān)系:if(n500) cost=0.15;else if(n300) cost=0.10;else if(n100) cost=0.075;else if(n50) co

7、st=0.05;else const=0.0;例如,第二行相當(dāng)于說:if(n300) cost=0.10;如果按n值從小到大的順序來寫多分枝的if語句,應(yīng)該怎么寫?形式4:嵌套的if語句if(e) s1; else s2 中,s1或s2本身又是一個(gè)if語句形式3也是嵌套的if語句,但它總是在s2中嵌套if ( e )if ( e1 ) s1 ;else s2 ;elseif ( e2 ) s3 ;else s4 ;寫法1if (x0) y = 1 ;語法、邏輯都沒有錯(cuò),運(yùn)行也正確,但效率低寫法2和寫法3if (x=0) if (x0) y = 1 ;else y = 0 ;else y = -

8、1 ;if與else的匹配原則就近匹配:嵌套的if語句中,else總是跟離它最近的上一個(gè)尚無匹配的if匹配,不管縮進(jìn)形式是怎樣的:if ( e )if ( e1 ) s1 ; else s2 ; /* 跟匹配 */else /* 跟匹配 */if ( e2 ) s3 ; else s4 ; /* 跟匹配 */寫法4和寫法5y = -1 ;if (x!=0) if (x0) y = 1 ;else y = 0 ;y = 0;if (x=0) if (x0) y = 1 ;else y = -1 ;條件表達(dá)式e1 ? e2 : e3其中,? : 是一個(gè)條件運(yùn)算符,三目的,優(yōu)先級(jí)為13(高于賦值運(yùn)算

9、符),結(jié)合方向是自右至左條件表達(dá)式的值是這樣計(jì)算的:先對(duì)e1求值如果e1的值非0,則條件表達(dá)式的值為e2否則,條件表達(dá)式的值為e3條件表達(dá)式的應(yīng)用用于二分枝的選擇結(jié)構(gòu),例如:if ( ch 128 ) return 0;else return 1;可寫成以條件表達(dá)式為賓語的返回語句:return ch = 60 ) grade = Y ;else grade = N ;條件表達(dá)式的應(yīng)用條件運(yùn)算符是自右至左結(jié)合的,例如:y = x = 0 ? 0 : x 0 ? 1 : -1相當(dāng)于y = x = 0 ? 0 : (x 0 ? 1 : -1)因此,條件表達(dá)式也可以用于多分枝選擇不過,為了容易理解,

10、一般應(yīng)該用if語句來表達(dá)switch 語句多分枝選擇 :switch ( grade ) case A : printf ( “85100”n”); break;case B : printf ( “7084n”); break;case C : printf ( “6069”n”); break;case D : printf ( “ 60 n”); break;default : printf ( “error n”);switch語句與多分枝if語句的關(guān)系一般來說,能用switch語句的也能用多分枝if語句來表達(dá),例如:if ( grade = A ) printf ( “85100”n

11、”); else if ( grade = B ) printf ( “7084n”); else if ( grade = C ) printf ( “6069”n”); else if ( grade = D ) printf ( “b ) if ( ac ) return a; else return c; else if ( bc ) return b; else return c; int m=a; if ( bm ) m=b; if ( cm ) m=c; return m; 你喜歡哪種寫法?例5.6 求一元二次方程的根輸入:系數(shù)a, b, c過程和輸出:a = 0 : 不是一元二

12、次方程disc = b*b 4*a*c ;if (disc絕對(duì)值近乎0) 打印兩個(gè)相等實(shí)根if (disc絕對(duì)值大于0) 打印兩個(gè)不等實(shí)根else 打印兩個(gè)共軛復(fù)根例5.6 教材分析程序的主體是一個(gè)嵌套的if語句,共有3層,層數(shù)多了,理解起來比較困難第一層的if只帶一個(gè)語句,而else卻帶了多層多個(gè)語句,不太般配第二層的if也只帶一個(gè)語句,而else卻帶了多層多個(gè)語句,不太般配第三層的if和else,在層次和語句數(shù)量上比較均衡例5.6 程序修改基本思路:減少層次,盡量不用嵌套的if語句void函數(shù)中可以有多個(gè)return語句,因此,如果已經(jīng)處理了某種情況,就可以及時(shí)返回,程序其余部分再處理其他情況例如,第一種情況,打印了“不是一元二次方程”之后,即可return,這樣就省掉了一個(gè)層次請(qǐng)自行修改這個(gè)程序例5.7 運(yùn)費(fèi)計(jì)算可以有多種寫法:如教材所示,用swit

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論