C語(yǔ)言第5章選擇結(jié)構(gòu)設(shè)計(jì)_第1頁(yè)
C語(yǔ)言第5章選擇結(jié)構(gòu)設(shè)計(jì)_第2頁(yè)
C語(yǔ)言第5章選擇結(jié)構(gòu)設(shè)計(jì)_第3頁(yè)
C語(yǔ)言第5章選擇結(jié)構(gòu)設(shè)計(jì)_第4頁(yè)
C語(yǔ)言第5章選擇結(jié)構(gòu)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩46頁(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)程序設(shè)計(jì)

關(guān)系運(yùn)算符和關(guān)系表達(dá)式邏輯運(yùn)算符和邏輯表達(dá)式

If語(yǔ)句條件運(yùn)算符

switch語(yǔ)句本章內(nèi)容2

1.關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算比較運(yùn)算例:a>3是一比較運(yùn)算,

當(dāng)a=5,a>3成立,結(jié)果稱為“真”;否則,

當(dāng)

a=1,a>3不成立,結(jié)果稱為“假”。關(guān)系運(yùn)算符種類

<<=>>===!=關(guān)系運(yùn)算符優(yōu)先次序<,<=,>,>=為同一優(yōu)先級(jí),==,!=為同一優(yōu)先級(jí),但前者高于后者。關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。3

1.關(guān)系運(yùn)算符和關(guān)系表達(dá)式4

算術(shù)運(yùn)算符賦值運(yùn)算符關(guān)系運(yùn)算符高低[例]c>a+bc>(a+b)a>b!=c(a>b)!=ca==b<ca==(b<c)a=b>ca=(b>c)1.關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式(算術(shù)、關(guān)系、邏輯、賦值、字符等表達(dá)式)連接起來(lái)的式子。例如:a>b,a+b>b+c,(a=3)>(b=5),'a'>'b',(a>b)>(b<c)關(guān)系表達(dá)式的結(jié)果值規(guī)定為1或01––結(jié)果為真(成立)0––結(jié)果為假(不成立)5

1.關(guān)系運(yùn)算符和關(guān)系表達(dá)式

(a>b)==cb+c<ad=a>bf=a>b>c6

成立1

不成立0

則a>b值為1,所以d=1.a>b為1,a>b>c為0,所以f=0.【例1】當(dāng)a=3,b=2,c=1時(shí)判斷下面表達(dá)式的值2.邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符種類&&(與)||(或)!(非)邏輯運(yùn)算符意義見(jiàn)真值表邏輯運(yùn)算符優(yōu)先次序!(非)優(yōu)先于&&(與),&&優(yōu)先于||。即:!&&||&&和||低于所有關(guān)系運(yùn)算,!高于所有算術(shù)運(yùn)算符7

ab!aa&&ba||b

00100

0非0101

非00001非0非00112.邏輯運(yùn)算符和邏輯表達(dá)式邏輯表達(dá)式用邏輯運(yùn)算符將關(guān)系表達(dá)式、邏輯表達(dá)式連接起來(lái)的式子–––邏輯表達(dá)式。邏輯表達(dá)式的結(jié)果值規(guī)定為1或0.

1––結(jié)果為真(成立)0––結(jié)果為假(不成立)例:a=4則!a值為0.此處只要a0,為真.則!a值為0.a=4,b=5a&&b為1a=4,b=5a||b為1

a=4,b=5!a||b為1

4&&0||2為1.在邏輯運(yùn)算中,非0值參加邏輯運(yùn)算時(shí)被看成1處理8

