選擇結(jié)構(gòu)的程序設(shè)計(jì).ppt_第1頁(yè)
選擇結(jié)構(gòu)的程序設(shè)計(jì).ppt_第2頁(yè)
選擇結(jié)構(gòu)的程序設(shè)計(jì).ppt_第3頁(yè)
選擇結(jié)構(gòu)的程序設(shè)計(jì).ppt_第4頁(yè)
選擇結(jié)構(gòu)的程序設(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語(yǔ)言程序設(shè)計(jì),第五章 選擇結(jié)構(gòu)的程序設(shè)計(jì),主要內(nèi)容,1. 關(guān)于條件的表示 2. if 條件分支結(jié)構(gòu) 3. 選擇結(jié)構(gòu)的嵌套 4. switch-case開關(guān)語(yǔ)句 5. 程序舉例,引入:,在現(xiàn)實(shí)生活中,需要進(jìn)行判斷和選擇的情況是很多的 處理這些問題,關(guān)鍵在于進(jìn)行條件判斷 由于程序處理問題的需要,在大多數(shù)程序中都會(huì)包含選擇結(jié)構(gòu),需要在進(jìn)行下一個(gè)操作之前先進(jìn)行條件判斷,5.1 關(guān)于條件的表示,進(jìn)行邏輯判斷時(shí),C語(yǔ)言中提供了三種運(yùn)算: 關(guān)系運(yùn)算、邏輯運(yùn)算、條件運(yùn)算,三種運(yùn)算的結(jié)果: 均為邏輯值:即為“真”或“假”。 對(duì)于參與運(yùn)算的邏輯型數(shù)據(jù),進(jìn)行邏輯判斷時(shí) 將非0視為“真”; 0視為“假”。,關(guān)系運(yùn)算符 關(guān)系運(yùn)算符共有6種(雙目運(yùn)算符 ) 大于 = 大于等于 小于 = 小于等于 = 等于 != 不等于,一、關(guān)系運(yùn)算符和關(guān)系表達(dá)式,優(yōu)先級(jí): ,=, , =同級(jí)(高); != ,=同級(jí)(低) 結(jié)合性: 從左到右,算術(shù)運(yùn)算符運(yùn)算級(jí)別高于關(guān)系運(yùn)算符。 ab+c a(b+c),關(guān)系運(yùn)算的結(jié)果應(yīng)該為邏輯型“真”或“假”,用整型1表示“真”,用整型0表示“假”,即其結(jié)果為邏輯值。,關(guān)系運(yùn)算實(shí)例 關(guān)系表達(dá)式 75 的值是 1,57 的值是 0。,已知: int a=13, b=2, c=1; ab ab)=c ab=c a-b=c,成立, 結(jié)果為 1 不成立,結(jié)果為 0 成立, 結(jié)果為 1 不成立,結(jié)果為 0 結(jié)果為 1 與上面等價(jià),結(jié)果為 1 等價(jià)于(a-b)=1,結(jié)果為 0,例 若a=0; b=0.5; x=0.3; 則 a=x=b的值為,0,例 5278在C中是允許的, 值為,0,例 int i=1, j=7,a; a=i+(j%4!=0); 則a=,2,例 a0 結(jié)果為 A100 結(jié)果為,1,0,關(guān)系運(yùn)算注意(1),例 注意區(qū)分“=”與“= =” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,例 應(yīng)避免對(duì)實(shí)數(shù)作相等或不等的判斷 如 1.0/3.0*3.0=1.0 結(jié)果為 可改寫為:fabs(1.0/3.0*3.0-1.0)1e-6,0,關(guān)系運(yùn)算注意(2),if(a=b),邏輯運(yùn)算符 & 邏輯與 (雙目) | 邏輯或 (雙目) ! 邏輯非 (單目) 其中, !運(yùn)算符優(yōu)先級(jí)最高, &次之,|最低。,二、邏輯運(yùn)算符和邏輯表達(dá)式,結(jié)合方向:,! :從右向左 & :從左向右 | :從左向右,對(duì)于&運(yùn)算符,見假即假; 對(duì)于|運(yùn)算符,見真即真。,C語(yǔ)言中, 運(yùn)算量: 0表示“假”, 非0表示“真”, 運(yùn)算結(jié)果: 0表示“假”, 1表示“真”,邏輯運(yùn)算符和表達(dá)式(1),優(yōu)先級(jí):,結(jié)合方向:,例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53&2|84-!0 c&d,值為1,值為0,值為1,值為1,值為1,值為1,/(53)&2|(8(4-(!0) 值為1,邏輯運(yùn)算符和表達(dá)式(2),短路特性:邏輯表達(dá)式求解時(shí),并非所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符。,例 a (m=ab)&(n=cd),/結(jié)果m=0,n=1,邏輯運(yùn)算符和表達(dá)式(3),條件運(yùn)算符(三目) ? : 條件表達(dá)式: 表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3,三、條件運(yùn)算符和條件表達(dá)式,功能: 如果表達(dá)式1成立(表達(dá)式1值為非0),則執(zhí)行表達(dá)式2;否則(表達(dá)式1不成立),執(zhí)行表達(dá)式3。,例: max= (ab) ? a : b; 求變量a與b的最大值 min = (ab) ? a : b; 求變量a與b的最小值,條件運(yùn)算符的運(yùn)算方向: 在一個(gè)表達(dá)式內(nèi)為“自左向右”; 多個(gè)表達(dá)式連用結(jié)合性“自右向左”。,例: int x=1,y=2,z=3,w=4; printf(“%dn”,yx?w:z);,條件表達(dá)式的使用 #include void main() char ch; scanf(“%c“, ,5.2 if條件分支結(jié)構(gòu),if語(yǔ)句的三種基本形式 (1)簡(jiǎn)單if分支結(jié)構(gòu) if(表達(dá)式) 語(yǔ)句; 例: if(xy) printf(“%d”,x);,表達(dá)式必須用括號(hào)括起來。,例5.1 輸入兩個(gè)實(shí)數(shù),按代數(shù)值由小到大的順序輸出這兩個(gè)數(shù)。 #include void main() float a,b,t; scanf(“%f,%f”,y,5.2 if條件分支結(jié)構(gòu),例5.2 輸入三個(gè)數(shù)a,b,c,要求按由小到大的順序輸出。,if ab 將a和b對(duì)換 if ac 將a和c對(duì)換 if bc 將b和c對(duì)換,5.2 if條件分支結(jié)構(gòu),#include void main ( ) float a,b,c,t; scanf(“%f,%f,%f”, ,5.2 if條件分支結(jié)構(gòu),(2) ifelse兩路分支結(jié)構(gòu) if(表達(dá)式) 語(yǔ)句1; else 語(yǔ)句2;,例:在屏幕上顯示輸出兩個(gè)數(shù)中的較大者。,if (xy) printf(“%d”,x); else printf(“%d”,y);,5.2 if條件分支結(jié)構(gòu),(3) ifelse ifelse多路分支結(jié)構(gòu) if(表達(dá)式1)語(yǔ)句1; else if(表達(dá)式2)語(yǔ)句2; else if(表達(dá)式3)語(yǔ)句3; else if(表達(dá)式m)語(yǔ)句m; else 語(yǔ)句n;,5.2 if條件分支結(jié)構(gòu),例:從鍵盤輸入一個(gè)字符,對(duì)輸入的字符進(jìn)行分類,分為:控制、數(shù)字、大寫字母、小寫字母和其他字符等五類。 分析: ASCII碼表中的前32個(gè) (ASCII碼為 031) 字符為控制字符; 09為數(shù)字; AZ為大寫字母; az為小寫字母; 其它。不是以上 4 類字符的全部字符。,#include void main ( ) char c; printf (“Enter a character:“); c = getchar( ); if (c=0 ,注意:如何判斷數(shù)字、大寫字母和小寫字母,說明: (1)3種形式的if語(yǔ)句中在if后面都有表達(dá)式, 一般為邏輯表達(dá)式或關(guān)系表達(dá)式。,(2)第二、第三種形式的if語(yǔ)句中,在每個(gè) else前面有一個(gè)分號(hào),整個(gè)語(yǔ)句結(jié)束處有一 個(gè)分號(hào)。,(3)在if和else后面可以只含有一個(gè)內(nèi)嵌的操 作語(yǔ)句,也可以有多個(gè)操作語(yǔ)句,此時(shí)用大 括號(hào)將幾個(gè)語(yǔ)句括起來成為一個(gè)復(fù)合語(yǔ)句。,5.2 if條件分支結(jié)構(gòu),5.3 選擇結(jié)構(gòu)的嵌套,if語(yǔ)句的嵌套:在if語(yǔ)句中又包含一個(gè)或多個(gè)if語(yǔ)句稱為if語(yǔ)句的嵌套。,內(nèi)嵌if,形式: if() if() 語(yǔ)句1; else 語(yǔ)句2; else if() 語(yǔ)句3; else 語(yǔ)句4;,輸入變量x, 計(jì)算y: x+1 x=3,if (x2) if(x1) y = x+1; else y = x+2; else if(x3) y = x+3; else y = x+4;,匹配規(guī)則: else總是與它上面的、最近的、同一復(fù)合語(yǔ)句中的、未配 對(duì)的if語(yǔ)句配對(duì)。,例: if() if() 語(yǔ)句1; else if() 語(yǔ)句2; else 語(yǔ)句3;,例: if() if() 語(yǔ)句1; else if() 語(yǔ)句2; else 語(yǔ)句3;,當(dāng)if和else數(shù)目不同時(shí),可以加大括號(hào)來確定配對(duì)關(guān)系。,5.3 選擇結(jié)構(gòu)的嵌套,-1 (x0) 一個(gè)x值,輸出y值。 算法1: 算法2: 輸入x 輸入x 若x0,則y=1 若x=0,則y=0 輸出y 若x0,則y=1 輸出y,5.3 選擇結(jié)構(gòu)的嵌套,#include void main() int x,y; scanf(“%d”, ,5.3 選擇結(jié)構(gòu)的嵌套,上例中的程序段有四個(gè),請(qǐng)判斷哪個(gè)是正確的? 程序1: 程序2: if(x=0) y=-1; if(x0) y=1; else else y=0; if(x=0) y=0; else y=-1; else y=1; 程序3: 程序4: y=-1; y=0; if(x!=0) if(x=0) if(x0) y=1; if(x0) y=1; else y=0; else y=-1;,正 確,正 確,5.3 選擇結(jié)構(gòu)的嵌套,5.4 switch-case開關(guān)語(yǔ)句(多分支選擇語(yǔ)句),switch語(yǔ)句的格式: switch(表達(dá)式) case 常量表達(dá)式:語(yǔ)句; case 常量表達(dá)式:語(yǔ)句; case 常量表達(dá)式:語(yǔ)句; default: 語(yǔ)句; ,表達(dá)式的值為整型、字符型或枚舉型,switch 后面的表達(dá)式的各個(gè)不同的取值,5.4 switch-case開關(guān)語(yǔ)句(多分支選擇語(yǔ)句),例:要求按照考試成績(jī)的等級(jí)輸出百分制分?jǐn)?shù)段,用 switch語(yǔ)句實(shí)現(xiàn): switch(grade) case A:printf(“85100n“); case B:printf( “7084n“); case C:printf( “6069n“); case D:printf( “60n“ ); default:printf( “errorn“); ,5.4 switch-case開關(guān)語(yǔ)句(多分支選擇語(yǔ)句),switch語(yǔ)句格式 switch (表達(dá)式) case 常量1: 語(yǔ)句序列1; break; case 常量2: 語(yǔ)句序列2; break; default: 語(yǔ)句序列n+1; ,5.4 switch-case開關(guān)語(yǔ)句(多分支選擇語(yǔ)句),5.4 switch-case開關(guān)語(yǔ)句(多分支選擇語(yǔ)句),說明: switch后面括弧內(nèi)的“表達(dá)式”, ANSI標(biāo)準(zhǔn)允許它為任何類型。,(2) 當(dāng)表達(dá)式的值與某一個(gè)case后面的常量表達(dá)式的值相 等時(shí),就執(zhí)行此case后面的語(yǔ)句,若所有的case 中的常量表達(dá)式的值都沒有與表達(dá)式的值匹配的,就執(zhí)行default后面的語(yǔ)句。,(3) 每一個(gè)case的常量表達(dá)式的值必須互不相同,否則就 會(huì)出現(xiàn)互相矛盾的現(xiàn)象(對(duì)表達(dá)式的同一個(gè)值,有兩種或 多種執(zhí)行方案)。,5.4 switch-case開關(guān)語(yǔ)句(多分支選擇語(yǔ)句),(4) 各個(gè)case的出現(xiàn)次序不影響執(zhí)行結(jié)果(有break的情況)。 例如,可以先出現(xiàn)“case :”,然后是“case :”。,(5) 執(zhí)行完一個(gè)case后面的語(yǔ)句后,流程控制轉(zhuǎn)移到下一 個(gè)case繼續(xù)執(zhí)行(無break的情況)?!癱ase常量表達(dá)式”只是起語(yǔ)句標(biāo)號(hào)作用,并不是在該處進(jìn)行條件判斷。在執(zhí)行switch語(yǔ)句時(shí),根據(jù)switch后面表達(dá)式的值找到匹配的入口標(biāo)號(hào),就從此標(biāo)號(hào)開始執(zhí)行下去,不再進(jìn)行判斷。 在執(zhí)行一個(gè)case分支后,可以用一個(gè)break語(yǔ)句來終止switch語(yǔ)句的執(zhí)行。,(6) 多個(gè)case可以共用一組執(zhí)行語(yǔ)句。,5.4 switch-case開關(guān)語(yǔ)句(多分支選擇語(yǔ)句),5.5 程序舉例,例1 運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)。 路程()越遠(yuǎn),每公里運(yùn)費(fèi)越低。標(biāo)準(zhǔn)如下: 250 沒有折扣 250500 折扣 5001000 折扣 10002000 折扣 20003000 10折扣 3000 15折扣 設(shè)每公里每噸貨物的基本運(yùn)費(fèi)為,貨物重為,距離為, 折扣為,則總運(yùn)費(fèi)的計(jì)算公式為: *(),分析折扣變化的規(guī)律性: 折扣的“變化點(diǎn)”都是的倍數(shù) 設(shè)一變量,c的值為s/250。c代表的倍數(shù)。 ,無折扣; ,折扣; ,; ,; ,; ,。,5.5 程序舉例,#include void main ( ) int c,s; float p,w,d,f; scanf(“%f,%f,%d“,5.5 程序舉例,1.switch語(yǔ)句與if語(yǔ)句不同,僅能判斷一種關(guān)系:是否恒等。,2.switch語(yǔ)句中case子句的常量可以是整型常量、字符型常量、枚舉型數(shù)據(jù),或是整型常量表達(dá)式,不允許是變量。,3.在同一個(gè)switch中,case子句的常量不能相同。在嵌套的switch語(yǔ)句中,不同層次的switch之間,可有相同的常量。,switch語(yǔ)句 使用注意事項(xiàng),4.case 和 default 子句只能在switch語(yǔ)句中使用,且 case和 default 只起標(biāo)號(hào)作用,可出現(xiàn)在switch中的任何位置。,5.case 和 default 子句后面的語(yǔ)句序列允許由多個(gè)可執(zhí)行語(yǔ)句組成,且不必用“ ”括起來,也可以為空語(yǔ)句。,switch語(yǔ)句 使用注意事項(xiàng),switch語(yǔ)句的變形 1.default子句可以省略。 2.case 和 default 子句后面的語(yǔ)句可以為空語(yǔ)句。 3.switch語(yǔ)句中可省略break語(yǔ)句,但省略后會(huì)改變流程。,例 void main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(“na=%d,b=%d”,a,b); ,運(yùn)行結(jié)果:a=2,b=1,嵌套的 switch語(yǔ)句,例55 求x2方程的解。 基本的算法: ,不是二次方程。 b2,有兩個(gè)相等實(shí)根。 b2 ,有兩個(gè)不等實(shí)根。 b2 ,有兩個(gè)共軛復(fù)根。,5.5 程序舉例,#include #include void main ( ) float a,b,c,disc,x1,x2,realpart,imagpart; scanf(“%f,%f,%f“,5.5 程序舉例,else if(disc1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論