c語(yǔ)言程序設(shè)計(jì)第四章.ppt_第1頁(yè)
c語(yǔ)言程序設(shè)計(jì)第四章.ppt_第2頁(yè)
c語(yǔ)言程序設(shè)計(jì)第四章.ppt_第3頁(yè)
c語(yǔ)言程序設(shè)計(jì)第四章.ppt_第4頁(yè)
c語(yǔ)言程序設(shè)計(jì)第四章.ppt_第5頁(yè)
已閱讀5頁(yè),還剩44頁(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)介

第四章 選擇結(jié)構(gòu),4.1 關(guān)系運(yùn)算和邏輯運(yùn)算,選擇結(jié)構(gòu)是程序基本控制結(jié)構(gòu)之一。 C語(yǔ)言中的選擇結(jié)構(gòu)包括三種條件語(yǔ)句: if 語(yǔ)句 switch語(yǔ)句 條件表達(dá)式語(yǔ)句 4.1.1 C語(yǔ)言中的邏輯值 判斷邏輯值:非0值為真,0值為假。 表達(dá)邏輯值:“1”為真,“0”為假。,.1.2 關(guān)系運(yùn)算符和關(guān)系表達(dá)式 . 六個(gè)關(guān)系運(yùn)算符,算術(shù)運(yùn)算 關(guān)系運(yùn)算 賦值運(yùn)算,2關(guān)系表達(dá)式 關(guān)系表達(dá)式的值只有兩個(gè):為真時(shí)值為1,為假值為0。 例:,4.1.3 邏輯運(yùn)算符和邏輯表達(dá)式,三種: & (與), (或) ! (非),其意義見(jiàn)真值表,4.1.3.1 C語(yǔ)言中的邏 輯運(yùn)算符,a&b 當(dāng)a, b均為1時(shí),才為1,a b 當(dāng)a, b中有一個(gè)為1時(shí),才為1,!a 當(dāng)a為1, !a為0,反之為1.,由此看到: 和&為雙目運(yùn)算符. !為單目運(yùn)算符。,邏輯運(yùn)算符運(yùn)算規(guī)則: 對(duì)象值為0,結(jié)果為1。,優(yōu)先級(jí)定義:,2. &和低于關(guān)系運(yùn)算符。!高于算術(shù)運(yùn)算符,1. !(非)優(yōu)先于&(與).&優(yōu)先于,即: !& ,例: !a&b xy & c (!a)&b) (xy)&c),1. 邏輯表達(dá)式的值與關(guān)系表達(dá)式值一樣,真為1,假為0。,例: a=4 則 !a 值為0.此處只要a 0,為真.則!a值為0., a=4, b=5 a&b為1,前面已定義了邏輯表達(dá)式,以下看一看邏輯表達(dá)式的值及具體的運(yùn)算。, 4&0 2 為1.,總之,在邏輯運(yùn)算中,非0值參加邏輯運(yùn)算時(shí)被看成1處理., a=4, b=5 a b為1, a=4, b=5 !a b為1,系統(tǒng)優(yōu)化: exp1|exp2 中,若exp1為1,不再計(jì)算exp2,直接得1。 exp1&exp2中,若exp1為0,不再計(jì)算exp2,直接得0。,2. 一個(gè)邏輯表達(dá)式中的邏輯運(yùn)算符并不是一定全部執(zhí)行.,如: a&b&c. 則當(dāng)a=0(假)時(shí), b,c不需判斷。當(dāng)a=1,b=0,則不需判c.,又如: a b c. 當(dāng)a=1時(shí),b, c均不必判別。,邏輯表達(dá)式舉例,11.2.1 if語(yǔ)句 if語(yǔ)句的兩種形式: 形式一: if(表達(dá)式e) 語(yǔ)句S1,功能: 當(dāng)表達(dá)式值非0時(shí), 執(zhí)行語(yǔ)句A,否則不執(zhí)行語(yǔ)句A.,例如: if (xy) printf(“ %d“, x),形式1 if(表達(dá)式)語(yǔ)句A,其流程圖:,形式2 if(表達(dá)式e)語(yǔ)句A else 語(yǔ)句B,功能: 表達(dá)式為非0,執(zhí)行語(yǔ)句A ;表達(dá)式為0,執(zhí)行語(yǔ)句B,例: if(xy) printf(“%d“, x); else printf(“ %d“, y);,注 1. 表達(dá)式e:可以是關(guān)系表達(dá)式, 邏輯表達(dá)式, 或任何類(lèi)型表達(dá)式。其作用是控制整個(gè)語(yǔ)句的執(zhí)行路線。 語(yǔ)句S1和語(yǔ)句S2可以是任何類(lèi)型的單個(gè)語(yǔ)句(包括空語(yǔ)句和復(fù)合語(yǔ)句)。單個(gè)語(yǔ)句必須加“;”復(fù)合語(yǔ)句外面不用加“;”。 例如,以下語(yǔ)句是允許的:,if (x=0) y=x; s=x+y; else y=-x; s=0;,復(fù)合語(yǔ)句,復(fù)合語(yǔ)句,3. 整個(gè)if 語(yǔ)句,在語(yǔ)法上是一個(gè)語(yǔ)句。,一個(gè)語(yǔ)句,例4.1 分別用雙目if語(yǔ)句和單目if語(yǔ)句求兩個(gè)變量的最小值。 解1: 用雙目if語(yǔ)句,程序如下: #include void main ( ) int x , y , min ; printf(“n Input x y:“); scanf (“ %d%d “, ,如從鍵盤(pán)上輸入: 34 89 則輸出結(jié)果: min(34,89)=34,解2:用單目if語(yǔ)句,程序如下: #include void main ( ) int x, y, min ; printf(“n Input x y:“); scanf (“ %d%d “, ,解3: 進(jìn)行變量交換 #include void main ( ) int x, y, t ; printf(“n Input x y:“); scanf (“ %d%d “, ,例4.2. 從鍵盤(pán)上輸入一字符,判斷它是否是英文字母,若是輸出Y, 否則輸出 N。 解. #include #include void main ( ) char c; printf(“n Input a char:“); c=getch(); putchar(n); if(A=c ,括號(hào)內(nèi)不能寫(xiě)成: A=c=Z|a=c=z,例4.3 輸入三個(gè)數(shù),按大小順序輸出。,main ( ) float a, b, c,t; scanf(“%f,%f,%f“, ,if (bc) t=b; b=c; c=t; printf(“%5.2f, %5.2f, %5.2f“, a, b, c); ,運(yùn)行情況如下:,3,7,1 1.00, 3.00, 7.00,if語(yǔ)句的S1和S2可以是任何類(lèi)型的語(yǔ)句。特別地,也可以是if語(yǔ)句(單目的或雙目的)。當(dāng)語(yǔ)句S1和(或)語(yǔ)句S2又是if語(yǔ)句時(shí),就構(gòu)成了if語(yǔ)句的嵌套。,注. 嵌套式if語(yǔ)句中,每個(gè)else通常是同它前邊最近的那個(gè)if相匹配。 程序書(shū)寫(xiě)時(shí)注意層次關(guān)系,養(yǎng)成良好的習(xí)慣。,if (e1) if(e2) else else ,兩層if 語(yǔ)句的嵌套,4.2.2. if語(yǔ)句的嵌套,例4.4 有一函數(shù),y=,1 (x0),編一程序,輸入一個(gè)x值,輸出y值。,有以下幾種寫(xiě)法,請(qǐng)判斷哪些是正確的?,程序1: main ( ) int x, y; scanf(“d“, ,if (x0) y= 1; else if (x= =0) y=0; else y=1; printf (“x=%d, y=%dn“, x, y); ,程序2:將上面程序的if語(yǔ)句改為: if (x=0) if (x0) y=1; else y=0; else y= 1;,程序3: 將上述if語(yǔ)句改為: y= 0; if (x! =0) if (x0) y=1; else y=-1;,程序4: y=0; if (x=0) if (x0) y=1; else y= 1;,例4.5 對(duì)于已知的int型變量x值,計(jì)算并輸出函數(shù)f(x)值。f(x)定義為:,程序如下: main ( ) float x, f ; printf(“nInput float x: x=0 ,例4.6: 對(duì)已知int型的百分制成績(jī)score,按以下算法計(jì)算并輸出其相應(yīng)的等級(jí): score90 等級(jí)為A 90score80 等級(jí)為B 80score60 等級(jí)為C score60 等級(jí)為D,程序如下: #include void main ( ) int score; printf(“n input score:”); scanf (“%d“, ,if (score=90) printf (“n A“) ; else,if (score=80) printf (“n B“) ; else,if (score=60) printf (“n C“) ; else printf (“n D“) ;,條件表達(dá)式語(yǔ)句等價(jià)于以下的if語(yǔ)句: if (e1) e2 ; else e3 ;,4.3條件表達(dá)式構(gòu)成的選擇結(jié)構(gòu),C語(yǔ)言提供了一個(gè)簡(jiǎn)單的條件賦值語(yǔ)句或條件表達(dá)式。,條件運(yùn)算符為? : 三目運(yùn)算符。,功能: 先判表達(dá)式1, 若非0,則值為表達(dá)式2的值,否則為表達(dá)式3的值。,一般形式,表達(dá)式1?表達(dá)式2: 表達(dá)式3,max=ab? a:b; 當(dāng)ab. max a. 否則maxb,例4.7 判斷一個(gè)int型變量的值是否奇數(shù),是則輸出 Odd ,否則輸出 Even 。程序如下: main ( ) int n ; printf(“nInput int n:n“); scanf (“%d“, 程序最后一個(gè)語(yǔ)句中 printf的參數(shù)是條件表達(dá)式,其中n%2= =1為表達(dá)式e1 , “nOdd“為表達(dá)式e2,“nEven“為表達(dá)式e3。即,printf的參數(shù)為“nOdd“或“nEven“。,注: 1. 條件運(yùn)算符優(yōu)先于賦值運(yùn)算符. 例: max=(ab? a:b)可去掉( ),2. 條件運(yùn)算符低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符。 例: max=ab? a:b+1 max= ab? a:(b+1)并不是 max=(ab? a:b)+1,3. 條件運(yùn)算符結(jié)合性為從右至左. 如: ab? a:cd ? c:d 相當(dāng)于 ab? a:(cd? c:d),4. 條件表達(dá)式不能取代一般的if語(yǔ)句,只有當(dāng)if 的兩 個(gè)分支為給同一變量賦值時(shí)才可替代if.,if (ab) printf(“%d“, a); else printf (“%d“, b),由于printf.不是表達(dá)式,故不可用條件表達(dá)式,但可為: printf(“%d“, ab? a:b);,5. 表達(dá)式1、表達(dá)式2、表達(dá)式3可類(lèi)型不同。,main ( ) char ch; scanf (“%c“, ch=(ch=A & ch=Z? (ch+32):ch) printf(“%c“, ch) ,例4.8 輸入一個(gè)字符,判別它是否大寫(xiě)字母,如果是,將它轉(zhuǎn)換成小寫(xiě)字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。,運(yùn)行結(jié)果如下: A a,4.4 switch語(yǔ)句 具有多目分支的switch語(yǔ)句又稱為開(kāi)關(guān)語(yǔ)句,其一般形式為: switch (表達(dá)式e) case 常量表達(dá)式1 : 語(yǔ)句段1 break ; case 常量表達(dá)式n : 語(yǔ)句段n break ; default: 語(yǔ)句段n+1 ,例4.9: 根據(jù)成績(jī)等級(jí)打印百分?jǐn)?shù)段.,switch (grade), case A: printf (“85100n“);,case B: printf (“7084n“);,case C: printf (“6069n“);,case D: printf (“60n“);,default: printf (“errorn“);, 根據(jù)表達(dá)式的取值, 判斷其與哪一個(gè)常量表達(dá)式相等。如=表達(dá)式i,則自語(yǔ)句i開(kāi)始執(zhí)行,直到語(yǔ)句n+1止。, 若與所有常量表達(dá)式值不相等,則從default后的語(yǔ)句開(kāi)始執(zhí)行。,功能:,switch (表達(dá)式) case 常表1: 語(yǔ)句1; break;,一般形式改為:,以上存在一個(gè)問(wèn)題: 沒(méi)有完全起到分支作用。,解決辦法: 增加break語(yǔ)句, 使之跳出switch結(jié)構(gòu)。,case 常表2: 語(yǔ)句2; break; case 常表n: 語(yǔ)句n; break; default: 語(yǔ)句n+1; ,請(qǐng)大家修改以上例子,使之正確。,注: 1. 常表值必須互不相等,否則二異性。,2. case順序無(wú)關(guān)緊要。,3. 不一定非用break不可,有時(shí)幾種情況合并執(zhí)行一組語(yǔ)句。,例4.10 switch (grade) case A : case B: case C: printf(“60n“); break; case D: printf(“60n“); break; ,關(guān)于switch語(yǔ)句還有幾點(diǎn)說(shuō)明: 1. switch、case、default是系統(tǒng)的關(guān)鍵字,它們僅出現(xiàn)在switch結(jié)構(gòu)中。default及其后的語(yǔ)句段可以缺省。 2. switch后的一對(duì)圓括號(hào)不能省,后面的一對(duì)大括號(hào)不能省。 3. switch語(yǔ)句中的各常量表達(dá)式其值均為整型或字符型。這些表達(dá)式中不能含有變量或函數(shù)調(diào)用。如,不允許有score =80 & score90。switch后面圓括號(hào)中的表達(dá)式e其值通常為整型或字符型。 4.系統(tǒng)執(zhí)行switch結(jié)構(gòu)中的某個(gè)語(yǔ)句段時(shí),僅當(dāng)遇到break語(yǔ)句時(shí)才結(jié)束并跳出switch語(yǔ)句,否則將順序執(zhí)行。,4.5 語(yǔ)句標(biāo)號(hào)和goto語(yǔ)句,4.5.1語(yǔ)句標(biāo)號(hào) 語(yǔ)句標(biāo)號(hào)不必特意定義,可以是任意合法的標(biāo)識(shí)符,在標(biāo)識(shí) 符的后面加一個(gè)冒號(hào)就構(gòu)成了標(biāo)號(hào)。 注: 標(biāo)號(hào)必須是標(biāo)識(shí)符,可以和變量同名。通常用作goto語(yǔ)句的 轉(zhuǎn)向目標(biāo)。 在C語(yǔ)言中,可以在任何語(yǔ)句前加上語(yǔ)句標(biāo)號(hào)。,4.5.2 goto語(yǔ)句 稱為無(wú)條件轉(zhuǎn)向語(yǔ)句。 格式:goto 語(yǔ)句標(biāo)號(hào); 功能:把程序的執(zhí)行轉(zhuǎn)向語(yǔ)句標(biāo)號(hào)所在的位置,標(biāo)號(hào)必須和 goto語(yǔ)句在同一個(gè)函數(shù)內(nèi)。,4.5 程序舉例,例1 寫(xiě)一程序,輸入年號(hào),判斷是否為閏年。,1. 算法: 根據(jù)閏年的判斷條件, 當(dāng)年號(hào)能被4整除但不能被100整除時(shí),它為閏年。, 當(dāng)年號(hào)能被100整除又能被400整除時(shí),它為閏年。,設(shè)用變量year表示年號(hào),leap為待置值變量,當(dāng)year為閏年:leap1, 否則leap0.,2. 流程圖,leap%400=0,leap1,leap=0,打印非閏年,打印是閏年,結(jié)束,leap1,yes,No,yes,No,A,3. 程序:,main ( ) in

溫馨提示

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