版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 家具購(gòu)銷合同樣本
- 河南省南陽(yáng)一中2025屆高三生物第一學(xué)期期末檢測(cè)模擬試題含解析
- 2024年信用借款合同標(biāo)準(zhǔn)版本(二篇)
- 2024年個(gè)人勞務(wù)承包合同范文(二篇)
- 2024年二房東租賃合同標(biāo)準(zhǔn)樣本(二篇)
- 2024年工程材料購(gòu)買合同
- 汽車買賣合同
- 2024年河源市勞動(dòng)合同范本
- 校園食堂建設(shè)與維護(hù)合同
- 校園學(xué)生貸款服務(wù)合同
- 白灰租賃合同
- 2024年江蘇太倉(cāng)市城市建設(shè)投資集團(tuán)公司招聘筆試參考題庫(kù)含答案解析
- 村委會(huì)公益性崗位規(guī)章制度
- 供應(yīng)鏈金融服務(wù)分包合同
- 冀教版二年級(jí)下冊(cè)三位數(shù)加減法豎式計(jì)算練習(xí)300題及答案
- 康師傅的營(yíng)銷案例分析
- 新生兒感染性肺炎和敗血癥護(hù)理課件
- 芯片不良分析報(bào)告
- 高中歷史2019選擇性必修1課件第8課中國(guó)古代的法治與教化
- 業(yè)主業(yè)主委員會(huì)通用課件
- 2024年度全國(guó)社會(huì)工作者(初)《社會(huì)工作實(shí)務(wù)(初級(jí))》考試典型題題庫(kù)(含答案)
評(píng)論
0/150
提交評(píng)論