第04章 選擇結(jié)構(gòu)程序設(shè)計(jì)(培訓(xùn))ppt課件_第1頁(yè)
第04章 選擇結(jié)構(gòu)程序設(shè)計(jì)(培訓(xùn))ppt課件_第2頁(yè)
第04章 選擇結(jié)構(gòu)程序設(shè)計(jì)(培訓(xùn))ppt課件_第3頁(yè)
第04章 選擇結(jié)構(gòu)程序設(shè)計(jì)(培訓(xùn))ppt課件_第4頁(yè)
第04章 選擇結(jié)構(gòu)程序設(shè)計(jì)(培訓(xùn))ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、4.1關(guān)系運(yùn)算和邏輯運(yùn)算4.2 if語(yǔ)句和if語(yǔ)句構(gòu)成的選擇結(jié)構(gòu)4.3 條件表達(dá)式構(gòu)成的選擇結(jié)構(gòu)第四章 選擇結(jié)構(gòu)程序設(shè)計(jì) 4.4 switch語(yǔ)句 4.4 goto語(yǔ)句4.1.1、C語(yǔ)言的邏輯值 關(guān)系表達(dá)式和邏輯表達(dá)式的運(yùn)算結(jié)果會(huì)得到一個(gè)邏輯值。邏輯值只有兩個(gè),分別用“真”和“假”表示,C語(yǔ)言中沒有專門的“邏輯值”,在表示邏輯表達(dá)式或關(guān)系結(jié)果是,以數(shù)值1代表“真”,0代表“假”,但在判斷一個(gè)量是否為“真”時(shí),以0代表“假”,以非0(不論正負(fù))代表真。4.1.2、關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算:比較運(yùn)算,比較兩個(gè)操作數(shù),看是否滿足給定的關(guān)系。1、關(guān)系運(yùn)算符(6種):小于 ,53, 35=:小于等

2、于,5=3,3:大于,53,35=:大于等于,5 =3,3 =5 ,與數(shù)學(xué)上()不同=:等于,5=3 ,與數(shù)學(xué)上(=)不同!=:不等于,5!=3 ,與數(shù)學(xué)上()不同2、關(guān)系表達(dá)式和關(guān)系表達(dá)式的值用關(guān)系運(yùn)算符將表達(dá)式連接起來的式子優(yōu)先級(jí) =高 低= !=結(jié)合方向自左向右表達(dá)式的值關(guān)系成立,即為真,結(jié)果為1;關(guān)系不成立,即為假,結(jié)果為0;算術(shù)運(yùn)算符高 低C語(yǔ)言中,真:非0值,假:0值 如:ab,a+bc-d,(a=3)=b,(ab)= =(bc)例如,假設(shè)num1=3,num2=4,num3=5,則: (1)num1num2的值為?。 (2)(num1num2)!=num3的值為? 。 (3)nu

3、m1num2num3的值為?。 思考題:任意改變num1或num2的值,會(huì)影響整個(gè)表達(dá)式的值嗎?為什么? (4)(num1num2)+num3的值為? 6.因?yàn)閚um1=0) & (x10) ,(x5) ,! (x= =0),例如:1.假設(shè) int a=5; float b=3.5;!a0!b0a&b1a|b1 !a&!b 04、注意在邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符。例2-7:a=0; b=1; c=2; d=a+&b+&- -c;d=(a+)&(b+)&(- -c);運(yùn)算結(jié)果: d=0,a=1,b=1,c

4、=2(1)a & b & c求解方法:只有a為真(非0),才需要判斷b的值,只有a和b都為真,才需要判斷c的值。只要a為假,就不必判斷b和c,運(yùn)算立即中止。(2)a | b | c求解方法:只要a為真(非0),就不必判斷b和c;只有a 為假,才判斷b;a和b都為假,才判斷c。例2-8:a=0; b=1; c=2; d=a+|b+|- -c; d=(a+)|(b+)|(- -c); 運(yùn)算結(jié)果: d=1,a=1,b=2,c=2 以下的條件如何使用c語(yǔ)言的邏輯和關(guān)系表達(dá)式表述:1.0 x0&x5&x%7!=0y1&yb)&!c|1c.a&b d.a|(b+b)&(c-a)A國(guó)家等級(jí)考試練習(xí)2.有以下

