第04章選擇結(jié)構(gòu)程序設(shè)計(jì) 全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí) C語(yǔ)言程序設(shè)計(jì)培訓(xùn)_第1頁(yè)
第04章選擇結(jié)構(gòu)程序設(shè)計(jì) 全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí) C語(yǔ)言程序設(shè)計(jì)培訓(xùn)_第2頁(yè)
第04章選擇結(jié)構(gòu)程序設(shè)計(jì) 全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí) C語(yǔ)言程序設(shè)計(jì)培訓(xùn)_第3頁(yè)
第04章選擇結(jié)構(gòu)程序設(shè)計(jì) 全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí) C語(yǔ)言程序設(shè)計(jì)培訓(xùn)_第4頁(yè)
第04章選擇結(jié)構(gòu)程序設(shè)計(jì) 全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí) C語(yǔ)言程序設(shè)計(jì)培訓(xùn)_第5頁(yè)
已閱讀5頁(yè),還剩56頁(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、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ǔ)言 中沒(méi)有專門(mén)的“邏輯值”,在表示邏輯表達(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種),:小于

2、,53, 35,=:小于等于,5=3,3=5,與數(shù)學(xué)上()不同,:大于,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á)式連接起來(lái)的式子,優(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)n

3、um1num2的值為?。 (2)(num1num2)!=num3的值為? 。 (3)num1num2num3的值為?。 思考題:任意改變num1或num2的值,會(huì)影響整個(gè)表達(dá)式的值嗎?為什么? (4)(num1num2)+num3的值為? 6.因?yàn)閚um1num2的值=1,1+5=6。 再次強(qiáng)調(diào):C語(yǔ)言用整數(shù)“1”表示“邏輯真”,用整數(shù)“0”表示“邏輯假”。所以,關(guān)系表達(dá)式的值,還可以參與其它種類的運(yùn)算,例如算術(shù)運(yùn)算、邏輯運(yùn)算等。,0,1,1,4.1.3、邏輯運(yùn)算符和邏輯表達(dá)式,1、邏輯運(yùn)算符(3種),?。哼壿嫹牵辉\(yùn)算符,運(yùn)算規(guī)則:取反,!真,假,!假,真, float b=3.5;,!a

4、,0,!b,0,a b=1; c=2; d=a+,d=(a+),運(yùn)算結(jié)果: d=0,a=1,b=1,c=2,(1)a 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.0x2,2.x大于5且不能夠被7整除,3.y在1到9之間但不能是5,4.ch不是字符q或者k,x0”,則以下選項(xiàng)中值為 0的表達(dá)式是(05.09) a.(!a=1) a=d/10%9; b=a 程序運(yùn)行后的輸出結(jié)果是:2,1,4.已定義“char ch=$;int i=1,j;”,執(zhí)行“j=!c

5、h 6.在C語(yǔ)言中,邏輯“真”等價(jià)于下面哪一項(xiàng) a.整數(shù)1 b.True c.非0數(shù) d.任意常數(shù),1,10 20 0,C,7.有以下程序: main() int a=1,b=2,m=0,n=0,k; k=(n=ba)|(m=ab); printf(“%d,%dn”,k,m); 程序運(yùn)行后的輸出結(jié)果是 a.0,0 b.0,1 c.1,0 d.1,1,C,問(wèn)題提出:,計(jì)算分段函數(shù):,y=,3-x x0,2/x x0,C語(yǔ)言用來(lái)設(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ǔ)

6、句、多分支選擇if語(yǔ)句。,語(yǔ)句形式:,if (表達(dá)式) 語(yǔ)句,語(yǔ)句執(zhí)行流程:,4.2.1 if語(yǔ)句的三種形式,例4-1:從鍵盤(pán)輸入兩個(gè)整數(shù)a和b,如果a大于b則交換兩數(shù),最后輸出兩個(gè)數(shù)。,#include ,輸入a,b,ab,交換a、b,輸出,結(jié)束,真,假,void main() int a,b,t; scanf(%d,%d,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á)式形式很靈活,可以是常量、變量、

