第四講-分支選擇結(jié)構(gòu)程序設(shè)計2課件_第1頁
第四講-分支選擇結(jié)構(gòu)程序設(shè)計2課件_第2頁
第四講-分支選擇結(jié)構(gòu)程序設(shè)計2課件_第3頁
第四講-分支選擇結(jié)構(gòu)程序設(shè)計2課件_第4頁
第四講-分支選擇結(jié)構(gòu)程序設(shè)計2課件_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2022/12/31復(fù)習關(guān)系運算符if語句分支結(jié)構(gòu)程序設(shè)計思想2022/12/11復(fù)習關(guān)系運算符12022/12/32邏輯判斷關(guān)系運算符和關(guān)系表達式> 大于< 小于>= 大于等于<=小于等于== 等于!= 不等于2022/12/12邏輯判斷22022/12/33關(guān)系判斷#include<stdio.h>main(){ intb,c; //整型變量 b=3;c=2; //對變量賦值 printf(“3>2是%d\n”,(b>c));//輸出邏輯值 printf(“3>=2是%d\n”,(b>=c)); printf(“3==2是%d\n”,(b==c)); printf(“3<2是%d\n”,(b<c)); printf(“3!=2是%d\n”,(b!=c));}2022/12/13關(guān)系判斷#include<stdio.32022/12/34

if(表達式)語句;

其語義是:如果表達式的值為真,則執(zhí)行其后的語句,否則不執(zhí)行該語句。如:

if(c<min)min=c;

單分支——選擇結(jié)構(gòu)的一種常用形式2022/12/14if(表達式)單分支——選42022/12/35格式:if(條件)語句1;else語句2;

雙分支——選擇結(jié)構(gòu)的一種最常用形式工作過程圖

:條件2022/12/15格式:if(條件)語句1;雙52022/12/36本節(jié)內(nèi)容邏輯運算符if語句應(yīng)用舉例switch語句及應(yīng)用2022/12/16本節(jié)內(nèi)容邏輯運算符62022/12/37雞兔同籠已知雞和兔的總數(shù)為n,總腿數(shù)為m。輸入n和m,依次輸出雞的數(shù)目和兔的數(shù)目,若無解,則輸出Noanswer!邏輯運算符2022/12/17雞兔同籠邏輯運算符72022/12/38#include<stdio.h>main(){intchick,rabbit,n,m;scanf(“%d%d”,&n,&m);chick=(4*n-m)/2;rabbit=n-chick;

if(m%2==1||a<0||b<0)printf(“Noanswer!\n”);else

printf(“chicks:%d;rabbits:%d\n”,chick,rabbit);

}

必須保證chick和rabbit都是非負整數(shù)!2022/12/18#include<stdio.h>82022/12/39分析:1、先根據(jù)輸入的三邊長,判斷能否構(gòu)成三角形,若能,則轉(zhuǎn)步驟2;若不能,則轉(zhuǎn)步驟3;2、使用海倫公式求三角形面積3、輸出提示:該三角形不存在。輸入三角形的三邊長,求三角形面積。2022/12/19分析:輸入三角形的三邊長,求三角形面積。92022/12/310#include<stdio.h>#include<math.h>main(){floata,b,c,s,area;scanf(“%f%f%f”,&a,&b,&c);

printf(“a=%7.2f,b=%7.2f,c=%7.2f\n”,a,b,c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“area=%7.2f\n”,area);}if((a+b>c)&&(b+c>a)&&(a+c>b))elseprintf(“不能構(gòu)成三角形!\n”);2022/12/110#include<stdio.h>102022/12/311邏輯運算符與表達式關(guān)系表達式只能描述單一條件,例如“x>=0”。如果需要描述“x>=0”、同時“x<10”,就要借助于邏輯表達式了。

2022/12/111邏輯運算符與表達式關(guān)系表達式112022/12/3121、邏輯運算符極其優(yōu)先次序C語言中提供了三種邏輯運算符:&&與運算||或運算!非運算邏輯運算符與表達式2022/12/1121、邏輯運算符極其優(yōu)先次序邏輯運算符122022/12/313邏輯與,運算符為&&