5、程序main()int a,b,d=25; a=d/10%9; b=a&(-1) printf(“%d,%dn”,a,b);程序運(yùn)行后的輸出結(jié)果是:a.1 2 3 b.2 3 4 c.2 2 3 d.2 3 3 D4.已定義“char ch=“$”;int i=1,j;”,執(zhí)行“j=!ch&i+以后,i的值為5.以下程序運(yùn)行后的結(jié)果是main() int a,b,c; a=10;b=20; c=(a%b1); printf(“%d %d %dn”,a,b,c);6.在C語(yǔ)言中,邏輯“真”等價(jià)于下面哪一項(xiàng)a.整數(shù)1 b.True c.非0數(shù) d.任意常數(shù)110 20 0C7.有以下程序:main

6、() int a=1,b=2,m=0,n=0,k; k=(n=ba)|(m=a0解題的步驟:輸入xx0是 y=3-xy=2/x否 輸出y的值 C語(yǔ)言用來設(shè)計(jì)條件選擇結(jié)構(gòu)程序的選擇語(yǔ)句有兩種: if語(yǔ)句、switch語(yǔ)句。 4.2 if語(yǔ)句 1、單分支選擇if語(yǔ)句if語(yǔ)句有三種形式:?jiǎn)畏种нx擇if語(yǔ)句、雙分支面具選擇if語(yǔ)句、多分支選擇if語(yǔ)句。 語(yǔ)句形式: if (表達(dá)式) 語(yǔ)句 語(yǔ)句執(zhí)行流程: 表達(dá)式語(yǔ)句真(非0)假(0)4.2.1 if語(yǔ)句的三種形式例4-1:從鍵盤輸入兩個(gè)整數(shù)a和b,如果a大于b則交換兩數(shù),最后輸出兩個(gè)數(shù)。 #include 輸入a,bab交換a、b輸出結(jié)束真假 void

7、 main() int a,b,t; scanf(%d,%d,&a,&b); if(ab) t=a;a=b;b=t; printf(a=%d,b=%dn,a,b); 注意: (1)if語(yǔ)句自動(dòng)結(jié)合一個(gè)語(yǔ)句,當(dāng)滿足條件需要執(zhí)行多個(gè)語(yǔ)句時(shí),應(yīng)用一對(duì)大括號(hào)將需要執(zhí)行的多個(gè)語(yǔ)句括起,形成一個(gè)復(fù)合語(yǔ)句。 (2)if語(yǔ)句中表達(dá)式形式很靈活,可以是常量、變量、任何類型表達(dá)式、函數(shù)、指針等。只要表達(dá)式的值為非零值,條件就為真,反之條件為假。 2、雙分支選擇if語(yǔ)句語(yǔ)句形式:if (表達(dá)式) 語(yǔ)句1else 語(yǔ)句2 語(yǔ)句執(zhí)行流程: 表達(dá)式語(yǔ)句1真(非0)假(0)語(yǔ)句2例4-2 輸入兩個(gè)整數(shù),輸出其中較大的數(shù)。

8、#include #include void main()int x,y,max; scanf(%d,%d,&x,&y); if(xy) max=x; else max=y; printf(max=%dn,max); 輸入x,yxymax=x輸出最大值結(jié)束真假max=y注意if和else語(yǔ)句之間只能有一個(gè)語(yǔ)句,當(dāng)ifelse之間的語(yǔ)句不只一句時(shí),應(yīng)用一對(duì)將語(yǔ)句括起。 if(ab) a+;b+;else a=0;b=10; if(ab) a+;b+;else a=0;b=10;3、多分支選擇if語(yǔ)句語(yǔ)句形式:if (表達(dá)式1) 語(yǔ)句1else if (表達(dá)式2)語(yǔ)句2 else if (表達(dá)式n