2.邏輯運(yùn)算符和邏輯表達(dá)式一個(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均不必判別。[例]:!a&&b||x>y&&c

((!a)&&b)||((x>y)&&c)9

3.If語(yǔ)句If語(yǔ)句的3種形式形式1:語(yǔ)句格式

:

if(表達(dá)式)語(yǔ)句A;

例:if(x>y)printf("%d",x);功能:當(dāng)表達(dá)式值非0時(shí),執(zhí)行語(yǔ)句A,否則不執(zhí)行語(yǔ)句A.其流程圖:10

表達(dá)式語(yǔ)句A=003.If語(yǔ)句【例2】計(jì)算一個(gè)整數(shù)的絕對(duì)值11

abs=-aabs=a輸出abs輸入整數(shù)aa<0NY開始結(jié)束main(){

inta,abs;printf("enteronenumber:");scanf("%d",&a);abs=a;if(a<0)abs=-a;printf("|%d|=%d\n",a,abs);}運(yùn)行結(jié)果:enteronenumber:-9|-9|=93.If語(yǔ)句【例3】判斷一個(gè)整數(shù)是否為正數(shù)(學(xué)生練習(xí))12

main(){inta;printf("enteronenumber:");scanf("%d",&a);if(a>0)printf("%displusnumber!\n",a);}運(yùn)行結(jié)果:enteronenumber:2626isplusnumber!輸出a是正數(shù)輸入整數(shù)aa>0NY開始結(jié)束3.If語(yǔ)句形式2:語(yǔ)句格式

:

if(表達(dá)式)語(yǔ)句A;

else語(yǔ)句B;例:if(x>y)printf("%d",x);elseprintf("%d",y);功能:當(dāng)表達(dá)式值非0時(shí),執(zhí)行語(yǔ)句A,否則執(zhí)行語(yǔ)句B.其流程圖:13

表達(dá)式語(yǔ)句A=00語(yǔ)句B3.If語(yǔ)句【例4】例2計(jì)算一個(gè)整數(shù)的絕對(duì)值可改寫為:14

main(){inta,abs;printf("enteronenumber:");scanf("%d",&a);if(a<0)abs=-a;elseabs=a;printf("|%d|=%d\n",a,abs);}abs=aabs=-a輸出abs輸入整數(shù)aa<0NY開始結(jié)束3.If語(yǔ)句【例5】求分段函數(shù)值:15

main(){

floatx,y;

printf("inputx:");

scanf("%f",&x);

if(x>1)

y=x;

else

y=0;

printf("x=%5.2f,y=%5.2f\n",x,y);}y=0y=x輸出x,y輸入xx>1NY開始結(jié)束3.If語(yǔ)句形式3:語(yǔ)句格式

:

if(表達(dá)式1)語(yǔ)句1;

elseif(表達(dá)式2)語(yǔ)句2;

elseif(表達(dá)式3)語(yǔ)句3;

…….elseif(表達(dá)式n)語(yǔ)句n;else語(yǔ)句n+1;

對(duì)于一個(gè)問(wèn)題可能需要從多方面進(jìn)行判斷,有多種可能的情況進(jìn)行處理16

3.If語(yǔ)句其流程圖:17

e1語(yǔ)句1e2語(yǔ)句2en語(yǔ)句n語(yǔ)句n+1…

YNYYNN3.If語(yǔ)句【例6】求分段函數(shù)值:18

x<1?y=x2+2x+1

x<=10?y=xy=x3-3x-1ynny3.If語(yǔ)句程序代碼:19

#include"stdio.h"main(){

floatx,y;

printf("enterx:");

scanf("%f",&x);

if(x<1.0)

y=x*x+2*x+1;

elseif(x<=10.0)

y=x;

else

y=x*x*x-3*x-1;

printf("x=%5.2f,y=%5.2f\n",x,y);}3.If語(yǔ)句【例7】設(shè)計(jì)獎(jiǎng)學(xué)金評(píng)定程序(學(xué)生練習(xí))用戶輸入學(xué)生綜合測(cè)評(píng)總分,程序輸出對(duì)應(yīng)的等級(jí)和獎(jiǎng)學(xué)金。 總分>300 一等獎(jiǎng)學(xué)金5000元 總分>=200 二等獎(jiǎng)學(xué)金3000元 總分>=100 三等獎(jiǎng)學(xué)金1000元 總分<100 無(wú) 0元20

