第四章 選擇結(jié)構(gòu)設(shè)計(jì)_第1頁
第四章 選擇結(jié)構(gòu)設(shè)計(jì)_第2頁
第四章 選擇結(jié)構(gòu)設(shè)計(jì)_第3頁
第四章 選擇結(jié)構(gòu)設(shè)計(jì)_第4頁
第四章 選擇結(jié)構(gòu)設(shè)計(jì)_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論