




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第五章 分支結構程序設計,5.1 關系運算符和表達式 5.2 邏輯運算符和表達式 5.3 邏輯表達式的跳躍 5.4 if語句 5.5 switch語句,5.1 關系表達式,由關系運算符、圓括號把兩個表達式連接起來的式子。 表示條件 若所表示的條件成立、則其值為1(非0)、否則其值為0。 關系運算符:、=、=、!= 例: a=2 、39 、a != ( a=8 ) 、 x+(y=3)=k*z 、(a!=3)(kl),97,8,表達式 值為1,優(yōu)先,成立為1 不成立為0,非=,注意:數(shù)學中多個條件,例 abcd 應表示為 ab a=b=c=0; + +a|+ +b 后a、b值分別為0、6,a=1
2、停止不算,值為 0 賦給a, 停止不算,3、執(zhí)行 int a,b,c;a=b=c= - 1; + +a 后a、b、c值分別為0、-1、0,1,a=0,2,不算,值為0,3,c=0,4,整體為0,例1:,main() char c=k; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf(%d,%dn,!x*!y,!x); printf(%d,%dn,x|i 運行結果:0,0 1,0 0,1,0,X為非0,為非0,后面不算,為0,后面不算,5.4 選擇結構(if 語句),5.4.1 if語句的三種形式 1、第一種形式為基本形式: if if(表達式) 語句
3、語義:如果表達式的值為真,則執(zhí)行其后的語句,否則不執(zhí)行該語句。其過程可表示為下圖。,表達式可以是任意合法表達式,后面不能加;,例2:void main() int a,b,max; printf(n input two numbers: ); scanf(%d %d, 輸入:23 46 輸出:max=46,此語句用于提示輸入,max=23,max=46,例3:void main() int a,b,c,t; printf(n input two numbers: ); scanf(%d %d %d , 輸入:1,6,2 輸出:6 2 1,實現(xiàn)數(shù)的互換,功能:輸入三個數(shù),按照從大到小順序輸出,例
4、4:從鍵盤輸入一個字符,判斷它是否小寫字母。若是,將其轉換成大寫字母,否則不進行轉換,作后輸出該字母。 #include main() char c,a; c=getchar(); if(cz ) a=c; /*判斷非小寫字母情況*/ if(c=a) a=c-32; *判斷是否是小寫字母情況*/ printf(%cn,a); ,main() char c; c=getchar(); if(c=a)a-=32; printf(%cn,a-32);,2、第二種形式為: if-else if(表達式) 語句1; else 語句2; 語義:如果表達式的值為真,則執(zhí)行語句1,否則執(zhí)行語句2 。,后面不能
5、加;,void main() int a, b; printf(input two numbers: ); scanf(%d %d, 輸入:23 46 輸出:max=46,輸入兩個整數(shù),輸出其中大數(shù),例2的改寫,3、第三種形式為if-else-if形式: if(表達式1) 語句1; else if(表達式2) 語句2; else if(表達式3) 語句3; else if(表達式m) 語句m; else 語句n;,語義: 依次判斷表達式的值,當出現(xiàn)某個值為真時,則執(zhí)行其對應的語句。然后跳到整個if語句之外繼續(xù)執(zhí)行程序。 如果所有的表達式均為假,則執(zhí)行語句n。然后繼續(xù)執(zhí)行后續(xù)程序。,后面不能加;
6、,此為真,做語句1,其它語句都不做,上面的語句為以下三種格式: 1、空語句 2、一個語句(不引起轉移) 3、前后加大括號的語句(復合語句),也叫程序段,如: int a; float b; a=3; b=7.0;,;,允許在復合語句前部定義變量,只能在復合語句中使用,int a; a=3; float b; b=7.0;,變量要在最前面定義,不能寫成,#includestdio.h void main() 輸入:A char c; 輸出:This is a capital letter c=getchar(); if(c=0 ,例5,4、在使用if語句中應注意以下問題: 1)在三種形式的if語
7、句中,在if之后均為表達式。 該表達式通常是邏輯表達式或關系表達式, 但也可以是其它表達式,如賦值表達式等,甚至也可以是一個變量。 例如: if(a=5) 語句; if(b) 語句; 都是允許的。只要表達式的值為非0,即為“真”。 如在: if(a=5); 中表達式的值永遠為非0,所以其后的語句總是要執(zhí)行的,當然這種情況在程序中不一定會出現(xiàn),但在語法上是合法的。,又如,有程序段: if(a=b) printf(%d,a); else printf(a=0); 本語句的語義是,把b值賦予a,如為非0則輸出該值,否則輸出“a=0”字符串。這種用法在程序中是經(jīng)常出現(xiàn)的。,=為賦值運算符,比較運算符為
8、=,2)在if語句中,條件判斷表達式必須用括號括起來,在語句之后必須加分號。 3)在if語句的三種形式中,所有的語句應為單個語句,如果要想在滿足條件時執(zhí)行一組(多個)語句,則必須把這一組語句用括起來組成一個復合語句。但要注意的是在之后不能再加分號。 例如: if(ab) a+;b+; else a=0;b=10;,if(ab) a+;b+;; else a=0;b=10;;,不能寫成,5.4.2 條件運算符和條件表達式,在條件語句中,只執(zhí)行單個的賦值語句時,可使用條件表達式來實現(xiàn)。 條件運算符為?和:,它是一個三目運算符,即有三個參與運算的量。 條件表達式的一般形式為: 表達式1? 表達式2
9、: 表達式3 求值規(guī)則為:如果表達式1的值為真,則以表達式2 的值作為條件表達式的值,否則以表達式2的值作為整個條件表達式的值。,非 0,0,例如條件語句: if(ab) max=a; else max=b; 可用條件表達式寫為: max=(ab)?a:b; 執(zhí)行該語句的語義是: 如ab為真,則把a賦予max, 如ab為假,則把b 賦予max。,使用條件表達式時,還應注意以下幾點: 1)條件運算符的運算優(yōu)先級低于關系運算符和 算術運算符,但高于賦值符。 因此:max=(ab)?a:b 可以去掉括號而寫為 max=ab?a:b 2)條件運算符?和:是一對運算符,不能分開 單獨使用。 3)條件運算
10、符的結合方向是自右至左。 例如:ab?a:cd?c:d 應理解為 ab?a:(cd?c:d) 這也就是條件表達式嵌套的情形,即其中的表達式3又是一個條件表達式。,例6:計算,方法一: void main( ) float x,y; scanf (”%f ”, ,表達式,成立值為1,y=x3 ? x*x+2 : 3*x+7*x*x;,例7:從鍵盤輸入任意的兩個實數(shù),按從小到大順序輸出這兩個數(shù),請編程實現(xiàn)。 void main( ) float a,b; scanf (”%f%f ”,代替,復合語句可以定義變量,a=a+b;b=a-b;a=a-b t=a;a=b;b=t,例8:P105 5.5 計
11、算,方法一: main( ) float x,y; scanf (”%f ”,1=x scanf (”%f ”, , 、 可省略,y= x1? x :( x10 ? 2*x-1 : 3*x-11);,(、)可省略,方法三:,if (x10) if (x1) y=x; else y=2*x-1; else y=3*x-11;, 后不能加;, 、 和 (、) 可一起省略,y= x10? ( x1 ? x :2*x-1 ): 3*x-11;,若上面分段函數(shù)改為 則程序改為 void main( ) float x,y; scanf (”%f ”, ,此語句出錯與否都輸出,此程序有否缺陷?,程序應改為
12、 void main( ) float x,y; scanf (”%f ”,5.4.3 if語句的嵌套,當if語句中的執(zhí)行語句又是if語句時,則構成了if 語句嵌套的情形。 其一般形式可表示如下: if(表達式) 或 if(表達式) if語句; if語句; else if語句; 在嵌套內的if語句可能又是if-else型的,這將會出現(xiàn)多個if和多個else重疊的情況,這時要特別注意if和else的配對問題。,加;,如:,if(表達式1) if(表達式2) 語句1; else 語句2; 其中的else究竟是與哪一個if配對呢? 是if(表達式1) 還是 if(表達式1) if(表達式2) if(
13、表達式2) 語句1; 語句1; else else 語句2; 語句2; 注意:if 與else的配對關系 else 總是與它前面最近的if配對,因此對上述例子應按前一種情況理解。,例10:寫出下面兩程序的輸出結果,1 void main( ) int x=2,y=-1,z=2; if ( xy ) if ( y0 ) z=0; else z=1; printf (”%dn”,z); 結果:,一個語句,2,void main( ) int a=1,b=3,c=5,d=4; if ( ab ) if ( cd ) x=1; else if ( ac ) if ( bd ) x=2; else x=
14、3; else x=6; else x=7; printf (”%dn”,x); 結果:,2,為了使邏輯關系清晰:(1)按下面所示書寫程序:,void main( ) int a=1,b=3,c=5,d=4; if ( ab ) if ( cd ) x=1; else if ( ac ) if ( bd ) x=2; else x=3; else x=6; else x=7; printf (”%dn”,x); ,(2)適當?shù)丶哟罄ㄌ枺?x=-3; if (x0) y=1; printf (”x0,y=%dn”,y); 把上面與下面比較 x=-3; if (x=0) if (x0) y=1;p
15、rintf (”x0,y=%dn”,y); else y=-1;printf (”x0,y=%dn”,y);,結果:x0,y=-1,無結果,例11: void main() int a,b; printf(please input A,B: ); scanf(%d%d, 輸入: 輸出:,if(a!=b) if(ab) printf(ABn); else printf(ABn); else printf(A=Bn);,23 46,AB,例12:輸入一年份,判別是否閏年。,year被4整除,真,真,真,真,假,假,假,假,year被100整除,leap=0,leap=1,leap=1,leap=0
16、,leap,year被400整除,輸出閏年,輸出非閏年,void main() int year,leap; scanf(“%d”, ,根據(jù)leap輸出結果,5.5 switch語句(另一種分支語句),5.5.1 格式:switch(任意類型表達式) case 常量表達式1: 語句1; case 常量表達式2: 語句2; case 常量表達式n: 語句n; default: 語句n+1; 注:常量表達式中運算對象只能為常量或符號常量(整型或字符型),各個值必須互不相同 default 允許出現(xiàn)在前面或中間 switch(任意類型表達式) 后不帶分號,不要忘 記空格,不帶;,5.5.2 功能:若
17、switch后面表達式值的整數(shù)(字符常量)部分與某個case后面表達式值相等,則就執(zhí)行該case后面的語句,否則就執(zhí)行default后面的語句,例13:,void main() int a; printf(input integer number: ); scanf(%d, ,輸入:3,輸出: Wednesda Thursday Friday Saturday Sunday error,“case 常量表達式”相當于一個語句標號, 表達式的值和某標號相等則轉向該標號執(zhí)行,但不能在執(zhí)行完該標號的語句后自動跳出整個switch 語句,所以出現(xiàn)了繼續(xù)執(zhí)行所有后面case語句的情況。,5.5.3 br
18、eak語句:專用于跳出switch語句,在每一case語句之后增加break 語句, 使每一次執(zhí)行之后均可跳出switch語句,從而避免輸出不應有的結果。 void main() switch (a) 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; case 7:pri
19、ntf(Sundayn);break; default:printf(errorn); ,Switch語句常用形式:,switch (任意類型表達式) case 整型或字符型常量表達式1 :語句1; break; case 整型或字符型常量表達式2 :語句2; break; case 整型或字符型常量表達式n:語句n; break; default : 語句n+1; ,default后面不加 break,在使用switch語句時還應注意以下幾點:,1)case后的各常量表達式的值不能相同,否則會出現(xiàn)錯誤。 2)case后,允許有多個語句,可以不用括起來。 3)case和default子句的先后
20、順序可以變動,而不會影響程序執(zhí)行結果。 4)default子句可以省略不用。,例14:若有宏定義:#define k 2 和定義:float w; int a=2,b; 則合法的switch語句是 Aswitch (w) Bswitch (a+b) case 1.0:printf(”*n”); case 1 printf(”*n”); case 2.0:printf(”*n”); case a printf(”*n”): Cswitch (w+1.76) Dswitch (a) ; case k-1 :printf(”*n”); case 1: printf(”*n”);default : p
21、rintf(”n”); case 2:printf(”*n”); case 1+2:printf(”*n”); default : printf(”n”);,C,不能為實型,不能為變量,少;,不能加分號,例15:P105,先接收從鍵盤輸入的一個等級制成績,然后輸出對應的百分制成績。轉換規(guī)則如下: A:85100 B :7084 C :6069 D 60,void main( ) char grade; scanf(“%c”, ,例16:先接收從鍵盤輸入的一個百分制成績,然后輸出對應的五分制成績。轉換規(guī)則如下: 90100 A 8089 B 7079 C 6069 D 60 E,void mai
22、n( ) int cj; printf(”Input a integer number(0-100)n”); scanf(“%d”, ,90100 A 8089 B 7079 C 6069 D 60 E,例17:計算器程序。用戶輸入運算數(shù)和四則運算符,輸出計算結果。,void main() float a,b; char c; printf(input expression: a+(-,*,/)b n); scanf(%f%c%f, ,字符相當于整數(shù),輸入:11 + 13 輸出:25.000000,本例可用于四則運算求值。switch語句用于判斷運算符,然后輸出運算值。當輸入運算符不是+,-,
23、*,/時給出錯誤提示。,例18:求方程ax2+bx+c=0的兩個實根 #include void main( ) double a,b,c,x1,x2,disc; scanf (”%lf%lf%lf ”, ,b*b-4*a*c0, 有解,題目改為:求二次方程ax2+bx+c=0的兩個根,a!=0, 一定有解 要認真分析題目,達到題目要求,void main( ) double a,b,c,x1,x2,disc,p,q; scanf (”%lf,%lf,%lf”, ,例19:輸入某年某月某日,判斷這一天是這一年的第幾天,需考慮閏年的情形。 注:符合以下條件之一是閏年: 能被4整除,但不能被100整
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工簽員工合同范本
- 倆兄弟合伙開店合同范本
- 與他人合伙經(jīng)營合同范本
- 共享汽車租車合同范本
- 冷鏈購銷合同范本
- 合伙出資金合同范本
- 員工協(xié)議簡易合同范本
- 合同范本水印有問題
- 共同建房合同范本
- 廠房質押合同范本
- 小學生人際交往能力培養(yǎng)的實踐研究
- 綜合與實踐 白晝時長規(guī)律的探究說課稿 2024-2025學年人教版數(shù)學七年級下冊
- 江蘇省南京市2024年中考英語試題(含解析)
- 2025年匯成集團招聘筆試參考題庫含答案解析
- 《礦山機械》課件
- 湖南長沙自貿投資發(fā)展集團有限公司招聘筆試沖刺題2024
- 課題申報書:湖北教育援疆在文化潤疆中的作用發(fā)揮研究
- 電力安全工作規(guī)程考試試題題庫
- 2024年抗菌藥物培訓試題及答案
- UL1026標準中文版-2019家用電飯煲和食品服務用具第六版
- 《佛跳墻英文介紹》課件
評論
0/150
提交評論