3.If語(yǔ)句【例8】輸入兩個(gè)實(shí)數(shù),按代數(shù)值由小到大次序輸出這兩個(gè)數(shù)。21

main(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f",a,b);}a,b值互換輸出a,b輸入實(shí)數(shù)a,ba>bNY開始結(jié)束運(yùn)行結(jié)果是:3.6,–3.2–3.20,3.603.If語(yǔ)句【例9】輸入三個(gè)數(shù),按小大順序輸出。22

main(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f",a,b,c);}運(yùn)行結(jié)果是:

3,7,11.00,3.00,7.003.If語(yǔ)句If語(yǔ)句嵌套

if語(yǔ)句體中又包含一個(gè)或多個(gè)if語(yǔ)句,稱為if語(yǔ)句的嵌套嵌套形式:23

if(e1)if(e2)s1;elses2;elses3;if(e1){if(e2)s1;}elses2;if(e1)s1;elseif(e2)s2;elses3;3.If語(yǔ)句24

if與

else的配對(duì)的原則從最內(nèi)層開始,else總是與它前面最近的同一復(fù)合語(yǔ)句內(nèi)的不帶else的if結(jié)合如果if和

else的數(shù)目不統(tǒng)一,可以加{}明確配對(duì)關(guān)系

if()if()語(yǔ)句1elseif()語(yǔ)句2else語(yǔ)句3必要時(shí)加{}.if(){if()語(yǔ)句1}

else3.If語(yǔ)句25

[例]:

if(x)

if(y)

printf(“y\n”);elseif(z)printf(“z\n”);elseprintf(“x\n”);

if(x)

{if(y){printf(“y\n”);}}else{if(z){printf(“z\n”);}else{printf(“x\n”);}}如果要實(shí)現(xiàn)例中書寫形式的意圖,可寫成如下形式:3.If語(yǔ)句26

【例10】閱讀程序回答問(wèn)題

#include<stdio.h>main(){inta,b,m,n;scanf(“%d%d”,&a,&b);m=n=1;if(a>0)m=m+n;if(a<b)n=2*m;elseif(a==b)n=5;elsen=m+n;printf(“m=%dn=%d\n”,m,n);}1)當(dāng)輸入為-1–2<回車>,程序的

運(yùn)行結(jié)果為多少?m=1n=22)當(dāng)輸入為10<回車>,程序的

運(yùn)行結(jié)果為多少?m=2n=33)為了輸出n=4,變量a和b應(yīng)具

備的條件是什么?0<a<b3.If語(yǔ)句27

【例11】從鍵盤上輸入每個(gè)學(xué)生三門課程的成績(jī),計(jì)算其平均值

當(dāng)平均成績(jī)高于90分時(shí),輸出A;平均分在80-89之間,輸出B;平均分在70-79之間,輸出C;平均分在60-69之間,輸出D;平均成績(jī)不及格(小于60分)時(shí)輸出E3.If語(yǔ)句28

程序代碼

main(){intinp1,inp2,inp3,sum,ave;printf(“Enterstudentsscoresinthreetests:\n”);scanf(“%d%d%d”,&inp1,&inp2,&inp3);/*計(jì)算平均值*/sum=inp1+inp2+inp3;ave=sum/3;printf(“\nThestdentaveragein3testsis%3d”,ave);/*將成績(jī)分類*/printf(“\nThestudentgradeis:”);3.If語(yǔ)句29

使用簡(jiǎn)單if語(yǔ)句使用if…elseif語(yǔ)句

if(ave>=90)printf(“A”);if(ave>=80&&ave<=89)printf(“B”);if(ave>=70&&ave<=79)printf(“C”);if(ave>=60&&ave<=69)printf(“D”);if(ave<60)printf(“E”);}

if(ave>=90)printf(“A”);elseif(ave>=80)printf(“B”);elseif(ave>=70)printf(“C”);elseif(ave>=60)printf(“D”);elseprintf(“E”);}3.If語(yǔ)句30

