五章選擇結構程序設計ppt課件_第1頁
五章選擇結構程序設計ppt課件_第2頁
五章選擇結構程序設計ppt課件_第3頁
五章選擇結構程序設計ppt課件_第4頁
五章選擇結構程序設計ppt課件_第5頁
已閱讀5頁,還剩38頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、東北師范大學計算機學院 2008年秋季學期第五章第五章 選擇構造程序設計選擇構造程序設計主要內容主要內容:(1)關系運算關系運算(2)邏輯運算邏輯運算(3)if語句的構造語句的構造(4)switch語句的構造語句的構造(5)運用兩種選擇構造處理實踐問題運用兩種選擇構造處理實踐問題東北師范大學計算機學院 2008年秋季學期Professional WordsSelection structure 選擇構造選擇構造 Arithmetic operator 算術運算符算術運算符Relational operator 關系運算符關系運算符Logical operator 邏輯運算符邏輯運算符neste

2、d 嵌嵌套套priority 優先優先級級東北師范大學計算機學院 2008年秋季學期 選擇構造的作用:根據指定的條件能否選擇構造的作用:根據指定的條件能否滿足,決議從給定的兩組或多組操作中滿足,決議從給定的兩組或多組操作中選擇其一。實現方法主要有兩種:選擇其一。實現方法主要有兩種:if elseswitch東北師范大學計算機學院 2008年秋季學期一、關系運算符和關系表達式一、關系運算符和關系表達式(Relational opertor & expression) (Relational opertor & expression) 1、關系運算符、關系運算符 比較大小的運算稱為

3、關系運算,是邏輯運算的比較大小的運算稱為關系運算,是邏輯運算的一種。一種。C言語提供了六種關系運算,分為兩個言語提供了六種關系運算,分為兩個優先級。優先級。,=, 優先級高優先級高=,!= , 優先級低優先級低關系運算的優先級低于算術運算,高于賦值運算關系運算的優先級低于算術運算,高于賦值運算ab+3a=b=3 等效于等效于a=b=3a=b3 等效于等效于a=(b3)東北師范大學計算機學院 2008年秋季學期2、關系表達式、關系表達式 由關系運算符將兩個表達式銜接起來的由關系運算符將兩個表達式銜接起來的式子稱為關系表達式,關系表達式的值式子稱為關系表達式,關系表達式的值為為“真或真或“假,假,

4、C C言語沒有邏輯型數據,言語沒有邏輯型數據,所以用非所以用非0 0表示真,用表示真,用0 0表示假。但關系表示假。但關系表達式的前往值只需表達式的前往值只需0 0或或1 1 關系表達式滿足左結合性關系表達式滿足左結合性,a=5,b=4,c=3, ,a=5,b=4,c=3, abc=? abc=? 0東北師范大學計算機學院 2008年秋季學期二、邏輯運算符和邏輯表達式二、邏輯運算符和邏輯表達式(Logical operator & expression) (Logical operator & expression) 1、邏輯運算符、邏輯運算符&,|,!單目運算符單目運

5、算符Unary優先級:!優先級:!&| 已學過的四類運算符之間的關系已學過的四類運算符之間的關系!算術運算符算術運算符關系運算符關系運算符&|賦值運算符賦值運算符 東北師范大學計算機學院 2008年秋季學期三種邏輯運算符的真值表三種邏輯運算符的真值表 aba&ba|b!a真真真真真真真真假假真真假假假假真真假假假假真真假假真真真真假假假假假假假假真真東北師范大學計算機學院 2008年秋季學期三種邏輯運算符的真值表三種邏輯運算符的真值表 aba&ba|b!a真真1真真1真真1真真1假假0真真1假假0假假0真真1假假0假假0真真1假假0真真1真真1假假0假假0假假0

