第04章 選擇結構程序設計(培訓)ppt課件_第1頁
第04章 選擇結構程序設計(培訓)ppt課件_第2頁
第04章 選擇結構程序設計(培訓)ppt課件_第3頁
第04章 選擇結構程序設計(培訓)ppt課件_第4頁
第04章 選擇結構程序設計(培訓)ppt課件_第5頁
已閱讀5頁,還剩57頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、4.1關系運算和邏輯運算4.2 if語句和if語句構成的選擇結構4.3 條件表達式構成的選擇結構第四章 選擇結構程序設計 4.4 switch語句 4.4 goto語句4.1.1、C語言的邏輯值 關系表達式和邏輯表達式的運算結果會得到一個邏輯值。邏輯值只有兩個,分別用“真”和“假”表示,C語言中沒有專門的“邏輯值”,在表示邏輯表達式或關系結果是,以數值1代表“真”,0代表“假”,但在判斷一個量是否為“真”時,以0代表“假”,以非0(不論正負)代表真。4.1.2、關系運算符和關系表達式關系運算:比較運算,比較兩個操作數,看是否滿足給定的關系。1、關系運算符(6種):小于 ,53, 35=:小于等

2、于,5=3,3:大于,53,35=:大于等于,5 =3,3 =5 ,與數學上()不同=:等于,5=3 ,與數學上(=)不同!=:不等于,5!=3 ,與數學上()不同2、關系表達式和關系表達式的值用關系運算符將表達式連接起來的式子優先級 =高 低= !=結合方向自左向右表達式的值關系成立,即為真,結果為1;關系不成立,即為假,結果為0;算術運算符高 低C語言中,真:非0值,假:0值 如:ab,a+bc-d,(a=3)=b,(ab)= =(bc)例如,假設num1=3,num2=4,num3=5,則: (1)num1num2的值為?。 (2)(num1num2)!=num3的值為? 。 (3)nu

3、m1num2num3的值為?。 思考題:任意改變num1或num2的值,會影響整個表達式的值嗎?為什么? (4)(num1num2)+num3的值為? 6.因為num1=0) & (x10) ,(x5) ,! (x= =0),例如:1.假設 int a=5; float b=3.5;!a0!b0a&b1a|b1 !a&!b 04、注意在邏輯表達式的求解中,并不是所有的邏輯運算符都被執行,只是在必須執行下一個邏輯運算符才能求出表達式的解時,才執行該運算符。例2-7:a=0; b=1; c=2; d=a+&b+&- -c;d=(a+)&(b+)&(- -c);運算結果: d=0,a=1,b=1,c

4、=2(1)a & b & c求解方法:只有a為真(非0),才需要判斷b的值,只有a和b都為真,才需要判斷c的值。只要a為假,就不必判斷b和c,運算立即中止。(2)a | b | c求解方法:只要a為真(非0),就不必判斷b和c;只有a 為假,才判斷b;a和b都為假,才判斷c。例2-8:a=0; b=1; c=2; d=a+|b+|- -c; d=(a+)|(b+)|(- -c); 運算結果: d=1,a=1,b=2,c=2 以下的條件如何使用c語言的邏輯和關系表達式表述:1.0 x0&x5&x%7!=0y1&yb)&!c|1c.a&b d.a|(b+b)&(c-a)A國家等級考試練習2.有以下

5、程序main()int a,b,d=25; a=d/10%9; b=a&(-1) printf(“%d,%dn”,a,b);程序運行后的輸出結果是:a.1 2 3 b.2 3 4 c.2 2 3 d.2 3 3 D4.已定義“char ch=“$”;int i=1,j;”,執行“j=!ch&i+以后,i的值為5.以下程序運行后的結果是main() int a,b,c; a=10;b=20; c=(a%b1); printf(“%d %d %dn”,a,b,c);6.在C語言中,邏輯“真”等價于下面哪一項a.整數1 b.True c.非0數 d.任意常數110 20 0C7.有以下程序:main