7、任何類型表達(dá)式、函數(shù)、指針等。只要表達(dá)式的值為非零值,條件就為真,反之條件為假。,2、雙分支選擇if語(yǔ)句,語(yǔ)句形式:,if (表達(dá)式) 語(yǔ)句1 else 語(yǔ)句2,語(yǔ)句執(zhí)行流程:,表達(dá)式,語(yǔ)句1,真(非0),假(0),語(yǔ)句2,例4-2 輸入兩個(gè)整數(shù),輸出其中較大的數(shù)。,#include #include ,void main() int x,y,max; scanf(%d,%d,if(xy) max=x; else max=y;,printf(max=%dn,max); ,輸入x,y,xy,max=x,輸出最大值,結(jié)束,真,假,max=y,注意,if和else語(yǔ)句之間只能有一個(gè)語(yǔ)句,當(dāng)ifels

8、e之間的語(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ǔ)句1 else if (表達(dá)式2) 語(yǔ)句2 else if (表達(dá)式n) 語(yǔ)句n else 語(yǔ)句n+1,else子句可以省略,語(yǔ)句執(zhí)行流程:,表達(dá)式1,語(yǔ)句1,真(非0),假(0),例4-3:計(jì)算分段函數(shù)。,#include ,void main() float x,y; printf(enter x:);scanf( %f ,if (x10) y=3/(x-10); else

9、 printf(“not definen”);,printf(x=%.2f,y=%.2fn,x,y); ,計(jì)算分段函數(shù)程序,語(yǔ)句含義:,語(yǔ)句形式:,當(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ǔ)句2,if ( 表達(dá)式1) if ( 表達(dá)式2) 語(yǔ)句1 else 語(yǔ)句2,if ( 表達(dá)式1) if ( 表達(dá)式2) 語(yǔ)句1 else 語(yǔ)句2 else 語(yǔ)句3,if ( 表達(dá)式1) if ( 表達(dá)式2) 語(yǔ)句1 else 語(yǔ)句2 els