6、假假0真真1東北師范大學計算機學院 2008年秋季學期三種邏輯運算符的真值表三種邏輯運算符的真值表 aba&ba|b!a11110100100101100001東北師范大學計算機學院 2008年秋季學期2、邏輯表達式、邏輯表達式 邏輯表達式的結果用邏輯表達式的結果用0或或1表示,但在判表示,但在判別一個量的真假時,用別一個量的真假時,用0表示假,用非表示假,用非0表示真。表示真。C言語在求解邏輯表達式時,并言語在求解邏輯表達式時,并不是一切的邏輯運算符都被執行,只需不是一切的邏輯運算符都被執行,只需在必需執行的情況下才執行該運算符在必需執行的情況下才執行該運算符 & 當當為假時

7、,不再求為假時,不再求的值的值東北師范大學計算機學院 2008年秋季學期m=ab&(n=cd) a=1,b=2,c=3,d=4, m,n的原值為的原值為1 執行后執行后m的值為的值為0,n的值依然為的值依然為1,由于該表達,由于該表達式沒有被求解式沒有被求解 例,判別一個年份是不是閏年,當例,判別一個年份是不是閏年,當year能被能被4整整除,但不能被除,但不能被100整除,或能被整除,或能被400整除,那么整除,那么為閏年為閏年year %4=0&year %100!=0|year %400=0(year %4=0&year %100!=0)|year %400=0東

8、北師范大學計算機學院 2008年秋季學期三、三、if語句語句1、if語句的三種方式語句的三種方式 if (表達式表達式) 語句語句 if (表達式表達式) 語句語句1 else 語句語句2 if (表達式表達式1) 語句語句1 else if (表達式表達式2) 語句語句2 else if (表達式表達式m) 語句語句m else 語句語句n東北師范大學計算機學院 2008年秋季學期例,輸入例,輸入3個數個數a,b,c,按由小到大的順序輸出按由小到大的順序輸出 main()int a,b,c,temp;scanf(“%d%d%d,&a,&b,&c);if (ab)tem

9、p=a;a=b;b=temp;if (ac)temp=a;a=c;c=temp;if (bc)temp=b;b=c;c=temp;printf(“%d,%d,%d,a,b,c);東北師范大學計算機學院 2008年秋季學期2、if語句嵌套語句嵌套(nested)if else 語句,語句中可以嵌套語句,語句中可以嵌套if語句,語句,else與離與離它最近的它最近的if 配對配對例,求例,求sign函數函數 main() float x; int y; scanf(“%d,&x); if (x0) y=1; else if (x=0) y=0; else y=-1; printf(“%f,

10、%d,x,y); x=0 x=0) if (x0) y=1; else y=0;else y=-1;printf(“%f,%d,x,y);x=0 xb?a:cb?(a=100): ( b=100) ab?printf(“%d,a):printf(“%d,b); 表達式表達式2和表達式和表達式3的類型可以不同,向的類型可以不同,向高級別的轉換高級別的轉換 xy?1:1.5 當當xy時,結果為時,結果為1.0東北師范大學計算機學院 2008年秋季學期 例,輸入一個字符,判別它能否為大寫例,輸入一個字符,判別它能否為大寫字母,假設是大寫字母,那么轉換為小字母,假設是大寫字母,那么轉換為小寫字母輸出,