習(xí)題P111(5.45.55.6)學(xué)生練習(xí)4.條件運(yùn)算符和條件表達(dá)式判斷條件不論是“真”是“假”,均給同一變量賦值時(shí),簡(jiǎn)化語(yǔ)句書寫條件運(yùn)算符為

?

:

三目運(yùn)算符

形式:

表達(dá)式1

?

表達(dá)式2

:表達(dá)式3功能:

先判表達(dá)式1,若非0,則條件表達(dá)式值為表達(dá)式2的值,否則為表達(dá)式3的值。例:max=a>b?a:b;

當(dāng)a>b.maxa.否則maxb

31

4.條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符優(yōu)先次序條件運(yùn)算符優(yōu)先于賦值運(yùn)算符條件運(yùn)算符低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符條件運(yùn)算符結(jié)合性為從右至左注意條件表達(dá)式不能取代一般的if語(yǔ)句,只有當(dāng)if的兩個(gè)分支為給同一變量賦值時(shí)才可替代if表達(dá)式1、表達(dá)式2、表達(dá)式3可類型不同32

4.條件運(yùn)算符和條件表達(dá)式【例12】輸入一個(gè)字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。

33

main(){charch;scanf("%c",&ch);ch=(ch>='A'&&ch<='Z')?(ch+32):ch;printf("%c",ch);}轉(zhuǎn)換ch+32輸出ch輸入字符chch>='A'&&ch<='Z'NY開始結(jié)束運(yùn)行結(jié)果是:Aa5.switch語(yǔ)句語(yǔ)句格式功能根據(jù)表達(dá)式e的取值,判斷其與哪一個(gè)常量表達(dá)式相等。如等于表達(dá)式ai

,則執(zhí)行語(yǔ)句序列Si,遇break語(yǔ)句則跳出switch語(yǔ)句;否則依次向下執(zhí)行。若與所有常量表達(dá)式值不相等,則從default后的語(yǔ)句開始執(zhí)行。

34

switch(表達(dá)式e){

case常量表達(dá)式a1:語(yǔ)句序列S1;

break;

case常量表達(dá)式a2:語(yǔ)句序列S2;

break;

case常量表達(dá)式an:語(yǔ)句序列Sn;

break;

default:語(yǔ)句S;

}35

5.switch語(yǔ)句switch語(yǔ)句

執(zhí)行示意圖表達(dá)式e?

語(yǔ)句序列S1;

break;

語(yǔ)句序列S2;

break;

語(yǔ)句序列S3;

break;語(yǔ)句序列S;…

a1defaulta3a2case5.switch語(yǔ)句36

例:根據(jù)成績(jī)等級(jí)打印百分?jǐn)?shù)段.switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break;default:printf("error\n");break;}5.switch語(yǔ)句注意:常量表達(dá)式的類型必須是整型、字符型或枚舉型,且必須互不相等,否則二義性。case順序無(wú)關(guān)緊要。不一定非用break不可,有時(shí)幾種情況合并執(zhí)行一組語(yǔ)句。37

例:switch(grade){case'A':case'B':case'C':printf(">60\n");break;case'D':printf("<60\n");break;}5.switch語(yǔ)句【例13】輸入月份,輸出2007年該月有多少天?38

day=31輸出day輸入月份month=1,3,5,7,8,10,12開始結(jié)束=4,6,9,11=2day=30day=28day=-1yyynnn39

5.switch語(yǔ)句#include<stdio.h>main(){intmonth;intday;printf("pleaseinputthemonth:");scanf("%d",&month);switch(month){ case1: case3: case5: case7: case8: case10: case12:day=31;break; case4: case6: case9: case11:day=30;break; case2:day=28;break; default:day=-1;}if(day==-1)

printf(“invalidmonthinput!\n”);elseprintf(“2007.%dhas%ddays\n”,month,day);}5.switch語(yǔ)句什么時(shí)候用一條switch語(yǔ)句比用多條if語(yǔ)句更好?

switch語(yǔ)句與if語(yǔ)句不同