9、)語(yǔ)句n else 語(yǔ)句n+1else子句可以省略語(yǔ)句執(zhí)行流程: 表達(dá)式1語(yǔ)句1真(非0)假(0)語(yǔ)句2表達(dá)式2真(非0)表達(dá)式2語(yǔ)句n語(yǔ)句n+1假(0)假(0)例4-3:計(jì)算分段函數(shù)。假輸入xX=1真X10y=3/(x-10)y=2xy=x+5假真#include void main()float x,y; printf(enter x:);scanf( %f ,&x);if (x=1) y=x+5; else if (x10) y=3/(x-10);else printf(“not definen”); printf(x=%.2f,y=%.2fn,x,y); 計(jì)算分段函數(shù)程序語(yǔ)句含義:語(yǔ)句

10、形式: 當(dāng)if語(yǔ)句中又包含若干個(gè)if語(yǔ)句時(shí),則構(gòu)成了if 語(yǔ)句嵌套的情形。4.2.2 if語(yǔ)句的嵌套if ( 表達(dá)式1) if ( 表達(dá)式2) 語(yǔ)句1 if ( 表達(dá)式1) if ( 表達(dá)式2) 語(yǔ)句1 else 語(yǔ)句2if ( 表達(dá)式1) if ( 表達(dá)式2) 語(yǔ)句1 else 語(yǔ)句2if ( 表達(dá)式1) if ( 表達(dá)式2) 語(yǔ)句1 else 語(yǔ)句2else 語(yǔ)句3if ( 表達(dá)式1) if ( 表達(dá)式2) 語(yǔ)句1 else 語(yǔ)句2else if(表達(dá)式3) 語(yǔ)句3 else 語(yǔ)句4 語(yǔ)句執(zhí)行流程: else與if的配對(duì)原則: 就近一致原則: else與同一層最接近它,而又沒有其它else

11、語(yǔ)句與之相匹配的if語(yǔ)句配對(duì)。真(非0)語(yǔ)句2假(0)表達(dá)式2語(yǔ)句1語(yǔ)句4假(0)真(非0)表達(dá)式1假(0)真(非0)表達(dá)式3語(yǔ)句3建議:對(duì)于嵌套的if語(yǔ)句最好使用“”擴(kuò)起來同時(shí)采用代碼縮進(jìn)的形式書寫國(guó)家級(jí)等級(jí)考試練習(xí):1.設(shè)變量x和y均已正確定義并賦值,以下的if語(yǔ)句中,在編譯時(shí)將產(chǎn)生錯(cuò)誤信息的是a.if(x+); b.if(xy&y!=0);c.if(xy) x- d.if(y0) ; else y+; else x+;2.在嵌套使用if語(yǔ)句時(shí),C語(yǔ)言規(guī)定else總是a.和之前與具有相同縮進(jìn)位置的if配對(duì)b.和之前與其最近的if配對(duì)c.和之前與其最近的且不帶else的if配對(duì)d.和之前的第

12、一個(gè)if配對(duì)CC3.有以下程序程序:main()int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3;printf(“%d,%d,%d,%dn”,a,b,c,d);程序輸出的結(jié)果是a.0,1,2,0 b.0,0,0,3 c.1,1,2,0 d.編譯有錯(cuò)D4.設(shè)有變量a、b、c、d和y都已正確并賦值,若有以下if語(yǔ)句:if(ab) if(c=d) y=0; else y=1;該語(yǔ)句所表示的含義是a.y=0 a=bb.y=0 a=b且c!=dc.y=0 ab且c=d1 ab且c!=dd.y=0 ab且c=d1 c!=dC5.有以下程序運(yùn)行后的輸出結(jié)果是mai