10、e if(表達(dá)式3) 語(yǔ)句3 else 語(yǔ)句4,語(yǔ)句執(zhí)行流程:,else與if的配對(duì)原則:,就近一致原則:,else與同一層最接近它,而又沒(méi)有其它else語(yǔ)句與之相匹配的if語(yǔ)句配對(duì)。,建議:對(duì)于嵌套的if語(yǔ)句最好使用“”擴(kuò)起來(lái) 同時(shí)采用代碼縮進(jìn)的形式書(shū)寫(xiě),國(guó)家級(jí)等級(jí)考試練習(xí):,1.設(shè)變量x和y均已正確定義并賦值,以下的if語(yǔ)句中, 在編譯時(shí)將產(chǎn)生錯(cuò)誤信息的是 a.if(x+); b.if(xy,2.在嵌套使用if語(yǔ)句時(shí),C語(yǔ)言規(guī)定else總是 a.和之前與具有相同縮進(jìn)位置的if配對(duì) b.和之前與其最近的if配對(duì) c.和之前與其最近的且不帶else的if配對(duì) d.和之前的第一個(gè)if配對(duì),C,C

11、,3.有以下程序程序: 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ò),D,5.有以下程序運(yùn)行后的輸出結(jié)果是 main() int a=3,b=4,c=5,t=99; if(ba ,4599,6.有以下程序 main() int a=3,b=4,c=5,d=2; if(ab) if(bc) printf(“%d”,d+ + 1); else printf(“%d”,+d + 1)

12、; printf(“%dn”,d); 程序運(yùn)行后的結(jié)果是 a.2 b.3 c.43 d.44,A,4.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?a:b,-a=b+ ? a+ : b+,y = x10 ? x/10 : x0 ? x: -x;,1.有以下計(jì)算公式,y=,(x=0),(x0),若程序前面已在命令行中包括math

13、.h文件,不能夠正確計(jì)算上述公式的程序是 a.if(x=0) y=sqrt(x); b.y=sqrt(x); else y=sqrt(-x); if(x=0) y=sqrt(x); d.y=sqrt(x=0?x:-x); if(x0) y=sqrt(-x);,國(guó)家等級(jí)考試練習(xí),B,2.若有定義“int x,y;”,并已正確給變量賦值,則以下選 項(xiàng)與表達(dá)式“(x-y)?(x+):(y+)”中的條表達(dá)式(x-y)等 價(jià)的是 a.(x-y0) b.(x-y0) d.x-y=0,C,3.設(shè)有條件表達(dá)式“(EXP)?i+:j+”,則以下表達(dá)式中與 “(EXP)”完全等價(jià)的是_ a.(EXP=0) b.(

14、EXP!=0) c.(EXP=1) d.(EXP!=1),B,4.有以下程序段: int k=0,a=1,b=2,c=3; k=ac?c:k; 執(zhí)行該程序后,k的值是 a.3 b.2 c.1 d.0,B,5.若整型變量a,b,c,d中的值依次為1,4,3,2,則條件表 達(dá)式ab?a:cd?c:d的值是 a.1 b.2 c.3 d.4,A,6.以下程序的輸出結(jié)果是 main() int a=5,b=4,c=6,d; printf(“%dn”,d=ab?(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ì)算

15、各表達(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; 5 5 5 10,4.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; ,根

16、據(jù)表達(dá)式的不同值,選擇不同的程序分支,又稱開(kāi)關(guān)語(yǔ)句。,數(shù)值型 或 字符型,常量表達(dá)式的值必須互不相同,否則執(zhí)行時(shí)將出現(xiàn)矛盾,即同一個(gè)開(kāi)關(guān)值,將對(duì)應(yīng)多種執(zhí)行方案。,2、語(yǔ)句執(zhí)行流程:,指語(yǔ)句的最后一條是否為break,簡(jiǎn)單語(yǔ)句或復(fù)合語(yǔ)句,case語(yǔ)句出 現(xiàn)的次序并 不影響執(zhí)行 結(jié)果。,例4-4:假設(shè)用0、1、2.6分別表示星期日、星期一.星期六?,F(xiàn)輸入一個(gè)數(shù)字,輸出對(duì)應(yīng)的星期幾的英文單詞。如果輸入3,輸出“Wednesday”。,#include stdio.h void main() int n; scanf(%d, ,程序運(yùn)行情況如下: 3 Wednesday Thursday Friday

17、 Saturday error,在“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.h void main() int n; scanf(%d, ,程序運(yùn)行情況如下: 3 Wednesday,3、說(shuō)明,多個(gè)case語(yǔ)句可以共用一組執(zhí)行語(yǔ)句。,switch(grade) case 10: case 9: c

18、ase 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)提成。從鍵盤(pán)輸入當(dāng)月利潤(rùn),求應(yīng)發(fā)放獎(jiǎng)金總數(shù)?,利潤(rùn)x x=10 10x20 20x40 40x60 60x100 100x,(int )x/10,常量 0,1 1,2 2,3,4 4,5,6 6,7,8,9,10 10以上,用這種

19、方法轉(zhuǎn)換后,n出現(xiàn)了在不同區(qū)域有重復(fù)數(shù)字的情況。解決的方法有很多,其中一種是可以采用當(dāng)x為10的整數(shù)倍時(shí),將計(jì)算出的n值減1。,使用switch解題的關(guān)鍵,通過(guò)分析找到表達(dá)式,將問(wèn)題分成幾種情況。,#include stdio.h void main() double x,y; int n; scanf(%lf, ,程序如下:,#include stdio.h void main() float x,y; int a; scanf(%f, ,國(guó)家等級(jí)考試練習(xí),1.以下敘述中正確的是 a.break語(yǔ)句只能用于switch語(yǔ)句 b.在switch語(yǔ)句中必須使用default c.break語(yǔ)句必

20、須與switch語(yǔ)句中的case配對(duì) d.在switch語(yǔ)句中,不一定使用break語(yǔ)句,D,2.若有定義:“float x=1.5;int a=1,b=3,c=2;”則正確 的switch語(yǔ)句是 a.switch(x) c.switch(a+b) case 1.0:printf(“*n”); case 1:printf(“*n”); case 2.0:printf(“*n”); case 2+1:printf(“*n”); b.switch(int)x); d.switch(a+b) case 1:printf(“*n”); case 1:printf(“*n”); case 2:printf(“*n”); case c:printf(“*n”);,C,3.有以下程序的運(yùn)行結(jié)果是 main() int a=2,b=7,c=5; switch(a0) case 1:switch(b0) case 1:printf(“”);break; case 2:printf(“!”);break; case 0:switch(c=5) case 0:printf(“*”);break; case 1:printf(“#”);break; case 2:printf(“$”);break;

溫馨提示

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