版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章選擇結(jié)構(gòu)程序設(shè)計(jì)4.1選擇結(jié)構(gòu)和條件判斷4.2用if語(yǔ)句實(shí)現(xiàn)選擇結(jié)構(gòu)4.3關(guān)系運(yùn)算符和關(guān)系表達(dá)式4.4邏輯運(yùn)算符和邏輯表達(dá)式4.5條件運(yùn)算符和條件表達(dá)式4.6選擇結(jié)構(gòu)的嵌套4.7用switch語(yǔ)句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)4.8選擇結(jié)構(gòu)程序綜合舉例掌握關(guān)系表達(dá)式和邏輯表達(dá)式的組成及運(yùn)算理解選擇結(jié)構(gòu)(分支結(jié)構(gòu))程序設(shè)計(jì)的概念掌握if語(yǔ)句、switch語(yǔ)句的基本結(jié)構(gòu)及執(zhí)行過程學(xué)會(huì)簡(jiǎn)單的選擇結(jié)構(gòu)程序設(shè)計(jì)2.4.3三種基本結(jié)構(gòu)ABABYpNANp2YB順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)2.4.3三種基本結(jié)構(gòu)根據(jù)表達(dá)式p的值進(jìn)行選擇ABp=p1p=p2…MNp=pmp=pn2.4.4用N-S流程圖表示算法N-S流程圖用以下的流程圖符號(hào):ABABYNpA當(dāng)p1成立A直到p2成立順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)(當(dāng)型)循環(huán)結(jié)構(gòu)(直到型)引例:1/x當(dāng)x≠0時(shí)10000當(dāng)x=0時(shí)y=
選擇結(jié)構(gòu)要考慮兩個(gè)方面的問題:1、C語(yǔ)言中如何表示條件?一般用關(guān)系表達(dá)式或邏輯表達(dá)式2、C語(yǔ)言中實(shí)現(xiàn)選擇結(jié)構(gòu)用什么語(yǔ)句?用if語(yǔ)句或switch語(yǔ)句。if(x!=0)y=1/x;elsey=10000;此處:用if語(yǔ)句來表示選擇結(jié)構(gòu)用一個(gè)關(guān)系表達(dá)式x!=0來表示條件4.1選擇結(jié)構(gòu)和條件判斷例4.1在例3.5的基礎(chǔ)上對(duì)程序進(jìn)行改進(jìn)。題目要求是求
方程的根。
由鍵盤輸入a,b,c。假設(shè)a,b,c的值任意,并不保證
。需要在程序中進(jìn)行判別,如果
,就計(jì)算并輸出方程的兩個(gè)實(shí)根,否則就輸出“方程無(wú)實(shí)根”的信息。
解題思路:輸入a,b,c計(jì)算discdisc<0計(jì)算x1,x2輸出無(wú)實(shí)根輸出x1,x2真假#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;計(jì)算b2-4ac,disc的值變?yōu)?15
if(disc<0)
printf(“hasnotrealroots\n”);
else
{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}-15<0為真#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;計(jì)算b2-4ac,disc的值變?yōu)?
if(disc<0)printf(“hasnotrealroots\n”);
else
{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}8<0為假p的值變?yōu)?1q的值變?yōu)?.71x1的值變?yōu)?0.29x2的值變?yōu)?1.71
if(disc<0)printf(“hasnotrealroots\n”);
else
{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}選擇結(jié)構(gòu),用if語(yǔ)句實(shí)現(xiàn)的
if(disc<0)printf(“hasnotrealroots\n”);
else
{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}復(fù)合語(yǔ)句4.2用if語(yǔ)句實(shí)現(xiàn)選擇結(jié)構(gòu)4.2.1用if語(yǔ)句處理選擇結(jié)構(gòu)舉例4.2.2if語(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.1if語(yǔ)句的三種形式例:從鍵盤輸入兩個(gè)整數(shù)a和b,如果a大于b則交換兩數(shù),最后輸出兩個(gè)數(shù)。#include<stdio.h>輸入a,ba>b交換a、b輸出結(jié)束真假
voidmain(){inta,b,t;scanf("%d,%d",&a,&b);
if(a>b){t=a;a=b;b=t;}
printf("a=%d,b=%d\n",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例輸入兩個(gè)整數(shù),輸出其中較大的數(shù)。#include<stdio.h>#include<math.h>
voidmain(){intx,y,max;scanf("%d,%d",&x,&y);
if(x>y)max=x;elsemax=y;printf("max=%d\n",max);}輸入x,yx>ymax=x輸出最大值結(jié)束真假max=y注意if和else語(yǔ)句之間只能有一個(gè)語(yǔ)句,當(dāng)if~else之間的語(yǔ)句不只一句時(shí),應(yīng)用一對(duì){}將語(yǔ)句括起。if(a>b)
{a++;b++;}else
{a=0;b=10;}
if(a>b)a++;b++;elsea=0;b=10;3、多分支選擇if語(yǔ)句語(yǔ)句形式:if(表達(dá)式1)語(yǔ)句1else
if(表達(dá)式2)語(yǔ)句2……else
if(表達(dá)式n)語(yǔ)句nelse
語(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)例:計(jì)算分段函數(shù)。假輸入xX<=1真X<10y=3/(x-10)y=2xy=x+5假真#include<stdio.h>
voidmain(){floatx,y;printf("enterx:");scanf("%f",&x);if(x<=1)y=x+5;elseif(x<10) y=2*x; elseif(x>10) y=3/(x-10);elseprintf(“notdefine\n”);
printf("x=%.2f,y=%.2f\n",x,y);
}計(jì)算分段函數(shù)程序語(yǔ)句含義:語(yǔ)句形式:
當(dāng)if語(yǔ)句中又包含若干個(gè)if語(yǔ)句時(shí),則構(gòu)成了if語(yǔ)句嵌套的情形。if語(yǔ)句的嵌套if(表達(dá)式1)
if(表達(dá)式2)語(yǔ)句1if(表達(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ǔ)句2elseif(表達(dá)式3)語(yǔ)句3else
語(yǔ)句4
語(yǔ)句執(zhí)行流程:
else與if的配對(duì)原則:
就近一致原則:
else與同一層最接近它,而又沒有其它else語(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)的形式書寫例:讀程序。main(){inta=2,b=1,c=2;if(a)if(b<0)c=0;elsec++;printf("%d\n",c);}main(){inta=2,b=1,c=2;if(a){if(b<0)c=0;}elsec++;printf("%d\n",c);}程序運(yùn)行結(jié)果:3程序運(yùn)行結(jié)果:2程序2:將程序1的if語(yǔ)句改為:
main()
{intx,y;
scanf("%d",&x);
if(x>=0)
if(x>0)
y=1;
else
y=0;
else
y=-1;
printf("x=%d,y=%d\n",x,y);
}程序1:
main()
{intx,y;
scanf("%d",&x);
if(x<0)
y=–1;
elseif(x==0)
y=0;
else
y=1;
printf("x=%d,y=%d\n",x,y);
}2、if語(yǔ)句的嵌套程序4:將程序1的if語(yǔ)句改為main(){intx,y;scanf("%d",&x);
y=0;if(x>=0)if(x>0)y=1;elsey=-1;printf("x=%d,y=%d\n",x,y);}
程序3:將程序1的if語(yǔ)句改為main(){intx,y;scanf("%d",&x);
y=-1;if(x!=0)if(x>0)y=1;elsey=0;printf("x=%d,y=%d\n",x,y);}2、if語(yǔ)句的嵌套y=
0(x<0)–1(x=0)1(x>0)1.
程序1和程序2是正確的。
它們代表的函數(shù)為:2.
程序3和程序4是錯(cuò)誤的。
它們代表的函數(shù)為:y=
0(x<0)–1(x=0)1(x>0)y=–1(x<0)0(x=0)1(x>0)結(jié)論:If嵌套語(yǔ)句練習(xí):1.設(shè)變量x和y均已正確定義并賦值,以下的if語(yǔ)句中,在編譯時(shí)將產(chǎn)生錯(cuò)誤信息的是——a.if(x++);b.if(x>y&&y!=0);c.if(x>y)x--d.if(y<0){;}elsey++;elsex++;2.在嵌套使用if語(yǔ)句時(shí),C語(yǔ)言規(guī)定else總是———a.和之前與具有相同縮進(jìn)位置的if配對(duì)b.和之前與其最近的if配對(duì)c.和之前與其最近的且不帶else的if配對(duì)d.和之前的第一個(gè)if配對(duì)CC3.有以下程序程序:main(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf(“%d,%d,%d,%d\n”,a,b,c,d);}程序輸出的結(jié)果是——A.0,1,2,0B.0,0,0,3C.1,1,2,0D.編譯有錯(cuò)D4.設(shè)有變量a、b、c、d和y都已正確并賦值,若有以下if語(yǔ)句:if(a<b) if(c==d) y=0; else y=1;該語(yǔ)句所表示的含義是——a.y=0a<b且c=d1a>=bb.y=0a<b且c=d1a>=b且c!=dc.y=0a<b且c=d1a<b且c!=dd.y=0a<b且c=d1c!=dC5.有以下程序運(yùn)行后的輸出結(jié)果是————main(){inta=3,b=4,c=5,t=99;if(b<a&&a<c)t=a;a=c;c=t;if(a<c&&b<c)t=b;b=a;a=t;printf(“%d%d%d\n”,a,b,c);}45996.有以下程序main(){inta=3,b=4,c=5,d=2;if(a>b)if(b>c)printf(“%d”,d+++1);elseprintf(“%d”,++d+1);printf(“%d\n”,d);}程序運(yùn)行后的結(jié)果是————a.2b.3c.43d.44A4.3關(guān)系運(yùn)算符和關(guān)系表達(dá)式4.3.1關(guān)系運(yùn)算符及其優(yōu)先次序4.3.2關(guān)系表達(dá)式//表達(dá)式值1//表達(dá)式值1//表達(dá)式值0//a>b值為1,所以d=1//a>b為1,a>b>c為0,所以f=0例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來式子。關(guān)系表達(dá)式的值:邏輯值“真”或“假”,用1和0表示注意:其中“==”表示相等,而“=”表示賦值4.3.1關(guān)系運(yùn)算符及其優(yōu)先次序4.3.1關(guān)系運(yùn)算符及其優(yōu)先次序關(guān)系運(yùn)算符:用來對(duì)兩個(gè)數(shù)值進(jìn)行比較的比較運(yùn)算符C語(yǔ)言提供6種關(guān)系運(yùn)算符:①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)
⑤==(等于)⑥!=(不等于)優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(低)4.3.1關(guān)系運(yùn)算符及其優(yōu)先次序結(jié)合方向:自左向右優(yōu)先級(jí)別:前4種優(yōu)先級(jí)相同,高于后2種算術(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)算符左右兩邊類型不一致,自動(dòng)進(jìn)行類型轉(zhuǎn)換,轉(zhuǎn)換成兩邊的類型相同,然后進(jìn)行比較。例如:若a=0,b=0.5,轉(zhuǎn)換成a=0.0,則a<=b的值為1
2)應(yīng)避免對(duì)實(shí)數(shù)作相等或不等的判斷,而只能使用“<”和“>”,原因在于舍入誤差可能造成兩個(gè)邏輯上應(yīng)該相等的數(shù)不相等。例如:如果x、y均為實(shí)數(shù),要避免使用x==y
應(yīng)使用fabs(x-y)<1e-6(3)關(guān)系運(yùn)算符“>=、<=、==、!=”在書寫時(shí),不要用空格將其分開,否則會(huì)產(chǎn)生語(yǔ)法錯(cuò)誤。關(guān)系運(yùn)算注意的問題4.4邏輯運(yùn)算符和邏輯表達(dá)式4.4.1邏輯運(yùn)算符及其優(yōu)先次序4.4.2邏輯表達(dá)式4.4.3邏輯型變量4.4.1邏輯運(yùn)算符及其優(yōu)先次序1、邏輯運(yùn)算符(3種)
?。哼壿嫹?,一元運(yùn)算符運(yùn)算規(guī)則:取反,!真假,!假真&&:邏輯與。又稱邏輯乘。運(yùn)算規(guī)則:兩個(gè)操作數(shù)均為真,結(jié)果為真。||:邏輯或。又稱邏輯加。運(yùn)算規(guī)則:只要兩個(gè)操作數(shù)有一個(gè)為真,結(jié)果為真。!(2)&&(11)||(12)高低(3)優(yōu)先級(jí):(4)結(jié)合方向:!:從右向左&&:從左向右||:從左向右?。ǚ牵┧阈g(shù)運(yùn)算符關(guān)系運(yùn)算符&&||賦值運(yùn)算符=高低如:x=!a>b&&b>c+3x=(((!a)>b)&&(b>(c+3)))以下的條件如何使用c語(yǔ)言的邏輯和關(guān)系表達(dá)式表述:0<x<2x大于5且不能夠被7整除y在1到9之間但不能是5
ch不是字符’q’或者’k’x>0&&x<2x>5&&x%7!=0y>1&&y<9&&y!=5ch!=‘1’||ch!=‘k’0(5)短路現(xiàn)象:一個(gè)邏輯表達(dá)式中的邏輯運(yùn)算符并不一定全部執(zhí)行.例如:a=1,b=2,c=3,d=4,m=1,n=1(m=a>b)&&(n=c>d)
判斷m,n的值:結(jié)果m=0,n=1,表達(dá)式為0例如: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均不必判別。3.說明1)邏輯運(yùn)算符兩側(cè)的操作數(shù),除可以是0和非0的整數(shù)外,也可以是其它任何類型的數(shù)據(jù),如實(shí)型、字符型等。2)在計(jì)算邏輯表達(dá)式時(shí),只有在必須執(zhí)行下一個(gè)表達(dá)式才能求解時(shí),才求解該表達(dá)式(即并不是所有的表達(dá)式都被求解)。換句話說:1)對(duì)于邏輯與運(yùn)算,如果第一個(gè)操作數(shù)被判定為“假”,系統(tǒng)不再判定或求解第二操作數(shù)。2)對(duì)于邏輯或運(yùn)算,如果第一個(gè)操作數(shù)被判定為“真”,系統(tǒng)不再判定或求解第二操作數(shù)。
思考題:判斷一個(gè)數(shù)n是否為奇數(shù)或偶數(shù)?判斷一個(gè)字母c是否是英文字符?判斷一個(gè)年份是否為閏年?判斷一個(gè)數(shù)n是否被數(shù)k整除?判斷三個(gè)數(shù)是否組成一個(gè)三角形?判斷三個(gè)數(shù)是否組成一個(gè)等腰三角形?(year%4==0)&&(year%100!=0)||(year%400==0)
1.設(shè)有定義:“inta=2,b=3,c=4;”,則以下選項(xiàng)中值為0的表達(dá)式是——a.(!a==1)&&(!b==0)b.(a>b)&&!c||1c.a&&bd.a||(b+b)&&(c-a)A練習(xí)2.有以下程序main(){inta,b,d=25;a=d/10%9;b=a&&(-1)printf(“%d,%d\n”,a,b);}程序運(yùn)行后的輸出結(jié)果是:——a.12b.20c.02d.21D4.已定義“charch=‘$’;inti=1,j;”,執(zhí)行“j=!ch&&i++以后,i的值為——5.以下程序運(yùn)行后的結(jié)果是————main(){inta,b,c;a=10;b=20;c=(a%b<1)||(a/b>1);printf(“%d%d%d\n”,a,b,c);}6.在C語(yǔ)言中,邏輯“真”等價(jià)于下面哪一項(xiàng)——a.整數(shù)1b.Truec.非0數(shù)d.任意常數(shù)110200C7.有以下程序:main(){inta=1,b=2,m=0,n=0,k;k=(n=b>a)||(m=a<b);printf(“%d,%d\n”,k,m);}程序運(yùn)行后的輸出結(jié)果是————a.0,0b.0,1c.1,0d.1,1C4.5條件運(yùn)算符和條件表達(dá)式有一種if語(yǔ)句,當(dāng)被判別的表達(dá)式的值為“真”或“假”時(shí),都執(zhí)行一個(gè)賦值語(yǔ)句且向同一個(gè)變量賦值如:if(a>b)max=a;elsemax=b;max=(a>b)?a
:b;條件運(yùn)算符有兩個(gè)符號(hào):?、:,它與三個(gè)操作數(shù)組成三元運(yùn)算。一般形式:<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>求值規(guī)則和表達(dá)式的值:求解表達(dá)式1真(非0)求解表達(dá)式2假(0)求解表達(dá)式3表達(dá)式的值4.5條件運(yùn)算符和條件表達(dá)式優(yōu)先級(jí):算術(shù)>關(guān)系>邏輯>條件>賦值結(jié)合性:自右至左例:intmax,a=5;b=3;max=a>b?a:b--a==b++?a++:b++y=x>10?x/10:x>0?x:-x;1.有以下計(jì)算公式y(tǒng)=(x>=0)(x<0)若程序前面已在命令行中包括math.h文件,不能夠正確計(jì)算上述公式的程序是——a.if(x>=0)y=sqrt(x);b.y=sqrt(x);elsey=sqrt(-x);if(x<0)y=sqrt(-x)c.if(x>=0)y=sqrt(x);d.y=sqrt(x>=0?x:-x);if(x<0)y=sqrt(-x);練習(xí)B2.若有定義“intx,y;”,并已正確給變量賦值,則以下選項(xiàng)與表達(dá)式“(x-y)?(x++)+(y++)”中的條表達(dá)式(x-y)等價(jià)的是——a.(x-y>0)b.(x-y<0)c.(x-y<0||x-y>0)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.有以下程序段:intk=0,a=1,b=2,c=3;k=a<b?b:a;k=k>c?c:k;執(zhí)行該程序后,k的值是————a.3b.2c.1d.0B5.若整型變量a,b,c,d中的值依次為1,4,3,2,則條件表達(dá)式a<b?a:c<d?c:d的值是————a.1b.2c.3d.4A6.以下程序的輸出結(jié)果是————main(){inta=5,b=4,c=6,d;printf(“%d\n”,d=a>b?(a>c?a:c):(b);}a.5b.4c.6d.不確定C#include<stdio.h>voidmain(){inta,b,max;printf("\ninputtwonumbers:");scanf("%d%d",&a,&b);max=a;
if(max<b)max=b;printf("max=%d",max);}例:求兩個(gè)整數(shù)的較大值。max=a>b?a:b;#include<stdio.h>voidmain(){intx,y;scanf("%d",&x);
if(x<0)y=-x;elsey=x;printf("x=%-6d,y=%d",x,y);}例:求任意整數(shù)的絕對(duì)值。y=x>=0?x:-x;#include<stdio.h>voidmain(){charc;printf("inputacharacter:");c=getchar();if(c<32)printf("Thisisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf("Thisisadigit\n");elseif(c>='A'&&c<='Z')printf("Thisisacapitalletter\n");elseif(c>='a'&&c<='z')printf("Thisisasmallletter\n");elseprintf("Thisisanothercharacter\n");}例:判斷輸入的字符的類別。練習(xí):輸入一個(gè)數(shù),判別它是否能被3整除;若能,打印YES,不能,打印NO。練習(xí):編寫程序,根據(jù)輸入的學(xué)生成績(jī),給出相應(yīng)的等級(jí)。90分以上的等級(jí)為A,60分以下的等級(jí)為E,其余每10分為一個(gè)等級(jí)。練習(xí):輸入一個(gè)0-6的整數(shù),轉(zhuǎn)換成星期輸出。4.7switch語(yǔ)句switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句1;case常量表達(dá)式2:語(yǔ)句2;…case常量表達(dá)式n:語(yǔ)句n;default:語(yǔ)句n+1;}switch語(yǔ)句執(zhí)行過程:執(zhí)行:若表達(dá)式==常量表達(dá)式,則執(zhí)行語(yǔ)句;若表達(dá)式!=常量表達(dá)式,則執(zhí)行default開始的(語(yǔ)句);若程序中無(wú)default開始的語(yǔ)句,則程序語(yǔ)句switch相當(dāng)于一個(gè)空程序(語(yǔ)句)。計(jì)算表達(dá)式的值。判斷:表達(dá)式的值與常量表達(dá)式的值是否相等。4.7switch語(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;}數(shù)值型或字符型常量表達(dá)式的值必須互不相同,否則執(zhí)行時(shí)將出現(xiàn)矛盾,即同一個(gè)開關(guān)值,將對(duì)應(yīng)多種執(zhí)行方案。千萬(wàn)不能接(;)號(hào)根據(jù)表達(dá)式的不同值,選擇不同的程序分支,又稱開關(guān)語(yǔ)句。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其它=語(yǔ)句n+1無(wú)值case語(yǔ)句出現(xiàn)的次序并不影響執(zhí)行結(jié)果?!纠枯斎胍粋€(gè)十進(jìn)制數(shù),根據(jù)輸入的數(shù)輸出所對(duì)應(yīng)的英文星期單詞,若所輸入數(shù)小于1或大于7,則輸出“Error”。#include<stdio.h>voidmain(){ inta; printf("Inputa:"); scanf("%d",&a); switch(a) { case1:printf("Monday\n"); case2:printf("Tuesday\n"); case3:printf("Wednesday\n"); case4:printf("Thursday\n"); case5:printf("Friday\n"); case6:printf("Saturday\n"); case7:printf("Sunday\n"); default:printf("Error\n");}}在“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ǔ)句的情況。為此,C語(yǔ)言提供了一種break語(yǔ)句,其功能是可以跳出它所在的switch語(yǔ)句。上例修改后的程序#include<stdio.h>voidmain(){ inta; printf("Inputa:"); scanf("%d",&a); switch(a) { case1:printf("Monday\n");break; case2:printf("Tuesday\n");break; case3:printf("Wednesday\n");break; case4:printf("Thursday\n");break; case5:printf("Friday\n");break; case6:printf("Saturday\n");break; case7:printf("Sunday\n");break; default:printf("Error\n");break; }}說明switch后跟的“表達(dá)式”允許為任何類型的表達(dá)式,其數(shù)據(jù)類型和case后面的常量表達(dá)式的數(shù)據(jù)類型一致。每一個(gè)case后的各常量表達(dá)式的值不允許重復(fù),否則會(huì)報(bào)錯(cuò)。每一個(gè)case后允許有多條語(yǔ)句,可以不用花括號(hào)“{}”括起來case和default子句出現(xiàn)的先后順序可以變動(dòng),不會(huì)影響程序的執(zhí)行結(jié)果。default子句也可以省略不用。多個(gè)case可以共用一組執(zhí)行語(yǔ)句。例如:…case'A':case'B':case'C':printf("Pass\n");break;說明:緊跟在switch后一對(duì)括號(hào)中的表達(dá)式可以是整型表達(dá)式及將要學(xué)習(xí)的字符型或枚舉型表達(dá)式等,兩邊的括號(hào)不可省略。case也是關(guān)鍵字,與其后的常量表達(dá)式合稱case語(yǔ)句標(biāo)號(hào),常量表達(dá)式的類型必須與switch后的表達(dá)式類型相同。各case語(yǔ)句標(biāo)號(hào)的值應(yīng)該互不相同。default也是關(guān)鍵字,起標(biāo)號(hào)作用。代表所有case標(biāo)號(hào)之外的那些標(biāo)號(hào)。default可以出現(xiàn)在語(yǔ)句體的任何標(biāo)號(hào)位置上。語(yǔ)句體中也可以沒有default標(biāo)號(hào)case語(yǔ)句標(biāo)號(hào)后的語(yǔ)句1,語(yǔ)句2等等,可以是一條語(yǔ)句,也可以是若干語(yǔ)句。在關(guān)鍵字case和常量表達(dá)式之間一定要有空格,例如case10:不能寫成case10:。
4.7用switch語(yǔ)句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)switch語(yǔ)句用來實(shí)現(xiàn)多分支選擇結(jié)構(gòu)學(xué)生成績(jī)分類85分以上為’A’等70~84分為’B’等60~69分為’C’等……人口統(tǒng)計(jì)分類
按年齡分為老、中、青、少、兒童4.7用switch語(yǔ)句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)
例4.6要求按照考試成績(jī)的等級(jí)輸出百分制分?jǐn)?shù)段,A等為85分以上,B等為70~84分,C等為60~69分,D等為60分以下。成績(jī)的等級(jí)由鍵盤輸入。4.7用switch語(yǔ)句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)解題思路:判斷出這是一個(gè)多分支選擇問題根據(jù)百分制分?jǐn)?shù)將學(xué)生成績(jī)分為4個(gè)等級(jí)如果用if語(yǔ)句,至少要用3層嵌套的if,進(jìn)行3次檢查判斷用switch語(yǔ)句進(jìn)行一次檢查即可得到結(jié)果#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");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("enterdataerror!\n");}return0;}值為A#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");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("enterdataerror!\n");}return0;}不能少#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");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("enterdataerror!\n");}return0;}值為C#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");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("enterdataerror!\n");}return0;}值為F例4.7編寫程序,用switch語(yǔ)句處理菜單命令。解題思路:在許多應(yīng)用程序中,用菜單對(duì)流程進(jìn)行控制,例如從鍵盤輸入一個(gè)’A’或’a’字符,就會(huì)執(zhí)行A操作,輸入一個(gè)’B’或’b’字符,就會(huì)執(zhí)行B操作,等等。#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;
case'b':case‘B’:action2(a,b);break;
default:putchar(‘\a’);}return0;}輸入a或A調(diào)用action1函數(shù),執(zhí)行A操作voidaction1(intx,inty){printf("x+y=%d\n",x+y);}#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;
case'b':case‘B’:action2(a,b);break;
default:putchar(‘\a’);}return0;}輸入b或B調(diào)用action2函數(shù),執(zhí)行B操作voidaction2(intx,inty){printf("x*y=%d\n",x*y);}#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case‘A’:action1(a,b);break;
case'b':case‘B’:action2(a,b);break;
default:putchar(‘\a’);}return0;}輸入其他字符發(fā)出警告這是一個(gè)非常簡(jiǎn)單的示意程序?qū)嶋H應(yīng)用中,所指定的操作可能比較復(fù)雜:A:輸入全班學(xué)生各門課的成績(jī)B:計(jì)算并輸出每個(gè)學(xué)生各門課的平均成績(jī)C:計(jì)算并輸出各門課的全班平均成績(jī)D:對(duì)全班學(xué)生的平均成績(jī)由高到低排序并輸出可以按以上思路編寫程序,把各action函數(shù)設(shè)計(jì)成不同的功能以實(shí)現(xiàn)各要求4.8選擇結(jié)構(gòu)程序綜合舉例例4.8寫一程序,判斷某一年是否閏年。解題思路:在前面已介紹過判別閏年的方法本例用不同的方法編寫程序4.8選擇結(jié)構(gòu)程序綜合舉例用變量leap代表是否閏年的信息。若閏年,令leap=1;非閏年,leap=0。最后判斷l(xiāng)eap是否為1(真),若是,則輸出“閏年”信息參見教材圖4.13#include<stdio.h>intmain() {intyear,leap;printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0) if(year%400==0)leap=1;elseleap=0; elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear.\n");return0;}標(biāo)志變量與if(leap!=0)含義相同#include<stdio.h>intmain() {intyear,leap;printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0) if(year%400==0)leap=1;elseleap=0; elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear.\n");return0;}采取鋸齒形式#include<stdio.h>intmain() {intyear,leap;printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0) if(year%400==0)leap=1;elseleap=0; elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear.\n");return0;}if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;else
leap=1;#include<stdio.h>intmain() {intyear,leap;printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0) if(year%400==0)leap=1;elseleap=0; elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear.\n");return0;}if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;例任意輸入三個(gè)數(shù),判斷能否構(gòu)成三角形?若能構(gòu)成三角形,是等邊三角形、等腰三角形還是其它三角形?#include"stdio.h"voidmain(){floata,b,c;scanf("%f,%f,%f",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){if(a==b&&b==c)printf("equalateraltriangle.\n");elseif(a==b||a==c||b==c)printf("isoscelestriangle.\n");elseprintf("othertriangle.\n");}elseprintf("cannot\n
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 互聯(lián)網(wǎng)產(chǎn)品創(chuàng)新大賽方案
- 建筑行業(yè)審計(jì)項(xiàng)目實(shí)施方案
- 2024至2030年中國(guó)水泵件數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年中國(guó)彩色花珠數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年中國(guó)化纖商標(biāo)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年中國(guó)低噪聲離心式通風(fēng)機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年中國(guó)不銹鋼衛(wèi)生快裝三通行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024年臺(tái)歷圈項(xiàng)目可行性研究報(bào)告
- (總結(jié))衛(wèi)生院醫(yī)聯(lián)體工作總結(jié)
- 車間安全培訓(xùn)試題附完整答案(易錯(cuò)題)
- 小學(xué)數(shù)學(xué)命題設(shè)計(jì)案例解析共60頁(yè)文檔課件
- 塑料袋的警告語(yǔ)(歐洲)
- 【圖文】計(jì)算機(jī)之父――圖靈
- UG軟件概述(課堂PPT)
- 制作新春燈籠
- 2016雕塑工程計(jì)價(jià)定額(共10頁(yè))
- 液壓油缸項(xiàng)目建設(shè)用地申請(qǐng)報(bào)告(范文參考)
- 實(shí)驗(yàn)室人員比對(duì)試驗(yàn)結(jié)果小結(jié)與分析
- 七年級(jí)上冊(cè)歷史時(shí)間軸
- 個(gè)人壽險(xiǎn)業(yè)務(wù)人員基本管理辦法(試行2012A版)
- 口風(fēng)琴結(jié)題報(bào)告-復(fù)件(1)
評(píng)論
0/150
提交評(píng)論