如圖電路A——表示開關(guān)A合上;B——表示開關(guān)B合上;A&&B——表示燈亮;

A B A&&B

1 1 1

1 0 0

0 1 0

0 0 01表示真,0表示假,這是邏輯變量的取值,非真即假2022/12/113邏輯與,運算符為&& A B A132022/12/314邏輯或,運算符為||

如圖電路A——表示開關(guān)A合上;B——表示開關(guān)B合上;A||B——表示燈亮;

A B A||B

1 1 1

1 0 1

0 1 1

0 0 01表示真,0表示假2022/12/114邏輯或,運算符為|| A B A14邏輯非,運算符為!兩隊比賽籃球,變量A表示A隊到場,!A表示A隊不到場,變量B表示B隊到場,!B表示B隊不到場。這場球賽能夠賽成,必須兩隊都到場。假定“能賽成”用邏輯變量C表示,則

C=A&&B賽不成當然用!C表示,讓D=!C,D表示賽不成則

D=!A||!B理解為A不到場或B不到場,球賽均無法進行。邏輯非,運算符為!152022/12/316

?。ǚ牵ǜ撸┧阈g(shù)運算符 關(guān)系運算符 &&|| 賦值運算符 (低)2022/12/116 ?。ǚ牵?6不使用邏輯運算符可否判斷三邊長構(gòu)成三角形?if(a+b>c)if(a+c>b)if(b+c>a){

s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));}if的嵌套不使用邏輯運算符可否判斷三邊長構(gòu)成三角形?if(a+b>c17【例4-1】寫一程序,從鍵盤上輸入某年份year(4位十進制數(shù)),判斷其是否閏年。閏年的條件是:年份能被4整除、但不能被100整除;或者能被400整除。分析:1、從鍵盤輸入任意一年份,類型為十進制整數(shù)2、判斷是否是閏年3、給出結(jié)論:“是”或“否”繼續(xù)對第2步進行任務(wù)細化2.1、判斷該年份數(shù)字能否被4整除,并且不能被100整除若能,則是閏年,程序結(jié)束,否則進入2.22.2、判斷該年份數(shù)字能否被400整除,若能,是閏年,程序結(jié)束,否則不是閏年,程序結(jié)束?!纠?-1】寫一程序,從鍵盤上輸入某年份year(4位十進制18程序優(yōu)化首先將是否閏年的標志leap預(yù)置為0(非閏年),這樣僅當year為閏年時將leap置為1即可。這種處理兩種狀態(tài)值的方法,對優(yōu)化算法和提高程序可讀性非常有效。利用邏輯運算能描述復(fù)雜條件的特點,使用邏輯運算降低if語句的復(fù)雜性,使程序更簡潔

if((year%4==0&&year%100!=0)||(year%400==0))

………………else………………程序優(yōu)化首先將是否閏年的標志leap預(yù)置為0(非閏年),19邏輯表達式的短路計算對于邏輯與運算,例如“a&&b”,若a的邏輯值為“假”,則無須計算b的邏輯值,就可得知表達式“a&&b”的邏輯值為“假”。能被4整除,但是不能被100整除的年份是閏年

(k%4==0)&&(k%100!=0)對于邏輯或運算,例如“a||b”,若a的邏輯值為“真”,則無須計算b的邏輯值,就可得知表達式“a||b”的邏輯值為“真”。因此,對于邏輯表達式,可以進行短路計算,既只計算表達式的部分項。邏輯表達式的短路計算對于邏輯與運算,例如“a&&b”,若20練習設(shè)a=3,b=4,c=5,試計算以下表達式的值a+b>c&&b==ca||b+c&&b–c(!(a+b)+c–1)&&(b+c/2)練習設(shè)a=3,b=4,c=5,試計算以下表達21提出問題:從鍵盤上輸入一個百分制成績score,按下列原則輸出其等級:score≥90,等級為A;80≤score<90,等級為B;70≤score<80,等級為C;60≤score<70,等級為D;score<60,等級為E。若使用if語句如何編程解決?提出問題:從鍵盤上輸入一個百分制成績score,按下列原則22二、switch語句

C語言還提供了另一種用于多分支選擇的switch語句,其一般形式為:

switch(表達式){

case常量表達式1:語句1;

case常量表達式2:語句2;…

case常量表達式n:語句n;

[default:語句n+1;]}[例4.2]二、switch語句C語言還提供了另一種用于多分支選擇的s23main(){inta;printf("inputintegernumber:");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");}}main()24swich語句的語義是:計算switch后的括號內(nèi)的表達式的值;逐個與case后的常量表達式值相比較,

當表達式的值與某個case后的常量表達式的值相等時,即執(zhí)行其后的語句,然后不再進行與case后常量表達式的比較,繼續(xù)執(zhí)行后面所有case常量表達式:后的語句。若表達式的值與所有case后的常量表達式均不相同時,則執(zhí)行default后的語句。swich語句的語義是:25main(){inta;printf("inputintegernumber:");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");}}main()26[例4.3]從鍵盤上輸入一個百分制成績score,按下列原則輸出其等級:score≥90,等級為A;80≤score<90,等級為B;70≤score<80,等級為C;60≤score<70,等級為D;score<60,等級為E。

[例4.3]從鍵盤上輸入一個百分制成績score,按下列原27main()

{intscore,grade;

printf(“Inputascore(0~100):”);

scanf(“%d”,&score);

grade=score/10;//將成績整除10,轉(zhuǎn)化成switch語句中的case標號switch(grade){case10:case9:printf(“grade=A\n”);breakcase8:printf("grade=B\n");break;case7:printf("grade=C\n");break;case6:printf("grade=D\n");break;case5:case4:case3:case2:case1:case0:printf(“grade=E\n”);break;default:printf(“Thescoreisoutofrange!\n”); }

}

main()

{intscore,grade28例4-4已知某公司員工的保底薪水為500,某月所接工程的利潤profit(整數(shù))與利潤提成的關(guān)系如下(計量單位:元):

profit≤1000 沒有提成;1000<profit

≤2000 提成10%;2000<profit≤5000 提成15%;5000<profit≤10000 提成20%;10000<profit 提成25%。為使用switch語句,必須將利潤profit與提成的關(guān)系,轉(zhuǎn)換成某些整數(shù)與提成的關(guān)系。分析本題可知,提成的變化點都是1000的整數(shù)倍(1000、2000、5000、100000)例4-4已知某公司員工的保底薪水為500,某月所接工程的29如果將利潤profit整除1000,則當:

profit≤1000 對應(yīng)0、11000<profit≤2000 對應(yīng)1、22000<profit≤5000 對應(yīng)2、3、4、55000<profit≤10000 對應(yīng)5、6、7、8、9、1010000<profit 對應(yīng)10、11、12、……為解決相鄰兩個區(qū)間的重疊問題,最簡單的方法就是:利潤profit先減1(最小增量),然后再整除1000即可:

profit≤1000 對應(yīng)01000<profit≤2000 對應(yīng)12000<profit≤5000 對應(yīng)2、3、45000<profit≤10000 對應(yīng)5、6、7、8、910000<profit 對應(yīng)10、11、12、……如果將利潤profit整除1000,則當:為解決相鄰兩個區(qū)30main(){longprofit;intgrade;floatcommission,salary=500;printf("Inputprofit:");scanf("%ld",&profit);

grade=(profit–1)/1000;switch(grade){case0:commission=0;break; /*profit≤1000*/case1:commission=profit*0.1;break; /*1000<profit≤2000*/case2:case3:case4:commission=profit*0.15;break; /*2000<profit≤5000*/case5:case6:case7:case8:case9:commission=profit*0.2;break; /*5000<profit≤10000*/default:commission=profit*0.25; /*10000<profit*/}salary+=commission;printf("salary=%.2f\n",salary);}main()312022/12/332三整數(shù)排序輸入3個整數(shù),從小到大排序后輸出。樣例:輸入20733

輸出72033if語句應(yīng)用實例2022/12/132三整數(shù)排序if語句應(yīng)用實例322022/12/333三整數(shù)排序分析

a,b,c三個數(shù)共有6種由大到小排序可能我們用6條if語句實現(xiàn)排序如何?2022/12/133三整數(shù)排序分析332022/12/334三整數(shù)排序

if(a<b&&b<c) printf("%d,%d,%d\n",a,b,c); if(a<c&&c<b) printf("%d,%d,%d\n",a,c,b); if(b<a&&a<c) printf("%d,%d,%d\n",b,a,c); if(b<c&&c<a) printf("%d,%d,%d\n",b,c,a); if(c<a&&a<b) printf("%d,%d,%d\n",c,a,b); if(c<b&&b<a) printf("%d,%d,%d\n",c,b,a);存在問題嗎?2022/12/134三整數(shù)排序 if(a<b&&b<c)存342022/12/335三整數(shù)排序if(a<=b&&b<=c) printf("%d,%d,%d\n",a,b,c); if(a<=c&&c<=b) printf("%d,%d,%d\n",a,c,b); if(b<=a&&a<=c) printf("%d,%d,%d\n",b,a,c); if(b<=c&&c<=a) printf("%d,%d,%d\n",b,c,a); if(c<=a&&a<=b) printf("%d,%d,%d\n",c,a,b); if(c<=b&&b<=a) printf("%d,%d,%d\n",c,b,a);存在問題嗎?2022/12/135三整數(shù)排序if(a<=b&&b352022/12/336三整數(shù)排序 if(a<=b&&b<=c) printf("%d,%d,%d\n",a,b,c); else if(a<=c&&c<=b) printf("%d,%d,%d\n",a,c,b); else if(b<=a&&a<=c)printf("%d,%d,%d\n",b,a,c); elseif(b<=c&&c<=a)printf("%d,%d,%d\n",b,c,a); else if(c<=a&&a<=b)printf("%d,%d,%d\n",c,a,b); else if(c<=b&&b<=a)printf("%d,%d,%d\n",c,b,a);2022/12/136三整數(shù)排序 if(a<=b&&362022/12/337三整數(shù)排序

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("%d,%d,%d\n",a,b,c);復(fù)合語句2022/12/137三整數(shù)排序if(a>b)復(fù)合372022/12/338三整數(shù)排序min=a; if(b<min)

min=b;

if(c<min)

min=c;

max=a; if(b>max)max=b; if(c>max)max=c;

mid=a+b+c-min-max; printf("%d,%d,%d\n",min,mid,max);很有用的技巧哦:求最大值或最小值2022/12/138三整數(shù)排序min=a;很有用的38在使用if語句中應(yīng)注意的問題:在各種形式的if語句中,在if關(guān)鍵字之后均為表達式。該表達式通常是邏輯表達式或關(guān)系表達式,但也可以是其它任意合法表達式,如賦值表達式等,甚至也可以是一個變量。例如:

if(a=5)語句;if(b)語句;在C中,將非零數(shù)認定為“真”,零認定為“假”。

在使用if語句中應(yīng)注意的問題:39在if語句中,if后的表達式必須用括號括起來,在語句之后必須加分號。在if語句的各種形式中,所有的語句應(yīng)為單個語句,如果要想在滿足條件時執(zhí)行一組(多個)語句,則必須把這一組語句用{}括起來組成一個復(fù)合語句;但要注意的是在}之后不能再加分號。例如:if(a>b){a++;b++;}else{a=0;b=10;}

在if語句中,if后的表達式必須用括號括起來,在語句之后必須40下次上機題目編程,在輸入某人的身高(厘米)和體重(公斤)后,按下面方法確定此人的體重是否標準、過胖或過瘦:1、標準體重=(身高-110)公斤2、過胖:超過標準體重5公斤3、過瘦:低于標準體重5公斤下次上機題目編程,在輸入某人的身高(厘米)和體重(公斤)后,41下次上機題目某郵局對郵寄包裹有如下規(guī)定:若包裹的重量超過30千克,不予郵寄;對可郵寄的包裹每件收取手續(xù)費0.5元,再加上根據(jù)下表按重量weight(單位:千克)計算的郵資,請編程計算任意包裹的郵寄資費。weight<=15.00元1<weight<=5超過1千克的部分每500克2元5<weight<=30超過1千克的部分每500克1元下次上機題目某郵局對郵寄包裹有如下規(guī)定:若包裹的重量超過30422022/12/343上機練習1、已知三邊長,求三角形面積?2、身高預(yù)測據(jù)有關(guān)生理衛(wèi)生知識與數(shù)理統(tǒng)計分析表明,影響小孩成人后身高的因素有遺傳、飲食習慣與堅持體育鍛煉等。小孩成人后的身高與其父母的身高和自身的性別密切相關(guān)。設(shè)faHeight為其父身高,moHeight為其母身高,身高預(yù)測公式為:男性成人時身高=(faHeight+moHeight)*0.54(cm)女性成人時身高=(faHeight*0.923+moHeight)/2(cm)此外,如果喜愛體育鍛煉,那么可增加身高2%,如果有良好的衛(wèi)生飲食習慣,那么可增加身高1.5%。實驗內(nèi)容及提示:編程從鍵盤輸入你的性別(用整型變量sex存儲,輸入數(shù)字0表示女性,輸入數(shù)字1表示男性)、父母身高(用實型變量存儲,faHeight為其父身高,moHeight為其母身高)、是否喜愛體育鍛煉(用字符型變量sports存儲,輸入字符Y表示喜愛,輸入字符N表示不喜愛)、是否有良好的飲食習慣等條件(用字符型變量diet存儲,輸入字符Y表示喜愛,輸入字符N表示不喜愛),利用給定公式和身高預(yù)測方法對你的身高進行預(yù)測。2022/12/143上機練習1、已知三邊長,求三角形面積?432022/12/3443、有一函數(shù):用scanf函數(shù)輸入x的值,求y值。4、給出一個不多于5位的正整數(shù),要求①求出它是幾位數(shù);②分別打印出每一位數(shù)字;③按逆序打印出各位數(shù)字,例如原數(shù)為321,應(yīng)輸出123。x(x<1)2x-1(1≤x<10)3x-11(x≥10)y=2022/12/1443、有一函數(shù):x442022/12/345復(fù)習關(guān)系運算符if語句分支結(jié)構(gòu)程序設(shè)計思想2022/12/11復(fù)習關(guān)系運算符452022/12/346邏輯判斷關(guān)系運算符和關(guān)系表達式> 大于< 小于>= 大于等于<=小于等于== 等于!= 不等于2022/12/12邏輯判斷462022/12/347關(guān)系判斷#include<stdio.h>main(){ intb,c; //整型變量 b=3;c=2; //對變量賦值 printf(“3>2是%d\n”,(b>c));//輸出邏輯值 printf(“3>=2是%d\n”,(b>=c)); printf(“3==2是%d\n”,(b==c)); printf(“3<2是%d\n”,(b<c)); printf(“3!=2是%d\n”,(b!=c));}2022/12/13關(guān)系判斷#include<stdio.472022/12/348

if(表達式)語句;

其語義是:如果表達式的值為真,則執(zhí)行其后的語句,否則不執(zhí)行該語句。如:

if(c<min)min=c;

單分支——選擇結(jié)構(gòu)的一種常用形式2022/12/14if(表達式)單分支——選482022/12/349格式:if(條件)語句1;else語句2;

雙分支——選擇結(jié)構(gòu)的一種最常用形式工作過程圖

:條件2022/12/15格式:if(條件)語句1;雙492022/12/350本節(jié)內(nèi)容邏輯運算符if語句應(yīng)用舉例switch語句及應(yīng)用2022/12/16本節(jié)內(nèi)容邏輯運算符502022/12/351雞兔同籠已知雞和兔的總數(shù)為n,總腿數(shù)為m。輸入n和m,依次輸出雞的數(shù)目和兔的數(shù)目,若無解,則輸出Noanswer!邏輯運算符2022/12/17雞兔同籠邏輯運算符512022/12/352#include<stdio.h>main(){intchick,rabbit,n,m;scanf(“%d%d”,&n,&m);chick=(4*n-m)/2;rabbit=n-chick;

if(m%2==1||a<0||b<0)printf(“Noanswer!\n”);else

printf(“chicks:%d;rabbits:%d\n”,chick,rabbit);

}

必須保證chick和rabbit都是非負整數(shù)!2022/12/18#include<stdio.h>522022/12/353分析:1、先根據(jù)輸入的三邊長,判斷能否構(gòu)成三角形,若能,則轉(zhuǎn)步驟2;若不能,則轉(zhuǎn)步驟3;2、使用海倫公式求三角形面積3、輸出提示:該三角形不存在。輸入三角形的三邊長,求三角形面積。2022/12/19分析:輸入三角形的三邊長,求三角形面積。532022/12/354#include<stdio.h>#include<math.h>main(){floata,b,c,s,area;scanf(“%f%f%f”,&a,&b,&c);

printf(“a=%7.2f,b=%7.2f,c=%7.2f\n”,a,b,c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“area=%7.2f\n”,area);}if((a+b>c)&&(b+c>a)&&(a+c>b))elseprintf(“不能構(gòu)成三角形!\n”);2022/12/110#include<stdio.h>542022/12/355邏輯運算符與表達式關(guān)系表達式只能描述單一條件,例如“x>=0”。如果需要描述“x>=0”、同時“x<10”,就要借助于邏輯表達式了。

2022/12/111邏輯運算符與表達式關(guān)系表達式552022/12/3561、邏輯運算符極其優(yōu)先次序C語言中提供了三種邏輯運算符:&&與運算||或運算!非運算邏輯運算符與表達式2022/12/1121、邏輯運算符極其優(yōu)先次序邏輯運算符562022/12/357邏輯與,運算符為&&

如圖電路A——表示開關(guān)A合上;B——表示開關(guān)B合上;A&&B——表示燈亮;

A B A&&B

1 1 1

1 0 0

0 1 0

0 0 01表示真,0表示假,這是邏輯變量的取值,非真即假2022/12/113邏輯與,運算符為&& A B A572022/12/358邏輯或,運算符為||

如圖電路A——表示開關(guān)A合上;B——表示開關(guān)B合上;A||B——表示燈亮;

A B A||B

1 1 1

1 0 1

0 1 1

0 0 01表示真,0表示假2022/12/114邏輯或,運算符為|| A B A58邏輯非,運算符為!兩隊比賽籃球,變量A表示A隊到場,!A表示A隊不到場,變量B表示B隊到場,!B表示B隊不到場。這場球賽能夠賽成,必須兩隊都到場。假定“能賽成”用邏輯變量C表示,則

C=A&&B賽不成當然用!C表示,讓D=!C,D表示賽不成則

D=!A||!B理解為A不到場或B不到場,球賽均無法進行。邏輯非,運算符為!592022/12/360

?。ǚ牵ǜ撸┧阈g(shù)運算符 關(guān)系運算符 &&|| 賦值運算符 (低)2022/12/116 ?。ǚ牵?0不使用邏輯運算符可否判斷三邊長構(gòu)成三角形?if(a+b>c)if(a+c>b)if(b+c>a){

s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));}if的嵌套不使用邏輯運算符可否判斷三邊長構(gòu)成三角形?if(a+b>c61【例4-1】寫一程序,從鍵盤上輸入某年份year(4位十進制數(shù)),判斷其是否閏年。閏年的條件是:年份能被4整除、但不能被100整除;或者能被400整除。分析:1、從鍵盤輸入任意一年份,類型為十進制整數(shù)2、判斷是否是閏年3、給出結(jié)論:“是”或“否”繼續(xù)對第2步進行任務(wù)細化2.1、判斷該年份數(shù)字能否被4整除,并且不能被100整除若能,則是閏年,程序結(jié)束,否則進入2.22.2、判斷該年份數(shù)字能否被400整除,若能,是閏年,程序結(jié)束,否則不是閏年,程序結(jié)束?!纠?-1】寫一程序,從鍵盤上輸入某年份year(4位十進制62程序優(yōu)化首先將是否閏年的標志leap預(yù)置為0(非閏年),這樣僅當year為閏年時將leap置為1即可。這種處理兩種狀態(tài)值的方法,對優(yōu)化算法和提高程序可讀性非常有效。利用邏輯運算能描述復(fù)雜條件的特點,使用邏輯運算降低if語句的復(fù)雜性,使程序更簡潔

if((year%4==0&&year%100!=0)||(year%400==0))

………………else………………程序優(yōu)化首先將是否閏年的標志leap預(yù)置為0(非閏年),63邏輯表達式的短路計算對于邏輯與運算,例如“a&&b”,若a的邏輯值為“假”,則無須計算b的邏輯值,就可得知表達式“a&&b”的邏輯值為“假”。能被4整除,但是不能被100整除的年份是閏年

(k%4==0)&&(k%100!=0)對于邏輯或運算,例如“a||b”,若a的邏輯值為“真”,則無須計算b的邏輯值,就可得知表達式“a||b”的邏輯值為“真”。因此,對于邏輯表達式,可以進行短路計算,既只計算表達式的部分項。邏輯表達式的短路計算對于邏輯與運算,例如“a&&b”,若64練習設(shè)a=3,b=4,c=5,試計算以下表達式的值a+b>c&&b==ca||b+c&&b–c(!(a+b)+c–1)&&(b+c/2)練習設(shè)a=3,b=4,c=5,試計算以下表達65提出問題:從鍵盤上輸入一個百分制成績score,按下列原則輸出其等級:score≥90,等級為A;80≤score<90,等級為B;70≤score<80,等級為C;60≤score<70,等級為D;score<60,等級為E。若使用if語句如何編程解決?提出問題:從鍵盤上輸入一個百分制成績score,按下列原則66二、switch語句

C語言還提供了另一種用于多分支選擇的switch語句,其一般形式為:

switch(表達式){

case常量表達式1:語句1;

case常量表達式2:語句2;…

case常量表達式n:語句n;

[default:語句n+1;]}[例4.2]二、switch語句C語言還提供了另一種用于多分支選擇的s67main(){inta;printf("inputintegernumber:");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");}}main()68swich語句的語義是:計算switch后的括號內(nèi)的表達式的值;逐個與case后的常量表達式值相比較,

當表達式的值與某個case后的常量表達式的值相等時,即執(zhí)行其后的語句,然后不再進行與case后常量表達式的比較,繼續(xù)執(zhí)行后面所有case常量表達式:后的語句。若表達式的值與所有case后的常量表達式均不相同時,則執(zhí)行default后的語句。swich語句的語義是:69main(){inta;printf("inputintegernumber:");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");}}main()70[例4.3]從鍵盤上輸入一個百分制成績score,按下列原則輸出其等級:score≥90,等級為A;80≤score<90,等級為B;70≤score<80,等級為C;60≤score<70,等級為D;score<60,等級為E。

[例4.3]從鍵盤上輸入一個百分制成績score,按下列原71main()

{intscore,grade;

printf(“Inputascore(0~100):”);

scanf(“%d”,&score);

grade=score/10;//將成績整除10,轉(zhuǎn)化成switch語句中的case標號switch(grade){case10:case9:printf(“grade=A\n”);breakcase8:printf("grade=B\n");break;case7:printf("grade=C\n");break;case6:printf("grade=D\n");break;case5:case4:case3:case2:case1:case0:printf(“grade=E\n”);break;default:printf(“Thescoreisoutofrange!\n”); }

}

main()

{intscore,grade72例4-4已知某公司員工的保底薪水為500,某月所接工程的利潤profit(整數(shù))與利潤提成的關(guān)系如下(計量單位:元):

profit≤1000 沒有提成;1000<profit

≤2000 提成10%;2000<profit≤5000 提成15%;5000<profit≤10000 提成20%;10000<profit 提成25%。為使用switch語句,必須將利潤profit與提成的關(guān)系,轉(zhuǎn)換成某些整數(shù)與提成的關(guān)系。分析本題可知,提成的變化點都是1000的整數(shù)倍(1000、2000、5000、100000)例4-4已知某公司員工的保底薪水為500,某月所接工程的73如果將利潤profit整除1000,則當:

profit≤1000 對應(yīng)0、11000<profit≤2000 對應(yīng)1、22000<profit≤5000 對應(yīng)2、3、4、55000<profit≤10000 對應(yīng)5、6、7、8、9、1010000<profit 對應(yīng)10、11、12、……為解決相鄰兩個區(qū)間的重疊問題,最簡單的方法就是:利潤profit先減1(最小增量),然后再整除1000即可:

profit≤1000 對應(yīng)01000<profit≤2000 對應(yīng)12000<profit≤5000 對應(yīng)2、3、45000<profit≤10000 對應(yīng)5、6、7、8、910000<profit 對應(yīng)10、11、12、……如果將利潤profit整除1000,則當:為解決相鄰兩個區(qū)74main(){longprofit;intgrade;floatcommission,salary=500;printf("Inputprofit:");scanf("%ld",&profit);

grade=(profit–1)/1000;switch(grade){case0:commission=0;break; /*profit≤1000*/case1:commission=profit*0.1;break; /*1000<profit≤2000*/case2:case3:case4:commission=profit*0.15;break; /*2000<profit≤5000*/case5:case6:case7:case8:case9:commission=profit*0.2;break; /*5000<profit≤10000*/default:commission=profit*0.25; /*10000<profit*/}salary+=commission;printf("salary=%.2f\n",salary);}main()752022/12/376三整數(shù)排序輸入3個整數(shù),從小到大排序后輸出。樣例:輸入20733

輸出72033if語句應(yīng)用實例2022/12/132三整數(shù)排序if語句應(yīng)用實例762022/12/377三整數(shù)排序分析

a,b,c三個數(shù)共有6種由大到小排序可能我們用6條if語句實現(xiàn)排序如何?2022/12/133三整數(shù)排序分析772022/12/378三整數(shù)排序

if(a<b&&b<c) printf("%d,%d,%d\n",a,b,c); if(a<c&&c<b) printf("%d,%d,%d\n",a,c,b); if(b<a&&a<c) printf("%d,%d,%d\n",b,a,c); if(b<c&&c<a) printf("%d,%d,%d\n",b,c,a); if(c<a&&a<b) printf("%d,%d,%d\n",c,a,b); if(c<b&&b<a) printf("%d,%d,%d\n",c,b,a);存在問題嗎?2022/12/134三整數(shù)排序 if(a<b&&b<c)存782022/12/379三整數(shù)排序if(a<=b&&b<=c) printf("%d,%d,%d\n",a,b,c); if(a<=c&&c<=b) printf("%d,%d,%d\n",a,c,b); if(b<=a&&a<=c) printf("%d,%d,%d\n",b,a,c); if(b<=c&&c<=a) printf("%d,%d,%d\n",b,c,a); if(c<=a&&a<=b) printf("%d,%d,%d\n",c,a,b); if(c<=b&&b<=a) printf("%d,%d,%d\n",c,b,a);存在問題嗎?2022/12/135三整數(shù)排序if(a<=b&&b792022/12/380三整數(shù)排序 if(a<=b&&b<=c) printf("%d,%d,%d\n",a,b,c); else if(a<=c&&c<=b) printf("%d,%d,%d\n",a,c,b); else if(b<=a&&a<=c)printf("%d,%d,%d\n",b,a,c); elseif(b<=c&&c<=a)printf("%d,%d,%d\n",b,c,a); else if(c<=a&&a<=b)printf("%d,%d,%d\n",c,a,b); else if(c<=b&&b<=a)printf("%d,%d

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論