13、n() int a=3,b=4,c=5,t=99; if(ba&ac) t=a; a=c; c=t; if(ac&bb) if(bc) printf(“%d”,d+ + 1); else printf(“%d”,+d + 1); printf(“%dn”,d);程序運(yùn)行后的結(jié)果是a.2 b.3 c.43 d.44A4.3、條件運(yùn)算符與條件表達(dá)式有兩個(gè)符號(hào):?、:,它與三個(gè)操作數(shù)組成三元運(yùn)算。一般形式: ? :求值規(guī)則和表達(dá)式的值:求解表達(dá)式1真(非0)求解表達(dá)式2假(0)求解表達(dá)式3表達(dá)式的值優(yōu)先級(jí):算術(shù)關(guān)系邏輯 條件 賦值結(jié)合性: 自右至左例: int max,a=5;b=3; max=ab

14、?a:b-a=b+ ? a+ : b+ y = x10 ? x/10 : x0 ? x: -x;1.有以下計(jì)算公式y(tǒng)=(x=0)(x=0) y=sqrt(x); b.y=sqrt(x); else y=sqrt(-x); if(x=0) y=sqrt(x); y=sqrt(x=0?x:-x); if(x0) b.(x-y0) c.(x-y0) d.x-y=0C3.設(shè)有條件表達(dá)式“(EXP)?i+:j+”,則以下表達(dá)式中與“(EXP)”完全等價(jià)的是_a.(EXP=0) b.(EXP!=0) c.(EXP=1) d.(EXP!=1)B4.有以下程序段:int k=0,a=1,b=2,c=3;k=a

15、c?c:k;執(zhí)行該程序后,k的值是a.3 b.2 c.1 d.0B5.若整型變量a,b,c,d中的值依次為1,4,3,2,則條件表達(dá)式ab?a:cb?(ac?a:c):(b);a.5 b.4 c.6 d.不確定C形式:逗號(hào)表達(dá)式1,逗號(hào)表達(dá)式2,逗號(hào)表達(dá)式n 求值規(guī)則:從左至右依次計(jì)算各表達(dá)式的值優(yōu)先級(jí)所有運(yùn)算符里最低 結(jié)合性:自左至右 表達(dá)式的值最后一個(gè)表達(dá)式的值。逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式例: a b y 逗號(hào)表達(dá)式 y=a=4,b=5,a+b; 4 5 4 9 y=(a=4,b=5,a+b); 4 5 9 9 y=(a=4,b=5),a+b; 4 5 5 9 y=a=(4,b=5),a+b;

16、 5 5 5 104.4 switch語(yǔ)句1、語(yǔ)句形式: switch (表達(dá)式) case 常量表達(dá)式1: 語(yǔ)句1; case 常量表達(dá)式2: 語(yǔ)句2; case 常量表達(dá)式3: 語(yǔ)句3; . case 常量表達(dá)式n: 語(yǔ)句n; default : 語(yǔ)句n+1; 根據(jù)表達(dá)式的不同值,選擇不同的程序分支,又稱開關(guān)語(yǔ)句。數(shù)值型或字符型常量表達(dá)式的值必須互不相同,否則執(zhí)行時(shí)將出現(xiàn)矛盾,即同一個(gè)開關(guān)值,將對(duì)應(yīng)多種執(zhí)行方案。千萬(wàn)不能接(;)號(hào)2、語(yǔ)句執(zhí)行流程:指語(yǔ)句的最后一條是否為break簡(jiǎn)單語(yǔ)句或復(fù)合語(yǔ)句breakbreak有無(wú)break有無(wú)有計(jì)算表達(dá)式常量1常量2常量n=語(yǔ)句1=語(yǔ)句2語(yǔ)句n其它