6、() int a=1,b=2,m=0,n=0,k; k=(n=ba)|(m=a0解題的步驟:輸入xx0是 y=3-xy=2/x否 輸出y的值 C語言用來設計條件選擇結構程序的選擇語句有兩種: if語句、switch語句。 4.2 if語句 1、單分支選擇if語句if語句有三種形式:單分支選擇if語句、雙分支面具選擇if語句、多分支選擇if語句。 語句形式: if (表達式) 語句 語句執行流程: 表達式語句真(非0)假(0)4.2.1 if語句的三種形式例4-1:從鍵盤輸入兩個整數a和b,如果a大于b則交換兩數,最后輸出兩個數。 #include 輸入a,bab交換a、b輸出結束真假 void

7、 main() int a,b,t; scanf(%d,%d,&a,&b); if(ab) t=a;a=b;b=t; printf(a=%d,b=%dn,a,b); 注意: (1)if語句自動結合一個語句,當滿足條件需要執行多個語句時,應用一對大括號將需要執行的多個語句括起,形成一個復合語句。 (2)if語句中表達式形式很靈活,可以是常量、變量、任何類型表達式、函數、指針等。只要表達式的值為非零值,條件就為真,反之條件為假。 2、雙分支選擇if語句語句形式:if (表達式) 語句1else 語句2 語句執行流程: 表達式語句1真(非0)假(0)語句2例4-2 輸入兩個整數,輸出其中較大的數。

8、#include #include void main()int x,y,max; scanf(%d,%d,&x,&y); if(xy) max=x; else max=y; printf(max=%dn,max); 輸入x,yxymax=x輸出最大值結束真假max=y注意if和else語句之間只能有一個語句,當ifelse之間的語句不只一句時,應用一對將語句括起。 if(ab) a+;b+;else a=0;b=10; if(ab) a+;b+;else a=0;b=10;3、多分支選擇if語句語句形式:if (表達式1) 語句1else if (表達式2)語句2 else if (表達式n

9、)語句n else 語句n+1else子句可以省略語句執行流程: 表達式1語句1真(非0)假(0)語句2表達式2真(非0)表達式2語句n語句n+1假(0)假(0)例4-3:計算分段函數。假輸入xX=1真X10y=3/(x-10)y=2xy=x+5假真#include void main()float x,y; printf(enter x:);scanf( %f ,&x);if (x=1) y=x+5; else if (x10) y=3/(x-10);else printf(“not definen”); printf(x=%.2f,y=%.2fn,x,y); 計算分段函數程序語句含義:語句

10、形式: 當if語句中又包含若干個if語句時,則構成了if 語句嵌套的情形。4.2.2 if語句的嵌套if ( 表達式1) if ( 表達式2) 語句1 if ( 表達式1) if ( 表達式2) 語句1 else 語句2if ( 表達式1) if ( 表達式2) 語句1 else 語句2if ( 表達式1) if ( 表達式2) 語句1 else 語句2else 語句3if ( 表達式1) if ( 表達式2) 語句1 else 語句2else if(表達式3) 語句3 else 語句4 語句執行流程: else與if的配對原則: 就近一致原則: else與同一層最接近它,而又沒有其它else

11、語句與之相匹配的if語句配對。真(非0)語句2假(0)表達式2語句1語句4假(0)真(非0)表達式1假(0)真(非0)表達式3語句3建議:對于嵌套的if語句最好使用“”擴起來同時采用代碼縮進的形式書寫國家級等級考試練習:1.設變量x和y均已正確定義并賦值,以下的if語句中,在編譯時將產生錯誤信息的是a.if(x+); b.if(xy&y!=0);c.if(xy) x- d.if(y0) ; else y+; else x+;2.在嵌套使用if語句時,C語言規定else總是a.和之前與具有相同縮進位置的if配對b.和之前與其最近的if配對c.和之前與其最近的且不帶else的if配對d.和之前的第

12、一個if配對CC3.有以下程序程序:main()int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3;printf(“%d,%d,%d,%dn”,a,b,c,d);程序輸出的結果是a.0,1,2,0 b.0,0,0,3 c.1,1,2,0 d.編譯有錯D4.設有變量a、b、c、d和y都已正確并賦值,若有以下if語句:if(ab) if(c=d) y=0; else y=1;該語句所表示的含義是a.y=0 a=bb.y=0 a=b且c!=dc.y=0 ab且c=d1 ab且c!=dd.y=0 ab且c=d1 c!=dC5.有以下程序運行后的輸出結果是mai

13、n() int a=3,b=4,c=5,t=99; if(ba&ac) t=a; a=c; c=t; if(ac&bb) if(bc) printf(“%d”,d+ + 1); else printf(“%d”,+d + 1); printf(“%dn”,d);程序運行后的結果是a.2 b.3 c.43 d.44A4.3、條件運算符與條件表達式有兩個符號:?、:,它與三個操作數組成三元運算。一般形式: ? :求值規則和表達式的值:求解表達式1真(非0)求解表達式2假(0)求解表達式3表達式的值優先級:算術關系邏輯 條件 賦值結合性: 自右至左例: int max,a=5;b=3; max=ab

14、?a:b-a=b+ ? a+ : b+ y = x10 ? x/10 : x0 ? x: -x;1.有以下計算公式y=(x=0)(x=0) y=sqrt(x); b.y=sqrt(x); else y=sqrt(-x); if(x=0) y=sqrt(x); y=sqrt(x=0?x:-x); if(x0) b.(x-y0) c.(x-y0) d.x-y=0C3.設有條件表達式“(EXP)?i+:j+”,則以下表達式中與“(EXP)”完全等價的是_a.(EXP=0) b.(EXP!=0) c.(EXP=1) d.(EXP!=1)B4.有以下程序段:int k=0,a=1,b=2,c=3;k=a