switch語(yǔ)句只能對(duì)等式進(jìn)行測(cè)試

if語(yǔ)句可以計(jì)算關(guān)系表達(dá)式或邏輯表達(dá)式等如果有兩條以上基于同一個(gè)整型變量的條件表達(dá)式,那么最好使用switch語(yǔ)句40

if(x==1)

printf(”xisequaltoone.\n”);elseif(x==2)

printf(”xisequaltotwo.\n”);elseif(x==3)

printf(”xisequaltothree.\n”);elseprintf(”xisnotequaltoone,two,three.\n”);5.switch語(yǔ)句41

不如使用如下switch代碼,它更易于閱讀和維護(hù):

switch(x)

{case1:printf(”xisequaltoone.\n”);break;

case2:printf(”xisequaltotwo.\n”);break;

case3:printf(”xisequaltothree.\n”);break;

default:printf(”xisnotequaltoone,two,three.\n”);}5.switch語(yǔ)句

switch嵌套語(yǔ)句在switch語(yǔ)句中,每個(gè)case后面可以出現(xiàn)另一個(gè)switch語(yǔ)句,從而形成嵌套switch語(yǔ)句42

閱讀下面程序:計(jì)算結(jié)果#include<stdio.h>main(){inta=2,b=7,c=5;

switch(a>0)

{case1:switch(b<0){case1:printf(“@”);break;

case2:printf(“!”);break;}

case2:switch(c==5){case0:printf(“*”);break;case1:printf(“#”);break;default:printf(“$”);break;

default:printf(“&”);

printf(“\n”);}運(yùn)行結(jié)果是:#&5.switch語(yǔ)句【例14】編寫一個(gè)程序,完成兩個(gè)數(shù)的四則運(yùn)算(數(shù)與運(yùn)算符由鍵盤給入)

分析調(diào)用輸入函數(shù)輸入操作數(shù)和運(yùn)算符四則運(yùn)算規(guī)則43

5.switch語(yǔ)句44

#include<stdio.h>main(){floatx,y;charop;printf("\ntypeinyourexpression:");scanf("%f%c%f",&x,&op,&y);switch(op){case'+':printf("%6.2f%c%6.2f=%6.2f\n",x,op,y,x+y);break;case'-':printf("%6.2f%c%6.2f=%6.2f\n",x,op,y,x-y);break;case'*':printf("%6.2f%c%6.2f=%6.2f\n",x,op,y,x*y);break;case'/':if(y==0)printf("error!\n");elseprintf("%6.2f%c%6.2f=%6.2f\n",x,op,y,x/y);break;default:printf("espressionerror!\n");}}45

小測(cè)試

1:下述程序段中,無(wú)語(yǔ)法錯(cuò)誤的是()A)inta=2,b=0;

switch(a)

{caseb+1:a--;break;

caseb=5:

a+=10;break;

}B)charx=‘A’,y=1;

switch(x)

{case‘A’:y++;break;

case-1:

y=5;

}C)inta,b=5;

switch(b)

{caseb>0:a=1;break;

caseb==0:

a=0;break;

}D)#defineM10inta=1,b=0;

switch(a)

{caseM:b+=5;break;

case10:

b=1;break;

}√46

小測(cè)試2.以下程序的運(yùn)行結(jié)果是:

main()

{intx1=3,x2=0,x3=0;

if(x1=x2+x3)printf("****");elseprintf("####");

}A.輸出:****

B.輸出:####C.存在語(yǔ)法錯(cuò)誤D.無(wú)輸出結(jié)果3.下面程序段所表示的數(shù)學(xué)

函數(shù)關(guān)系是:

x=-1;if(a!=0)if(a>0)x=1;elsex=0;

-1(a<0)

1(a<0)A.x=0(a=0)B.x=-1(a=0)1(a>0)0(a>0)0(a<0)-1(a<0)C.x=-1(a=0)

D.x=1(a=0)1(a>0)0(a>0

溫馨提示

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