17、=語(yǔ)句n+1無(wú)值case語(yǔ)句出現(xiàn)的次序并不影響執(zhí)行結(jié)果。例4-4:假設(shè)用0、1、2.6分別表示星期日、星期一.星期六。現(xiàn)輸入一個(gè)數(shù)字,輸出對(duì)應(yīng)的星期幾的英文單詞。如果輸入3,輸出“Wednesday”。 #include stdio.hvoid main()int n;scanf(%d,&n);switch(n)case 0: printf(Sundayn);case 1: printf(Mondayn);case 2: printf(Tuesdayn);case 3: printf(Wednesdayn);case 4: printf(Thursdayn);case 5: printf(Fr

18、idayn);case 6: printf(Saturdayn);default: printf(Error);程序運(yùn)行情況如下:3Wednesday ThursdayFridaySaturdayerror在“switch”語(yǔ)句中,“case 常量表達(dá)式”只相當(dāng)于一個(gè)語(yǔ)句標(biāo)號(hào),表達(dá)式的值和某標(biāo)號(hào)相等則轉(zhuǎn)向該標(biāo)號(hào)執(zhí)行,但不能在執(zhí)行完該標(biāo)號(hào)的語(yǔ)句后自動(dòng)跳出整個(gè)switch 語(yǔ)句,因此會(huì)繼續(xù)執(zhí)行所有后面語(yǔ)句的情況。 為此,語(yǔ)言提供了一種break語(yǔ)句,其功能是可以跳出它所在的switch語(yǔ)句。將上面的例4-4修改如下:#include stdio.hvoid main()int n;scanf(%d

19、,&n);switch(n)case 0: printf(Sundayn); break;case 1: printf(Mondayn); break;case 2: printf(Tuesdayn); break;case 3: printf(Wednesdayn); break;case 4: printf(Thursdayn); break;case 5: printf(Fridayn); break;case 6: printf(Saturdayn); break;default: printf(Error);程序運(yùn)行情況如下:3Wednesday 3、說明多個(gè)case語(yǔ)句可以共用一組

20、執(zhí)行語(yǔ)句。 switch(grade) case 10: case 9: case 8:printf(“A);break; default:printf(“B);各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。 default語(yǔ)句可以省略不用。case和default與其后面的常量表達(dá)式間至少有一個(gè)空格。switch語(yǔ)句可以嵌套,break語(yǔ)句只跳出它所在的switch語(yǔ)句。 例4-5 企業(yè)發(fā)放的獎(jiǎng)金根據(jù)利潤(rùn)提成。從鍵盤輸入當(dāng)月利潤(rùn),求應(yīng)發(fā)放獎(jiǎng)金總數(shù)? 利潤(rùn)xx=1010 x2020 x4040 x6060 x1001000) case 1:switch(b0) ca

21、se 1:printf(“”);break; case 2:printf(“!”);break; case 0:switch(c=5) case 0:printf(“*”);break; case 1:printf(“#”);break; case 2:printf(“$”);break; default:printf(“&”);printf(“n”);#&4.5 語(yǔ)句標(biāo)號(hào)和goto語(yǔ)句1.語(yǔ)句標(biāo)號(hào)標(biāo)號(hào)可以是任意的合法的標(biāo)識(shí)符,當(dāng)在標(biāo)識(shí)符后面加一個(gè)冒號(hào),如:flag1: stop0: ,該標(biāo)識(shí)符就成了一個(gè)語(yǔ)句標(biāo)號(hào)。2.goto語(yǔ)句goto語(yǔ)句稱為無(wú)條件轉(zhuǎn)向語(yǔ)句,一般形式如下:goto 語(yǔ)句標(biāo)號(hào);作用:把程序的執(zhí)行流程轉(zhuǎn)向語(yǔ)句標(biāo)號(hào)所在的位置,這個(gè)語(yǔ)句標(biāo)號(hào)必須與此goto語(yǔ)句同在一個(gè)函數(shù)之內(nèi)。例如: i=1; sum: i=i+1; if(i5) goto sum;printf(“%d”,i);選擇結(jié)構(gòu)程序設(shè)計(jì)舉例 例4-7 將任意三個(gè)整數(shù)按從大到小的順序輸出。 #include stdio.hvoid main()int x,y,z,t;scanf

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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)論