版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第四章
選擇結(jié)構(gòu)程序設(shè)計(jì)
關(guān)系運(yùn)算符和表達(dá)式關(guān)系運(yùn)算符種類:<<===>=>!=結(jié)合方向:自左向右優(yōu)先級別:<<=>>===!=優(yōu)先級6(高)優(yōu)先級7(低)例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)關(guān)系表達(dá)式的值:邏輯值“真”,用1表示邏輯值“假”,用0表示例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c<>表達(dá)式值1表達(dá)式值1表達(dá)式值0d=1f=0關(guān)系運(yùn)算注意:<>例若a=0;b=0.5;x=0.3;
則a<=x<=b的值為
0例
5>2>7>8在C中是允許的,值為0例inti=1,j=7,a;a=i+(j%4!=0);
則a=2例‘a(chǎn)’>0結(jié)果為‘A’>100結(jié)果為10關(guān)系運(yùn)算注意:例注意區(qū)分“=”與“==”
inta=0,b=1;if(a=b)
printf(“aequaltob”);else
printf(“anotequaltob”);ab!a!ba&&ba||b真假真假假假真真邏輯運(yùn)算符和表達(dá)式邏輯運(yùn)算符種類:!
、&&
、||邏輯運(yùn)算真值表C語言中,運(yùn)算量:
0表示“假”,
非0表示“真”,
運(yùn)算結(jié)果:
0表示“假”,
1表示“真”,<>真假假假假假真真假假真真真假真真!(2)&&(11)||(12)高低例a<=x&&x<=b
a>b&&x>y
a==b||x==y
!a||a>b優(yōu)先級:結(jié)合方向:!:從右向左&&:從左向右||:從左向右<>
(a<=x)&&(x<=b)(a>b)&&(x>y)(a==b)||(x==y)(!a)||(a>b)例
a=4;b=5;!aa&&ba||b!a||b4&&0||25>3&&2||8<4-!0‘c’&&‘d’<>值為1值為0值為1值為1值為1值為1(5>3)&&2||(8<(4-(!0)))值為1
短路特性:邏輯表達(dá)式求解時(shí),并非所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符<>例a&&b&&c只在a為真時(shí),才判別b的值;
a、b都為真時(shí),才判別c的值例a||b||c只在a為假時(shí),才判別b的值;在a、b都為假時(shí),才判別c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)結(jié)果m=0,n=1條件運(yùn)算符與表達(dá)式一般形式:
expr1
?expr2:expr3
a>b?a:b執(zhí)行過程printf(“%d”,a>b?a:b);例求a+|b|b>0?a+b:a-bexpr1取expr2值取expr3值非00c=a>b?a:b;例x?‘a(chǎn)’:‘b’
x=0,表達(dá)式值為‘b’;
x?0,表達(dá)式值為‘a(chǎn)’
x>y?1:1.5
x>y,值為1.0;
x<y,值為1.5結(jié)合方向:自右向左
如a>b?a:c>d?c:da>b?a:(c>d?c:d)expr1、expr2、expr3類型可不同,表達(dá)式值取較高的類型條件運(yùn)算符可嵌套
如x>0?1:(x<0?-1:0)優(yōu)先級:13例(a==b)?’Y’:’N’(x%2==1)?1:0(x>=0)?x:-x(c>=‘a(chǎn)’&&c<=‘z’)?c-’a’+’A’:cif語句形式一:
格式:if(expression)statement執(zhí)行過程:exprstatement非00例:if(x>y)printf(“%d”,x);/*ch4_1.c*/#include<stdio.h>main(){intx,y;
printf("Enteraninteger:");
scanf("%d",&x);
y=x;
if(x<0)y=-x;
printf("\ninteger:%d--->absolutevalue:%d\n",x,y);}例求一個(gè)數(shù)的絕對值運(yùn)行:Enteraninteger:-12integer:-12--->absolutevalue:12用if語句形式1編寫程序
main(){floatx,y;
scanf("%f",&x);if(x<2)y=x;if(2<=x&&x<10)y=2*x-1;if(x>=10)y=3*x+10;
printf("%f,%f\n",x,y);}例
若有函數(shù)
x(x<2)y=2x-1(2≤x<10)3x+10(10≤x)
任意輸入x,輸出y。
形式二:格式:if(expression)statement1elsestatement2執(zhí)行過程:exprstatement1statement2非00例:if(x>y)max=x;elsemax=y;例if(a>b)
printf(“%d”,a);else
printf(“%d”,b);/*ch4_2.c*/#include<stdio.h>main(){inta,b;
printf("Enterintegera:");
scanf("%d",&a);
printf("Enterintegerb:");
scanf("%d",&b);
if(a==b)
printf("a==b\n");else
printf("a!=b\n");}例輸入兩個(gè)數(shù)并判斷兩數(shù)相等否運(yùn)行:Enterintegera:12
Enterintegerb:12a==b運(yùn)行:Enterintegera:12
Enterintegerb:9a!=b例輸入三角形邊長,求面積#include<math.h>main(){floata,b,c,s,area;
printf(“inputabc:”);
scanf("%f%f%f",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%7.2f\n",area);}else
printf(“dataerror!!");}形式三:if(表達(dá)式1)語句1elseif(表達(dá)式2)語句2elseif(表達(dá)式3)語句3…...[else語句n]執(zhí)行過程:
expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0例:if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salary>400)index=0.1;elseindex=0;main(){floatx,y;
scanf("%f",&x);if(x<2)
y=x;elseif(2<=x&&x<10)
y=2*x-1;elsey=3*x+10;
printf("%f,%f\n",x,y);}例
若有函數(shù)
x(x<2)y=2x-1(2≤x<10)3x+10(10≤x)
任意輸入x,輸出y。
說明:if后面的表達(dá)式類型任意語句可以是復(fù)合語句if(x)
if(x!=0)
if(!x)
if(x==0)如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a(chǎn)’)printf(“%d”,’a’);例考慮下面程序的輸出結(jié)果:
#include<stdio.h>main(){intx,y;
scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;
printf(“%d,%d\n”,x,y);}CompileError!#include<stdio.h>main(){charc;
printf("Enteracharacter:");c=getchar();
if(c<0x20)
printf("Thecharacterisacontrolcharacter\n");elseif(c>='0'&&c<='9')
printf("Thecharacterisadigit\n");elseif(c>='A'&&c<='Z')
printf("Thecharacterisacapitalletter\n");elseif(c>='a'&&c<='z')
printf("Thecharacterisalowerletter\n");elseprintf("Thecharacterisothercharacter\n");}例判斷輸入字符種類運(yùn)行:Enteracharacter:
Thecharacterisacontrolcharacter運(yùn)行:Enteracharacter:8Thecharacterisadigit運(yùn)行:Enteracharacter:DThecharacterisacapitalletter運(yùn)行:Enteracharacter:hThecharacterisalowerletter運(yùn)行:Enteracharacter:F1Thecharacterisothercharacter課堂練習(xí)1.當(dāng)從鍵盤輸入字符’a’或’A’時(shí),輸出American;當(dāng)從鍵盤輸入字符’b’或’B’時(shí),輸出Britain;當(dāng)從鍵盤輸入字符’c’或’C’時(shí),輸出China;若輸入其他字符則輸出France。2.輸入a、b、c的值,求ax2+bx+c=0的根。方法1:#include<stdio.h>main(){charch;
ch=getchar();
if(ch==‘a(chǎn)'||ch==‘A')printf("American");elseif(ch==‘b'||ch==‘B')printf("Britain");elseif(ch=='c'||ch=='C')printf("China");elseprintf("France");}方法2:#include<stdio.h>main(){intc;c=getchar();
switch(c){case'a':case'A':printf("American\n");break;case'b':case'B':printf(“Britain\n");break;case'c':case'C':printf(“China\n");break;default:printf(“France\n");break;}}方法1:#include<stdio.h>#include<math.h>voidmain(){ floata,b,c,disc,p,q;
printf("a=");
scanf("%f",&a);
printf("b=");
scanf("%f",&b);
printf("c=");
scanf("%f",&c);disc=b*b-4*a*c;
if(a==0)
printf("x=%5.2f",-c/b);elseif(disc==0)printf("x1=x2=%5.2f",-b/(2*a));elseif(disc>0){p=-b/(2*a);q=sqrt(disc)/(2*a);printf("x1=%5.2f,x2=%5.2f",p+q,p-q);}else{p=-b/(2*a);q=sqrt(-disc)/(2*a);printf("x1=%5.2f%+5.2fi\nx2=%5.2f%+5.2fi\n",p,q,p,-q);}}方法2if(a==0)
printf("x=%5.2f",-c/b);else{p=-b/(2*a);
if(disc==0)printf("x1=x2=%5.2f",p);elseif(disc>0){q=sqrt(disc)/(2*a); printf("x1=%5.2f,x2=%5.2f",p+q,p-q);}else{q=sqrt(-disc)/(2*a); printf("x1=%5.2f%+5.2fi,x2=%5.2f%+5.2fi\n",p,q,p,-q);}}if語句嵌套:if(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4內(nèi)嵌if內(nèi)嵌ifif(expr1)if(expr2)statement1elsestatement2內(nèi)嵌ifif(expr1)if(expr2)statement1elsestatement3
內(nèi)嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4內(nèi)嵌if例輸入兩數(shù)并判斷其大小關(guān)系#include<stdio.h>main(){intx,y;
printf("Enterintegerx,y:");
scanf("%d,%d",&x,&y);
if(x!=y)
if(x>y)printf("X>Y\n");elseprintf("X<Y\n");
else
printf("X==Y\n");}運(yùn)行:Enterintegerx,y:12,23X<Y
Enterintegerx,y:12,6X>YEnterintegerx,y:12,12X==Yif~else配對原則:缺省{}時(shí),else總是和它上面離它最近的未配對的if配對if(……)if(……)if(……)else…...else…...else…...例:if(a==b)if(b==c)
printf(“a==b==c”);else
printf(“a!=b”);修改:if(a==b)
{
if(b==c)
printf(“a==b==c”);
}
else
printf(“a!=b”);實(shí)現(xiàn)if~else正確配對方法:加{}例考慮下面程序輸出結(jié)果:
main(){intx=100,a=10,b=20;
intv1=5,v2=0;if(a<b)if(b!=15)if(!v1)x=1;elseif(v2)x=10;x=-1;
printf(“%d”,x);}結(jié)果:-1switch語句(開關(guān)分支語句)一般形式:switch(表達(dá)式){caseE1:語句組1;
break;caseE2:語句組2;
break;…….caseEn:語句組n;break;[default:語句組;
break;]}執(zhí)行過程:switch表達(dá)式語句組1語句組2語句組n語句組…...E1E2Endefaultcase說明:E1,E2,…En是常量表達(dá)式,且值必須互不相同Switch(表達(dá)式)中的值自動(dòng)取整caseEn:起語句標(biāo)號的作用,如果不用break跳出,程序就順序執(zhí)行下去。例switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}運(yùn)行結(jié)果:score為5時(shí),輸出:
Verygood!Good!Pass!Fail!dataerror!case后可包含多個(gè)可執(zhí)行語句,且不必加{}多個(gè)case可共用一組執(zhí)行語句如:……
case‘A’:case‘B’:case‘C’:
printf(“score>60\n”);break;……..break語句(也稱為中斷語句)形式:break;(只能用于switch結(jié)構(gòu)或者循環(huán)結(jié)構(gòu)之中)作用:中止switch結(jié)構(gòu)或循環(huán)結(jié)構(gòu)的執(zhí)行,轉(zhuǎn)去執(zhí)行相應(yīng)結(jié)構(gòu)的下一條語句。
例voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}
printf(“\na=%d,b=%d”,a,b);}運(yùn)行結(jié)果:a=2,b=1switch可嵌套#include<stdio.h>main(){intc;
printf("Entermornorhorother:");c=getchar();switch(c){case'm':printf("\nGoodmorning!\n");break;case'n':printf("\nGoodnight!\n");break;case'h':printf("\nHello!\n");break;default:printf("\n????????\n");break;}}例根據(jù)輸入字母輸出字符串方法三:用switch語句main(){floatx,y;
intz;
scanf("%f",&x);z=1*(x<2)+2*(2<=x&&x<10)+3*(x>=10);switch(z){case1:y=x;break;case2:y=2*x-1;break;case3:y=3*x+10;}
printf("%f,%f\n",x,y);}例
若有函數(shù)
x
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軍事訓(xùn)練荒山租賃合同范本
- 美術(shù)館前臺聘用合同
- 建筑工程搭棚施工合同范本
- 旅行社行程單租賃合同范本
- 電子產(chǎn)品維修雜工施工合同
- 二零二五年度房地產(chǎn)商房地產(chǎn)項(xiàng)目客戶關(guān)系管理策劃合同3篇
- 二零二五年度房地產(chǎn)抵押權(quán)轉(zhuǎn)讓與協(xié)議3篇
- 二零二五年度古建筑修繕包工不包料合作協(xié)議范本3篇
- 二零二五年度農(nóng)產(chǎn)品深加工購銷合同結(jié)算單
- 2024年銷售員工年度工作總結(jié)
- 現(xiàn)場生命急救知識與技能學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 成人流行性感冒抗病毒治療專家共識(2022年)解讀
- 四年級上冊豎式計(jì)算300題及答案
- 銅錢壩樞紐及溢洪道設(shè)計(jì)設(shè)計(jì)
- 工業(yè)通風(fēng)換氣次數(shù)的有關(guān)規(guī)定
- 語文五年級概括課文的主要內(nèi)容PPT優(yōu)秀課件
- 試劑驗(yàn)收記錄表.doc
- 蘇教版四年級數(shù)學(xué)上冊口算練習(xí)題(精華版)
- (完整版)傷寒金匱之四大類方方劑匯總
- 現(xiàn)金流量表自動(dòng)生成器
評論
0/150
提交評論