11、否那么原樣輸出。寫字母輸出,否那么原樣輸出。 main()char ch;scanf(%c,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(“%c,ch);東北師范大學計算機學院 2008年秋季學期闡明闡明條件運算符一定程度上可替代條件運算符一定程度上可替代ifelse語句語句當條件復雜時當條件復雜時,最好不用這種構造最好不用這種構造,不便于不便于了解程序了解程序東北師范大學計算機學院 2008年秋季學期練練 習習1.表示表示x在在1,8之內為真時的表達式之內為真時的表達式_2.int a=2,b=2,c=3,表達式表達式a|a-b&!c的值

12、的值_3.以下程序段的輸出結果為以下程序段的輸出結果為:_int a=5,x=6;if(x=a) printf(“1:%dn,x);else printf(“2:%dn,x);東北師范大學計算機學院 2008年秋季學期4.以下程序段的功能是判別三角形是等邊以下程序段的功能是判別三角形是等邊,等腰還是普等腰還是普通三角形通三角形,或者不能構成三角形,將程序填充完好或者不能構成三角形,將程序填充完好.main() int a,b,c; scanf(“%d%d%d,&a,&b,&c); if _ /能構成三角形能構成三角形 if _ printf(“等邊等邊n); else

13、if _ printf(“等腰等腰n); else printf(“能構成三角形能構成三角形n); else printf(“不能構成三角形不能構成三角形n);東北師范大學計算機學院 2008年秋季學期四、四、switch語句語句當分支數較多時,用當分支數較多時,用switch語句語句1 switch語句的普通方式語句的普通方式switch 表達式表達式case 常量表達式常量表達式1:語句:語句1;case 常量表達式常量表達式2:語句:語句2; case 常量表達式常量表達式n:語句:語句n;default: 語句語句n+1;東北師范大學計算機學院 2008年秋季學期2、有關、有關swit

14、ch語句的闡明語句的闡明 1switch后的表達式可以是任何類型后的表達式可以是任何類型 2當表達式的值與某一當表達式的值與某一case后的常量表達后的常量表達式的值一樣時,那么執行其后的語句,假設與式的值一樣時,那么執行其后的語句,假設與一切的一切的case后的值都不同,那么執行后的值都不同,那么執行 default后后的語句的語句 3各個各個case的值互不一樣;多個的值互不一樣;多個case可以可以對應一個語句對應一個語句 4執行某個執行某個case后,接著執行下一個后,接著執行下一個case而不再進展判別,所以要加而不再進展判別,所以要加break跳出跳出switch東北師范大學計算機

15、學院 2008年秋季學期五、五、 程序舉例程序舉例例例1,按照考試成果等級打印出百分制分數段,按照考試成果等級打印出百分制分數段,可以用可以用switch語句來實現語句來實現switchgradecase A:printf(“85100n); case B:printf(“7084n); case C:printf(“6069n); case D:printf(“60n); break;case D:printf(“60n); break;default: printf(“errorn); 東北師范大學計算機學院 2008年秋季學期例例3 3,寫一程序,判別某一年能否閏年,寫一程序,判別某一年

16、能否閏年 main() main() int year,leap;int year,leap;if (year %4=0&year%100!=0|year %400=0) if (year %4=0&year%100!=0|year %400=0) leap=1;leap=1;else leap=0;else leap=0;if (leap=1)if (leap=1)printf(printf(“%d year is leap%d year is leap,year);,year);else else printf(printf(“%d year is not leap%d y

17、ear is not leap,year);,year); 東北師范大學計算機學院 2008年秋季學期 例例4 4,求,求ax2+bx+c=0ax2+bx+c=0方程的解方程的解 main()main()float a,b,c,d,p,q,x1,x2;float a,b,c,d,p,q,x1,x2;scanf(%f%f%f,&a,&b,&c);scanf(%f%f%f,&a,&b,&c);if (fabs(a)=1e-6)if (fabs(a)=1e-6) printf(is not a quadraticn); printf(is not a

18、quadraticn);elseelsed=bd=b* *b-4b-4* *a a* *c;c;p=-b/(2p=-b/(2* *a);a);if (fabs(d)=1e-6)if (fabs(d)1e-6) x1=p+sqrt(d)/(2*a); x2=p-sqrt(d)/(2*a);printf(has two distinct real roots:%8.2f,%8.2fn,x1,x2); elseq=sqrt(-d)/(2*a);printf(has complex roots:n);printf(%8.2f+%8.2fin,p,q);printf(%8.2f-%8.2fin,p,q)

19、;東北師范大學計算機學院 2008年秋季學期例例5,運輸公司對用戶計算運費,路程,運輸公司對用戶計算運費,路程S越遠,每越遠,每公里運費越低,規范如下:公里運費越低,規范如下:s250Km 沒有折扣沒有折扣250=s500 2%折扣折扣500=s1000 5%折扣折扣1000=s2000 8%折扣折扣2000=s3000 10%折扣折扣3000=3000) c=12;else c=s/250;switch(c)case 0:d=0;break;case 1:d=0.02;break;case 2:case 3:d=0.05;break;東北師范大學計算機學院 2008年秋季學期case 4:c