15、c?c:k;執行該程序后,k的值是a.3 b.2 c.1 d.0B5.若整型變量a,b,c,d中的值依次為1,4,3,2,則條件表達式ab?a:cb?(ac?a:c):(b);a.5 b.4 c.6 d.不確定C形式:逗號表達式1,逗號表達式2,逗號表達式n 求值規則:從左至右依次計算各表達式的值優先級所有運算符里最低 結合性:自左至右 表達式的值最后一個表達式的值。逗號運算符與逗號表達式例: a b y 逗號表達式 y=a=4,b=5,a+b; 4 5 4 9 y=(a=4,b=5,a+b); 4 5 9 9 y=(a=4,b=5),a+b; 4 5 5 9 y=a=(4,b=5),a+b;

16、 5 5 5 104.4 switch語句1、語句形式: switch (表達式) case 常量表達式1: 語句1; case 常量表達式2: 語句2; case 常量表達式3: 語句3; . case 常量表達式n: 語句n; default : 語句n+1; 根據表達式的不同值,選擇不同的程序分支,又稱開關語句。數值型或字符型常量表達式的值必須互不相同,否則執行時將出現矛盾,即同一個開關值,將對應多種執行方案。千萬不能接(;)號2、語句執行流程:指語句的最后一條是否為break簡單語句或復合語句breakbreak有無break有無有計算表達式常量1常量2常量n=語句1=語句2語句n其它

17、=語句n+1無值case語句出現的次序并不影響執行結果。例4-4:假設用0、1、2.6分別表示星期日、星期一.星期六。現輸入一個數字,輸出對應的星期幾的英文單詞。如果輸入3,輸出“Wednesday”。 #include stdio.hvoid main()int n;scanf(%d,&n);switch(n)case 0: printf(Sundayn);case 1: printf(Mondayn);case 2: printf(Tuesdayn);case 3: printf(Wednesdayn);case 4: printf(Thursdayn);case 5: printf(Fr

18、idayn);case 6: printf(Saturdayn);default: printf(Error);程序運行情況如下:3Wednesday ThursdayFridaySaturdayerror在“switch”語句中,“case 常量表達式”只相當于一個語句標號,表達式的值和某標號相等則轉向該標號執行,但不能在執行完該標號的語句后自動跳出整個switch 語句,因此會繼續執行所有后面語句的情況。 為此,語言提供了一種break語句,其功能是可以跳出它所在的switch語句。將上面的例4-4修改如下:#include stdio.hvoid main()int n;scanf(%d

19、,&n);switch(n)case 0: printf(Sundayn); break;case 1: printf(Mondayn); break;case 2: printf(Tuesdayn); break;case 3: printf(Wednesdayn); break;case 4: printf(Thursdayn); break;case 5: printf(Fridayn); break;case 6: printf(Saturdayn); break;default: printf(Error);程序運行情況如下:3Wednesday 3、說明多個case語句可以共用一組

20、執行語句。 switch(grade) case 10: case 9: case 8:printf(“A);break; default:printf(“B);各case和default子句的先后順序可以變動,而不會影響程序執行結果。 default語句可以省略不用。case和default與其后面的常量表達式間至少有一個空格。switch語句可以嵌套,break語句只跳出它所在的switch語句。 例4-5 企業發放的獎金根據利潤提成。從鍵盤輸入當月利潤,求應發放獎金總數? 利潤xx=1010 x2020 x4040 x6060 x1001000) case 1:switch(b0) ca

21、se 1:printf(“”);break; case 2:printf(“!”);break; case 0:switch(c=5) case 0:printf(“*”);break; case 1:printf(“#”);break; case 2:printf(“$”);break; default:printf(“&”);printf(“n”);#&4.5 語句標號和goto語句1.語句標號標號可以是任意的合法的標識符,當在標識符后面加一個冒號,如:flag1: stop0: ,該標識符就成了一個語句標號。2.goto語句goto語句稱為無條件轉向語句,一般形式如下:goto 語句標號;作用:把程序的執行流程轉向語句標號所在的位置,這個語句標號必須與此goto語句同在一個函數之內。例如: i=1; sum: i=i+1; if(i5) goto sum;printf(“%d”,i);選擇結構程序設計舉例 例4-7 將任意三個整數按從大到小的順序輸出。 #include stdio.hvoid main()int x,y,z,t;scanf

溫馨提示

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

評論

0/150

提交評論