




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、選擇結(jié)構(gòu)程序設(shè)計理論和要求關(guān)系運算符和關(guān)系表達(dá)式邏輯運算符和邏輯表達(dá)式if語句switch語句回顧printf() 和 scanf() 函數(shù)屬于格式輸入輸出函數(shù)getchar() 和 putchar() 函數(shù)用來輸入輸出單個字符的函數(shù)賦值語句的概念和作用順序結(jié)構(gòu)編程思想目標(biāo) 熟練使用關(guān)系運算符熟練使用邏輯運算符掌握簡單的條件語句的使用熟練使用多重 if 結(jié)構(gòu)熟練使用printf和scanf函數(shù)熟練使用嵌套 if 結(jié)構(gòu)熟練使用 switch 結(jié)構(gòu)理解條件運算符的用法一、關(guān)系運算符和關(guān)系表達(dá)式符號種類: = !=結(jié)合方向:自左向右優(yōu)先級別:關(guān)系表達(dá)式的值:是邏輯值“真”或“假”, 用1和0表示例
2、ca+b /c(a+b) ab!=c /(ab)!=c a=bc /a=(bc /a=(bc)例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc= =!=優(yōu)先級6(高)優(yōu)先級7(低)/表達(dá)式值1/表達(dá)式值1/表達(dá)式值0/d=1/f=0返回運算符的優(yōu)先級 優(yōu)先級運算符1()函數(shù)運算符, 數(shù)組運算符, 2! , ,+,- ,*(間接運算符),&(地址運算符) size of, +(單目),- (單目)3*(乘法),/,% 4+,-56,= size of:給出它右邊的操作數(shù)的字節(jié)大小。優(yōu)先級運算符7 =,!= 8&(按位AND) 9 10| 11& 12|13?
3、:14=,+=,-=,*=,/=,%=,&=,=,|=,= 15,練習(xí)1,假設(shè)num1=3,num2=4,num3=5,則: (1)num1num2的值。 (2)(num1num2)!=num3的值。 (3)num1num2num3的值。=0=1=1二、邏輯運算符和邏輯表達(dá)式ab!a!ba&ba|b真假真假假假真真c語言 運算量: 0表示“假”,非0表示“真” 運算結(jié)果: 0表示“假”,1表示“真”假假真真假假真真真假假假真假真真邏輯運算符 !& |運算優(yōu)先級 !& |返回注意:關(guān)于True和False請記住,0被視為false,其他任何值都被視為true,包括負(fù)數(shù)。 ! (2)& (11)|
4、 (12)高低! : 從右向左&: 從左向右| : 從左向右例 a=x & xb & xy a=b | x=y !a | ab 53 & 80 ? 1:(xb ? a:cd ? c:d ab ? a:(cd ? c:d)expr1、expr2、expr3類型可不同,表達(dá)式值取較高的類型例 if (ab) printf(“%d”,a); else printf(“%d”,b);printf(“%d”,ab?a:b);返回例 x?a:b /x=0,表達(dá)式值為b; x0,表達(dá)式值為a xy?1:1.5 /xy ,值為1.0; x0?a+b:a-b);例 (a=b)?Y:N (x%2=1)?1:0 (
5、x=0)?x:-x (c=a & c=A & chy) printf(“%d”,x);exprstatement1statement2非0=0 形式二:格式:if (expression) statement1 else statement2執(zhí)行過程:例:if(xy) max=x; else max=y;四、選擇結(jié)構(gòu)程序設(shè)計if語句(條件選擇語句)if語句的三種形式 形式一: 格式:if(expression) Statement 執(zhí)行過程: 形式三:格式:if ( expr1 ) statement1else if (expr2 ) statement2else if (expr3 ) st
6、atement3. else statement n expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0例:if (salary1000) index=0.4; else if (salary800) index=0.3; else if (salary600) index=0.2; else if (salary400) index=0.1; else index=0; 執(zhí)行過程:如:if(a=b&x=y) printf(“a=b,x=y”); if(3) printf(“OK”); if(a) printf(“%d
7、”,a);說明:if后面的表達(dá)式類型任意語句可以是復(fù)合語句 if(x) if(x!=0) if(!x) if(x=0)例5.1 考慮下面程序的輸出結(jié)果: #include main() int x,y; scanf(“%d,%d”,&x,&y); if(xy) x=y; y=x; else x+; y+; printf(“%d,%dn”,x,y);Compile Error!if語句嵌套:一般形式:if (expr1) if (expr2) statement1 else statement2else if(expr3) statement3 else statement4內(nèi)嵌if內(nèi)嵌ifif
8、 (expr1) if (expr2) statement1 else statement2內(nèi)嵌ifif (expr1) if (expr2) statement1else statement3 內(nèi)嵌ifif (expr1) statement1else if(expr3) statement3 else statement4內(nèi)嵌ifif (expr2) statement1例 輸入兩數(shù)并判斷其大小關(guān)系/*ch5_2.c*/#include main() int x,y; printf(Enter integer x,y:); scanf(%d,%d,&x,&y); if(x!=y) if(x
9、y) printf(XYn); else printf(XYn); else printf(X=Yn);運行:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Yif else 配對原則:缺省 時,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”);實現(xiàn)if els
10、e 正確配對方法:加 main() int x=100,a=10,b=20; int v1=5,v2=0; if(ab) if(b!=15) if(!v1) x=1; else if(v2) x=10; x=-1; printf(“%d”,x);結(jié)果:-1例5.3 考慮下面程序輸出結(jié)果:例5.4 有一函數(shù)y=1 (x0)編一程序,輸入一個x值,輸出y值。有以下幾種寫法,請判斷哪些是正確的?main ( ) int x, y;scanf(d, &x); if (x0) y= 1;else if (x= =0) y=0; else y=1; printf (x=%d, y=%dn, x, y);x
11、=0Ny=-1Yx0y=1YNy=0程序2:if (x=0) if (x0) y=1; else y=0; else y= 1;語句改為: x!=0Ny=0Yx0y=1Y程序3:y=-1錯誤!y= 1; if (x! =0) if (x0) y=1; else y=0;語句改為: x=0Ny=-1Yx0y=1Y程序4:y=0錯誤!y=0; if (x=0) if (x0) y=1;else y= 1;例 鍵盤輸入三個數(shù),并取出最大值。/*功能:說明if 語句的格式。*/ main()int num1,num2,num3,max;printf(Please input three numbers
12、:);scanf(%d,%d,%d,&num1,&num2,&num3); if (num1num2) max=num1;else max=num2;if (num3max) max=num3;printf(The three numbers are:%d,%d,%dn,num1,num2,num3);printf(max=%dn,max);程序運行情況如下: 本案例中的第1個if語句,可優(yōu)化為如下不帶else子句的形式: 這種優(yōu)化形式的基本思想是:首先取一個數(shù)預(yù)置為max(最大值),然后再用max依次與其余的數(shù)逐個比較,如果發(fā)現(xiàn)有比max大的,就用它給max重新賦值,比較完所有的數(shù)后,max
13、中的數(shù)就是最大值。這種方法,對從3個或3個以上的數(shù)中找最大值的處理,非常有效。請各位仔細(xì)體會。Please input three numbers:11,22,18The three numbers are:11,22,18max=22max=num1;if(num2max) max=num2;例輸入任意三個數(shù)num1、num2、num3,按從小到大的順序排序輸出。main()int num1,num2,num3,temp; printf(Please input three numbers:); scanf(%d,%d,%d,&num1,&num2,&num3); if (num1num2)
14、 temp=num1;num1=num2;num2=temp; if (num2num3) temp=num2;num2=num3;num3=temp; if (num1num2) temp=num1;num1=num2;num2=temp; printf(Three numbers after sorted: %d,%d,%dn,num1,num2,num3); 1if語句的一般格式 if(表達(dá)式) 語句組1; else 語句組2; (1)if語句中的“表達(dá)式”必須用“(”和“)”括起來。(2)else子句(可選)是if語句的一部分,必須與if配對使用,不能單獨使用。(3)當(dāng)if和else下
15、面的語句組,僅由一條語句構(gòu)成時,也可不使用復(fù)合語句形式(即去掉花括號)。 2if語句的執(zhí)行過程(1)缺省else子句時 當(dāng)“表達(dá)式”的值不等于0(即判定為“邏輯真”)時,則執(zhí)行語句組1,否則直接轉(zhuǎn)向執(zhí)行下一條。如圖P45,要點:(2)指定else子句時當(dāng)“表達(dá)式”的值不等于0(即判定為“邏輯真”)時,則執(zhí)行語句組1,然后轉(zhuǎn)向下一條語句;否則,執(zhí)行語句組2。如圖4-1(b)所示。 3if語句的嵌套與嵌套匹配原則 if語句允許嵌套。所謂if語句的嵌套是指,在“語句組1”或(和)“語句組2”中,又包含有if語句的情況。 if語句嵌套時,else子句與if的匹配原則:與在它上面、距它最近、且尚未匹配的
16、if配對。為明確匹配關(guān)系,避免匹配錯誤,強烈建議:將內(nèi)嵌的if語句,一律用花括號括起來。案例5.7 寫一程序,從鍵盤上輸入1年份year(4位十進(jìn)制數(shù)),判斷其是否閏年。閏年的條件是:能被4整除、但不能被100整除,或者能被400整除。算法設(shè)計要點:如果能被整除,則余數(shù)為,即如果的值等于,則表示能被整除!首先將是否閏年的標(biāo)志leap預(yù)置為0(非閏年),這樣僅當(dāng)year為閏年時將leap置為1即可。這種處理兩種狀態(tài)值的方法,對優(yōu)化算法和提高程序可讀性非常有效,請讀者仔細(xì)體會。參考程序如下:/*功能:說明if語句的嵌套格式和用法。*/ 設(shè)用變量year表示年號,leap為待置值變量,當(dāng)year為閏
17、年:leap1, 否則leap0。輸入yearyear%4=0year%100=0leap0leap1yesANoNoyes流程圖leap%400=0leap1leap=0打印非閏年打印是閏年結(jié)束leap0yesNoyesNoA3. 程序1:main ( )int year, leap;scanf(%d, &year);if (year%4= =0)if (year%100= =0)if (year%400= =0) leap=1;elseleap=0; else leap=1;else leap=0;if (leap) printf(%d is, year);else printf(%d i
18、s not, year); printf (a leap yearn); main()int year,leap=0;/* leap=0:預(yù)置為非閏年*/printf(Please input the year:);scanf(%d,&year);if (year % 4=0) if (year % 100 != 0) leap=1;else if (year%400=0) leap=1; if (leap) printf(%d is a leap year.n,year);else printf(%d is not a leap year.n,year);3. 程序2: 當(dāng)(year%4!=
19、0) (year%100= =0& year%400!=0) 為1時, year為非潤年。設(shè)用變量year表示年號 當(dāng)(year%4= =0 & year% 100 !=0) year%400= =0)為1時,year為潤年,否則為非潤年。如果要判別非潤年可在上述表達(dá)式前加非(!)運算符。 當(dāng)!( (year%4= =0 & year%100!=0) year% 400= = 0) 為1時,year為非潤年?;蛘?即:則:1.設(shè)a=3,b=4,c=5,則邏輯表達(dá)式!(a+b)+c-1 & b+c/2的值為 0B. 1 C. 2 D. -1 2.設(shè)有說明語句int x,a,b,c;則以下不合法的
20、if語句是 。A if(a= =b) x+; B if(a=b) x+;C if(ab) x+; D if(a=b) x+;四、switch語句(開關(guān)分支語句)一般形式:switch( 表達(dá)式) case E1: 語句組 1; break; case E2: 語句組 2; break; . case En: 語句組 n; break; default: 語句組 ; 執(zhí)行過程:breakbreakbreakdefaultswitch表達(dá)式語句組1語句組2語句組語句組.E 1E 2Endefaultcase1、一般形式:返回2、執(zhí)行過程(1)當(dāng)switch后面“表達(dá)式”的值,與某個case后面的“
21、常量表達(dá)式”的值相同時,就執(zhí)行該case后面的語句(組);當(dāng)執(zhí)行到break語句時,跳出switch語句,轉(zhuǎn)向執(zhí)行switch語句的下一條。(2)如果沒有任何一個case后面的“常量表達(dá)式”的值,與“表達(dá)式”的值匹配,則執(zhí)行default 后面的語句(組)。然后,再執(zhí)行switch語句的下一條。3、說明(1)switch后面的“表達(dá)式”,可以是int、char和枚舉型中的一種(有限的個數(shù))。(2)每個case后面“常量表達(dá)式”的值,必須各不相同,否則會出現(xiàn)相互矛盾的現(xiàn)象(即對表達(dá)式的同一值,有兩種或兩種以上的執(zhí)行方案)。(3)case后面的常量表達(dá)式僅起語句標(biāo)號作用,并不進(jìn)行條件判斷。系統(tǒng)一旦
22、找到入口標(biāo)號,就從此標(biāo)號開始執(zhí)行,不再進(jìn)行標(biāo)號判斷,所以必須加上break語句,以便結(jié)束switch語句。(4)各case及default子句的先后次序,不影響程序執(zhí)行結(jié)果。(5)多個case子句,可共用同一語句(組)。例如,在案例4.5中的“case 10: ”和“case 9: ”共用語句“printf(grade=An); break;”,“case 5: ”“case 0: ”共用語句“printf(grade=En); break;”。(6)用switch語句實現(xiàn)的多分支結(jié)構(gòu)程序,完全可以用if語句或if語句的嵌套來實現(xiàn)。如: case A: case B: case C: prin
23、tf(“score60n”); break; .說明:E1,E2,En是常量表達(dá)式,且值必須互不相同case語句標(biāo)號作用,必須用break跳出case后可包含多個可執(zhí)行語句,且不必加 switch可嵌套,break只能跳出一層嵌套多個case可共用一組執(zhí)行語句default可放在任意case后,相當(dāng)case作用,default不要再加break。總結(jié): 1、常表值必須互不相等,否則二異性。2、case順序無關(guān)緊要。3、不一定非用break不可,有時幾種情況合并執(zhí)行一組語句。switch(score) case 5: printf(“Very good!”); case 4: printf(“G
24、ood!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); 運行結(jié)果:score為5時,輸出: Very good! Good! Pass! Fail! data error!例5.8void main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(“na=
25、%d,b=%d”,a,b); 運行結(jié)果:a=2,b=1例 其語義是:計算表達(dá)式的值,并逐個與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個常量表達(dá)式的值相等時,即執(zhí)行其后的語句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有case后的語句。如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時,則執(zhí)行default后的語句。/*ch5_10.c*/#include main() int c; printf(Enter m or n or h or other:); c=getchar(); switch(c) case m: printf(nGood morning!n);break; case n: pri
26、ntf(nGood night!n); break; case h: printf(nHello!n); break; default : printf(n?n); break; 例 根據(jù)輸入字母輸出字符串。返回程序舉例案例 求一元二次方程ax2+bx+c=0的解(a0)。分析:真a=0假輸出“非二次方程”真b*b-4*a*c=0假輸出二個相等實根:-b/2ab*b-4*a*c0計算復(fù)根的實部和虛部:實部p=-b/2a虛部輸出兩個實根輸出兩個復(fù)根p+qi; p-qi#include main()float a,b,c,disc,x1,x2,p,q;scanf(%f,%f,%f, &a, &b,
27、 &c);printf(The equation );if( fabs(a) = 1e-6 )printf(is not quadratic );elsedisc = b*b-4*a*c;if ( fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(x1=%7.2f,x2=%7.2fn, x1, x2);elsep=-b/(2*a);q=sqrt(fabs(disc)/(2*a);printf(x1=%7.2f + %7.2f in, p, q);printf(x2=%7.2f - %7.2f in,
28、 p, q);案例5.12 已知某公司員工的保底薪水為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)。如果將利潤profit整除1000后再取整,則當(dāng): profit 1
29、000 對應(yīng)0 1000 profit 2000 對應(yīng)1 2000 profit 5000 對應(yīng)2、3、4 5000 profit 10000 對應(yīng)5、6、7、8、910000 profit 對應(yīng)10、11、12、main()long profit;int grade; float salary=500; printf(Input profit: ); scanf(%ld, &profit); grade= profit / 1000;switch(grade) case 0: break; case 1: salary += profit*0.1; break; case 2: case 3: case 4: salary += p
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度專業(yè)瑜伽私教定制合同范本
- 二零二五年度頂管施工安全協(xié)議與安全風(fēng)險評估執(zhí)行合同
- 二零二五年度快速招聘委托代理合同模板
- 二零二五年度股份轉(zhuǎn)讓項目盡職調(diào)查及報告服務(wù)協(xié)議
- 產(chǎn)品推廣中介服務(wù)協(xié)議
- 2025年度智能交通系統(tǒng)研發(fā)團(tuán)隊勞動合同樣本
- 客廳共享協(xié)議
- 二零二五年度宅基地買賣合同終止及后續(xù)處理協(xié)議
- 二手樂器評估協(xié)議
- 共享室友協(xié)議
- 2025年黑龍江農(nóng)墾職業(yè)學(xué)院單招職業(yè)傾向性測試題庫完整
- 2025年黑龍江旅游職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫附答案
- 《多彩的節(jié)日民俗》(教學(xué)設(shè)計)浙教版四年級下冊綜合實踐活動
- 2025年黃河水利職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫新版
- 2025年健康咨詢管理服務(wù)合同范文
- 光學(xué)鏡片透光率測量基準(zhǔn)
- 歷史-貴州省貴陽市2025年高三年級適應(yīng)性考試(一)(貴陽一模)試題和答案
- 2025年01月2025全國婦聯(lián)所屬在京事業(yè)單位公開招聘93人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 輻射安全管理測試題含答案
- 2025年北京社會管理職業(yè)學(xué)院高職單招高職單招英語2016-2024年參考題庫含答案解析
- 信息系統(tǒng)項目計劃書
評論
0/150
提交評論