20、ase 5:case 6:case 7:d=0.08;break;case 8:case 9:case 10:case 11:d=0.1;break;case 12:d=0.15;break;f=p*w*s*(1-d);printf(“s=%d,d=%f,f=%f,s,d,f);東北師范大學計算機學院 2008年秋季學期練習練習1.以下程序段執行后,以下程序段執行后,a的值是多少?的值是多少?int x=5,y=5,z=10,a;switch(x=y)case 1: if (yz) a=1; else a=2; case 2: switch(z) case 10: a+=10; break;

21、case 11: a+=20; case 0: a*=10;東北師范大學計算機學院 2008年秋季學期2. 編寫一程序,根據輸入的年份和月編寫一程序,根據輸入的年份和月份,計算該月有多少天?份,計算該月有多少天?3.輸入一個日期,計算該日期是今年輸入一個日期,計算該日期是今年2021的第幾天?的第幾天?4.輸入某一年的輸入某一年的1月月1日是星期幾日是星期幾,然后然后再輸入一個日期再輸入一個日期,計算這一天是星期計算這一天是星期幾幾?(學完第六章以后學完第六章以后,會有更好的處理方會有更好的處理方案案)東北師范大學計算機學院 2008年秋季學期5. 接受一個字符,例如用接受一個字符,例如用“+

22、表示加法,表示加法,用用“表示減法。接受表示減法。接受num1 和和num2 兩個數。假設輸入的字符為兩個數。假設輸入的字符為“+,那么,那么將這兩個數相加并顯示相應的結果。假將這兩個數相加并顯示相應的結果。假設輸入的字符為設輸入的字符為“,那么將這兩個數,那么將這兩個數相減并顯示相應的值。要求完成相減并顯示相應的值。要求完成+,-,*,/四四種運算。種運算。6.編寫一個程序,從用戶輸入的三個數中編寫一個程序,從用戶輸入的三個數中找到最大值,并將該最大值輸出。找到最大值,并將該最大值輸出。東北師范大學計算機學院 2008年秋季學期2代碼代碼:#include #includevoid main

23、()int year,month,days;scanf(%d%d,&year,&month);switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:days=31;break;東北師范大學計算機學院 2008年秋季學期case 2: if(year%4=0&year%100!=0|year%400=0) days=29;else days=28;break;case 4:case 6:case 9:case 11:days=30;break;default: printf(input is err

24、or!n);exit(0); printf(days:%dn,days);東北師范大學計算機學院 2008年秋季學期3代碼代碼:void main()int year,month,day,days;scanf(%d%d%d,&year,&month,&day);switch(month)case 1:days=day;break;case 2:days=31+day;break;case 3:days=31+28+day;break;case 4:days=31+28+31+day;break;case 5:days=31+28+31+30+day;break;case

25、 6:days=31+28+31+30+31+day;break;case 7:days=31+28+31+30+31+30+day;break;東北師范大學計算機學院 2008年秋季學期case 8:days=31+28+31+30+31+30+31+day;break;case 9:days=31+28+31+30+31+30+31+31+day;break;case 10:days=31+28+31+30+31+30+31+31+30+day;break;case 11: days=31+28+31+30+31+30+31+31+30+31+day;break;case 12: days

26、=31+28+31+30+31+30+31+31+30+31+30+day;break;default: printf(input is error!n);exit(0); if(year%4=0&year%100!=0|year%400=0)&month2) days+;printf(days=%dn,days);東北師范大學計算機學院 2008年秋季學期4代碼代碼:#include #includevoid main()int year,month,day,week,week1,days;scanf(%d%d%d%d,&year,&month,&day,&week);switch(month)case 1:days=day;break;case 2:days=31+day;break;case 3:days=31+28+day;break;case 4:days=31+28+31+day;break;case 5:days=31+28+31+30+day;break;ca

溫馨提示

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

評論

0/150

提交評論