第4章選擇結(jié)構(gòu)程序設(shè)計(修改)_第1頁
第4章選擇結(jié)構(gòu)程序設(shè)計(修改)_第2頁
第4章選擇結(jié)構(gòu)程序設(shè)計(修改)_第3頁
第4章選擇結(jié)構(gòu)程序設(shè)計(修改)_第4頁
第4章選擇結(jié)構(gòu)程序設(shè)計(修改)_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第四章選擇程序設(shè)計If語句switch語句邏輯運算符和邏輯表達式關(guān)系運算符和關(guān)系表達式條件運算符和條件表達式難點:If語句嵌套switch語句關(guān)系運算符和表達式關(guān)系運算符種類:<<===>=>!=關(guān)系表達式的值:是邏輯值“真”或“假”,用1和0表示<>5>3值為真15<=3值為假0‘5’==5值為假05!=3值為真1例應(yīng)避免對實數(shù)作相等或不等的判斷如1.0/3.0*3.0==1.0結(jié)果為可改寫為:fabs(1.0/3.0*3.0-1.0)<1e-60關(guān)系運算注意:關(guān)系運算注意:<>例5>2>7>8在C中是允許的,值為0例inti=1,j=7,a;a=i+(j%4!=0);

則a=2算術(shù)運算3,4級賦值運算符14逗號運算符15(最低)關(guān)系運算符的優(yōu)化級<<=>>===!=優(yōu)先級6(高)優(yōu)先級7(低)結(jié)合方向:自左向右優(yōu)先級別(見課本287頁附錄)5>2>7>8(從左向右結(jié)合)例:a+b>c/d//(a+b)>(c/d)‘a(chǎn)’+1<c//(‘a(chǎn)’+1)<c-i-5*j==k+1a>b==c//(a>b)==cx=a!=c==d//x=((a!=c)==d)左結(jié)合#include<stdio.h>main(){ charc='k'; inti=1,j=2,k=3; floatx=3e+5,y=0.85; printf("%d,%d\n",'a'+5<c,-i-2*j>=k+1); printf("%d,%d\n",1<j<5,x-5.25<=x+y); printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);}1,01,10,0ab!a!ba&&ba||b真假真假假假真真邏輯運算符和表達式邏輯運算符種類:!&&||邏輯運算真值表C語言中,運算量:0表示“假”,非0表示“真”,

運算結(jié)果:0表示“假”,1表示“真”,<>真假假假假假真真假假真真真假真真優(yōu)先級和結(jié)合方向結(jié)合方向:&&||左結(jié)合!右結(jié)合!(非)算術(shù)運算符關(guān)系運算符&&和||賦值運算符高低優(yōu)先級和結(jié)合方向例a<=x&&x<=b

a>b&&x>ya==b||x==y!a||a>b//(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如何正確表示0.5<x<2.0x>0.5&&x<2.0短路特性:邏輯表達式求解時,并非所有的邏輯運算符都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運算符才能求出表達式的解時,才執(zhí)行該運算符<>例a&&b&&c//只在a為真時,才判別b的值;只在a、b都為真時,才判別c的值例a||b||c//只在a為假時,才判別b的值;只在a、b都為假時,才判別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ōu)先級1級()[]->.2級!~++--+-**(類型名)sizeof3級*/%4級+-5級<<>>6級<><=>=7級==!=8級&按位與9級^按位異或|按位或11&&邏輯與12||邏輯或13?:條件運算符14=+=-=*=/=%=&=^=|=<<=>>=15,逗號運算符初等運算符單目運算符算術(shù)運算符先乘除后加減關(guān)系運算符位運算符邏輯運算符(不含?。┮莆晃贿\算符#include<stdio.h>main(){charc='k';inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf("%d,%d\n",!x*!y,!!!x);printf("%d,%d,\n",x||(i=5)&&j-3,i<j&&x<y);printf("%d,%d,\n",i==5&&c&&(j=8),x+y||i+j+k);}0,01,00,1If語句switch語句if語句1.1if語句的三種形式形式一(單分支if語句)格式:if(expression)statement執(zhí)行過程:exprstatement非0=0例:if(x>y)printf(“%d”,x);exprstatement1statement2非0=0形式二:(雙分支)格式:if(expression)statement1elsestatement2執(zhí)行過程:例:if(x>0)y=sqrt(x);elsey=x;#include<stdio.h>#include<math.h>voidmain(){ floatx,y; printf("inputoneuumber:"); scanf("%f",&x); y=x;

if(x>0)y=sqrt(x); printf("y=%f",y);}形式三:格式:if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3…...[elsestatementn]expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0執(zhí)行過程:

例: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;如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a(chǎn)’)printf(“%d”,’a’);說明:if后面的表達式類型任意語句可以是復(fù)合語句

if(x)if(x!=0)

if(!x)

if(x==0)例考慮下面程序的輸出結(jié)果:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y++;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!例4.4三個數(shù)由小到大順序輸出#include<stdio.h>main(){floata,b,c,t;scanf("%f%f%f",&a,&b,&c);if(a>b) {t=a;a=b;b=t;}/*對換a和b的值*/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\n",a,b,c);}#include<stdio.h>main(){inta,b;printf("Enterintegera:");scanf("%d",&a);printf("Enterintegerb:");scanf("%d",&b);if(a==b)printf("a==b\n");

elseprintf("a!=b\n");}例輸入兩個數(shù)并判斷兩數(shù)相等否運行:Enterintegera:12

Enterintegerb:12a==b運行:Enterintegera:12

Enterintegerb:9a!=b#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");}例4.5判斷輸入字符種類運行:Enteracharacter:

Thecharacterisacontrolcharacter運行:Enteracharacter:8Thecharacterisadigit運行:Enteracharacter:DThecharacterisacapitalletter運行:Enteracharacter:hThecharacterisalowerletter運行:Enteracharacter:F1Thecharacterisothercharacter1.2if語句嵌套:一般形式: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");

elseprintf("X==Y\n");}運行:Enterintegerx,y:12,23X<Y

Enterintegerx,y:12,6X>YEnterintegerx,y:12,12X==Yif~else配對原則:缺省{}時,else總是和它上面離它最近的未配對的if配對if(……)if(……)if(……)else…...else…...else…...if(expr1){if(expr2)statement1}elsestatement3

內(nèi)嵌if例:if(a==b)

if(b==c)printf(“a==b==c”);

elseprintf(“a!=b”);修改:if(a==b){if(b==c)printf(“a==b==c”);}elseprintf(“a!=b”);實現(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é)果:-1條件運算符:max=(a>b)?a:b; if(a>b) max=a; else max=b;

結(jié)合方向:自右向左

如a>b?a:c>d?c:d

a>b?a:(c>d?c:d)expr1、expr2、expr3類型可不同,表達式值取較高的類型條件運算符可嵌套

如x>0?1:(x<0?-1:0)優(yōu)先級:13條件運算符與表達式一般形式:expr1?expr2:expr3執(zhí)行過程功能:相當于條件語句,但不能取代一般if語句例if(a>b)printf(“%d”,a);elseprintf(“%d”,b);printf(“%d”,a>b?a:b);例求a+|b|printf(“a+|b|=%d\n”,b>0?a+b:a-b);expr1取expr2值取expr3值非0=0<>例x?‘a(chǎn)’:‘b’//x=0,表達式值為‘b’;x?0,表達式值為‘a(chǎn)’x>y?1:1.5//x>y,值為1.0;x<y,值為1.52.switch語句(開關(guān)分支語句)一般形式:switch(表達式){caseE1:

語句組1;break;caseE2:

語句組2;break;…….caseEn:

語句組n;break;[default:

語句組;break;]}執(zhí)行過程:switch表達式語句組1語句組2語句組n語句組…...E1E2Endefaultcase說明:E1,E2,…En是常量表達式,且值必須互不相同語句標號作用,必須用break跳出case后可包含多個可執(zhí)行語句,且不必加{}switch可嵌套多個case可共用一組執(zhí)行語句如:……case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;……..例4.7

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”);}運行結(jié)果:a為5時,輸出:FridaySaturdaySundayerror例4.8

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”);}運行結(jié)果:a為5時,輸出:Friday例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);}運行結(jié)果:a=2,b=1例4.9閏年問題if(year%4==0&&year%100!=0||year%400==0)printf(“YES”);elseprintf(“NO”);

例4.10輸入一個不多于4位的正整數(shù),求出該數(shù)是幾位數(shù),并逆序打印出各位數(shù)字。#include<stdio.h>main(){intx,a,b,c,d;scanf(“%d”,&x);a1=x%10;//分解個位a2=x/10%10;//分解十位a3=x/100%10;//分解百位a4=x/1000%10;

//分解千位

if(a4!=0)printf(“4:%d%d%d%d\n”,a1,a2,a3,a4);elseif(a3!=0)printf(“3:%d%d%d\n”,a1,a2,a3);elseif(a2!=0)printf(“2:%d%d\n”,a1,a2);elseprintf(“1:%d\n”,a1);}輸入:562輸出:3:265profit<=1000,沒有提成;1000<profit<=2000,提成10%;2000<profit<=5000,提成15%;5000<profit<=10000,提成20%;

10000<profit,提成25%;0,11,22,3,4,55,6,7,8,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論