版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第5章 選擇結(jié)構(gòu)程序設計v 關(guān)系運算符和關(guān)系表達式關(guān)系運算符和關(guān)系表達式v 邏輯運算符和邏輯表達式邏輯運算符和邏輯表達式v ifif語句語句v switchswitch語句語句v 程序舉例程序舉例引例:1/x 1/x 當當x0 x0時時 10000 10000 當當x=0 x=0時時y=y= 選擇結(jié)構(gòu)是3種基本結(jié)構(gòu)之一,經(jīng)常牽涉到:根據(jù)所指定的條件是否相同,從兩組(或多組)操作中選擇其一。 要考慮兩個方面的問題:1、C語言中如何表示條件? 一般用關(guān)系表達式或邏輯表達式2、C語言中實現(xiàn)選擇結(jié)構(gòu)用什么語句?用if語句或switch語句。if(x!=0) y=1/x;if(x!=0) y=1/x;e
2、lse y=10000;else y=10000;此處:用if語句來表示選擇結(jié)構(gòu) 用一個關(guān)系表達式x!=0來表示條件5.1 關(guān)系運算符和表達式1 1、關(guān)系運算: 實質(zhì)是兩個量“比較運算”。2、關(guān)系運算符 : 種類:6種 = !=結(jié)合方向:自左向右優(yōu)先級別:前4種優(yōu)先級相同,高于后2種 由高到低:算術(shù)運算關(guān)系運算賦值運算=!=優(yōu)先級6(高)優(yōu)先級7(低)例例 ca+b c(a+b)ca+b c(a+b) ab!=c (ab)!=c ab!=c (ab)!=c a=bc a=(bc) a=bc a=(bc a=(bc) a=bc a=(bc)算術(shù)運算符算術(shù)運算符賦值運算符賦值運算符關(guān)系運算符關(guān)系運
3、算符高高低低/表達式值1/表達式值1/表達式值0/ab值為1,所以d=1/ab為1, abc為0,所以f=0例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc3、關(guān)系表達式:用用關(guān)系運算符關(guān)系運算符將將兩個表達式兩個表達式連接起來式子。連接起來式子。4 4、關(guān)系表達式的值:是邏輯值“真”或“假”,用1和0表示1 結(jié)果為真 (關(guān)系成立)0 結(jié)果為假 (關(guān)系不成立)注意:其中“= =”表示相等,而 “=”表示賦值(1)關(guān)系運算符左右兩邊類型不一致,自動進行類型轉(zhuǎn)換,轉(zhuǎn)換成兩邊的類型相同,然后進行比較。 例如:若a=0,b=0.5,轉(zhuǎn)換成a=0.0,則 a=b的值
4、為1 (2) 應避免對實數(shù)作相等或不等的判斷,而只能使用“”,原因在于舍入誤差可能造成兩個邏輯上應該相等的數(shù)不相等。 例如:如果x、y均為實數(shù),要避免使用 x=y 應使用 fabs(x-y)b&bc+3 x=( (!a)b)&(b(c+3)x= !ab&bc+3 x=( (!a)b)&(b(c+3) )2、邏輯表達式和邏輯表達式的值(1)邏輯表達式:用邏輯運算符將關(guān)系表達式、邏輯量連接起來的式子。 例如: !a&bxy & c(2)邏輯表達式的值:1或0,表示邏輯值“真”或“假”例 a=4;b=5; !a a&b a|b !a|b 4&a
5、mp;0|2 53&83)&(8b)&(n=cd) 判斷m,n的值 :結(jié)果m=0,n=1,表達式為0例如: a&b&c 當a=0(假)時, b,c不需判斷。 當a=1,b=0, c不需判斷。例如: a b c 當a=1時, b, c均不必判別。1&0邏輯值為083邏輯值為1(53)&(8y) printf( %d, x) ;形式1: if(表達式) 語句5.3 if語句(三種形式三種形式)表達式語句非0=01.if語句的三種基本形式表達式的值:1 結(jié)果為真 (條件成立)0 結(jié)果為假 (條件不成立)例2 輸入兩個實數(shù),按其值由小到大次序輸出
6、這兩個數(shù)。表達式表達式語句語句非0=0 main( ) float a, b, t; scanf (%f, %f, &a, &b); if (ab) t=a; a=b; b=t; printf (%5.2f, %5.2f, a, b); 形式1: if(表達式) 語句1.if語句的三種基本形式例例3 輸入三個數(shù),按從小到大的順序輸出。輸入三個數(shù),按從小到大的順序輸出。 表達式表達式語句語句非0=0main ( )float a, b, c,t; scanf(“ %f,%f,%f”, &a, &b,&c); if (ab) t=a; a=b; b=t; i
7、f (ac) t=a; a=c; c=t; if (bc) t=b; b=c; c=t; printf(%5.2f, %5.2f, %5.2f, a, b, c);形式形式1: if(表達式表達式) 語句語句1.if語句的三種基本形式例如例如: if(xy) printf(%d, x);else printf( %d, y);表達式表達式語句語句1語句語句2非0=0執(zhí)行過程執(zhí)行過程: 當表達式當表達式值值為非為非0, 執(zhí)行語句執(zhí)行語句1; 當當表達式表達式值值為為0, 執(zhí)行語句執(zhí)行語句2。形式形式2: if(表達式表達式) 語句語句1 else 語句語句21.if語句的三種基本形式表達式表達式
8、語句語句1語句語句2非0=0例4 輸入一個數(shù),判斷它是否能被3整除。 若能,則打印“YES”, 否則,打印“NO”。形式形式2: if(表達式表達式) 語句語句1 else 語句語句2 main( ) int n; printf(“input n: ”); scanf(“%d”,&n); if (n%3=0) printf(“YESn”); else printf(“NOn”);1.if語句的三種基本形式執(zhí)行過程執(zhí)行過程: :從上向下逐一對從上向下逐一對if后面的表達式進行檢測。后面的表達式進行檢測。當某一個表達式的值為非當某一個表達式的值為非0時,就執(zhí)行與此有關(guān)的子句中的時,就執(zhí)行與
9、此有關(guān)的子句中的語句,其余部分就被越過去。語句,其余部分就被越過去。如果所有表達式的值都是如果所有表達式的值都是0,則執(zhí)行最后的,則執(zhí)行最后的else子句;子句;1) 如果沒有最后的那個如果沒有最后的那個else子句,那么,將不進行任何操作。子句,那么,將不進行任何操作。形式形式3:3:ifif(表達式表達式1) 語句語句1 else if (表達式表達式2) 語句語句2 else if (表達式表達式3) 語句語句3 else if(表達式表達式n) 語句語句n else 語句語句n+11.if語句的三種基本形式0表達式表達式1 表達式表達式2 表達式表達式n語句語句n+100語句語句n 語
10、句語句2 語句語句1 非非0 非非0 非非0 形式形式3:3:ifif(表達式表達式1) 語句語句1 else if (表達式表達式2) 語句語句2 else if (表達式表達式3) 語句語句3 else if(表達式表達式n) 語句語句n else 語句語句n+1例如:例如:if (number500) cost=0.15;else if (number300) cost=0.10;else if (number100) cost=0.075;else if (number50) cost=0.05;else costcost=0;0表達式表達式1 表達式表達式2 表達式表達式n語句語句n
11、+100語句語句n 語句語句2 語句語句1 非非0 非非0 非非0 1.if語句的三種基本形式形式形式3:if(表達式表達式1) 語句語句1 else if (表達式表達式2) 語句語句2 else if (表達式表達式3) 語句語句3 else if(表達式表達式n) 語句語句n else 語句語句n+1例例5:輸入一個學生成績,輸入一個學生成績,當成績當成績90時,輸出時,輸出 verygood,當當80成績成績90時時, 輸出輸出 good, 當當60成績成績80時時, 輸出輸出pass, 當成績當成績=90) printf(“very good);else if (score=80)
12、printf(“good);else if (score=60) printf(“pass);else printf(“fail);1.if語句的三種基本形式0表達式表達式1 表達式表達式2 表達式表達式n語句語句n+100語句語句n 語句語句2 語句語句1 非非0 非非0 非非0 例例6:輸入一個字符,請:輸入一個字符,請判斷是字母、數(shù)字還判斷是字母、數(shù)字還是特殊字符。是特殊字符。#include main( ) char ch; printf(Please input a character:n); ch=getchar( ); if(ch=a&ch=A&ch=0&
13、chb) if (3) if (a+88) 1. 表達式可以是邏輯表達式、關(guān)系表達式、算術(shù)表達式。表達式可以是邏輯表達式、關(guān)系表達式、算術(shù)表達式。 2. 語句必須以分號結(jié)束。語句必須以分號結(jié)束。 3. 若語句不止一條若語句不止一條,則必須用則必須用 括起來。在括起來。在 外不加分外不加分號。號。注意的問題注意的問題5.3 if語句語句2、if語句的嵌套語句的嵌套: 在在if語句中語句中, 又又包含一個或多個包含一個或多個if語句語句。if (表達式1) if (表達式2) 語句1 else 語句2else if(表達式3) 語句3 else 語句4內(nèi)嵌if內(nèi)嵌ifif (表達式1) if (表
14、達式2) 語句1 else 語句2內(nèi)嵌ifif (表達式1) if (表達式2) 語句1else 語句3 內(nèi)嵌ifif (表達式1) 語句1else if(表達式3) 語句3 else 語句4內(nèi)嵌if5.3 5.3 ifif語句(語句(三種形式三種形式)2、if語句的嵌套語句的嵌套if (表達式1) if (表達式2) 語句1else 語句3 內(nèi)嵌ifif else 配對原則:配對原則:缺省缺省 時,時,else總是和它上面離它總是和它上面離它最近最近的未配對的的未配對的if 配對。配對。if()if()if()else.else.else.if (表達式1) if (表達式2) 語句1els
15、e 語句3 內(nèi)嵌if如果沒有如果沒有 時的配對時的配對2、if語句的嵌套語句的嵌套if else 配對原則配對原則修改:修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);實現(xiàn)實現(xiàn)if else 正確配對方法:必要時,加正確配對方法:必要時,加 例例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);例例7 7 有一函數(shù)有一函數(shù): :y=1 (x0)編一程序,輸入一個編一程序,輸入一個x值,輸出值,輸出 y 值。值。有以下幾種寫法,請判斷哪些是正確有以下幾種寫法,請判斷哪
16、些是正確的?的?2、if語句的嵌套語句的嵌套程序程序2:將程序:將程序1的的if語句改為:語句改為: main ( ) int x, y; scanf(d, &x); if (x=0) if (x0) y=1; else y=0; else y=-1; printf (x=%d, y=%dn, x, y);程序程序1: main ( ) int x, y; scanf(d, &x); if (x=0) if(x0) y=1; else y=-1; printf(x=%d,y=%dn,x,y); 程序程序3:將程序?qū)⒊绦?的的if語句改為語句改為main( ) int x,y;
17、scanf(%d,&x); y=-1; if(x!=0) if(x0) y=1; else y=0; printf(x=%d,y=%dn,x,y);2、if語句的嵌套語句的嵌套y= 0 (x0)1. 程序程序1 和程序和程序2 是正確的。是正確的。 它們代表的函數(shù)為它們代表的函數(shù)為:2. 程序程序3 和程序和程序4 是錯誤的。是錯誤的。 它們代表的函數(shù)為它們代表的函數(shù)為:y= 0 (x0)y=1 (x0)結(jié)論:結(jié)論:5.3 if語句語句 C語言提供了一個簡單的條件賦值語句或條件表達式。語言提供了一個簡單的條件賦值語句或條件表達式。問題問題: 當判斷條件不論是當判斷條件不論是“真真”是是
18、“ 假假”, 均給同一變量賦值均給同一變量賦值時時簡化條件語句簡化條件語句 運算符書寫方式:運算符書寫方式: ? : 屬三目運算符。屬三目運算符。3、條件運算符、條件運算符5.3 if語句語句執(zhí)行過程執(zhí)行過程: 先求解表達式先求解表達式1, 若非若非0(真真),則值為表達式則值為表達式2的值的值, 否則,為表達式否則,為表達式3的值。的值。一般形式:一般形式:表達式表達式1 ? 表達式表達式2 : 表達式表達式3例如:例如:max=ab? a:b;當當ab, max a; 否則否則, maxb3、條件運算符、條件運算符表達式表達式1取取表達式表達式2值值取取表達式表達式3值值非0=05.3 i
19、f語句語句注意注意:條件運算符條件運算符優(yōu)先于優(yōu)先于賦值運算符。賦值運算符。 例如例如: max=(ab? a:b) 可去掉可去掉( )條件運算符條件運算符低于低于關(guān)系運算符和算術(shù)運算符。關(guān)系運算符和算術(shù)運算符。 例如例如: max=ab? a:b+1max= ab? a:(b+1) 而不是而不是 max=(ab? a:b)+1條件運算符結(jié)合性為條件運算符結(jié)合性為從右至左從右至左。 例如例如: ab? a:cd ? c:d 相當于相當于 ab? a:(cd? c:d)條件表達式不能取代一般的條件表達式不能取代一般的if語句語句,只有當只有當if 的兩的兩 個分支為個分支為給給同一變量同一變量賦
20、值時才可替代賦值時才可替代if. 例如例如:求求 y=a+|b| printf(“y=%dn”,b0?a+b:a-b);表達式表達式1、表達式、表達式2、表達式、表達式3的類型可以不同。的類型可以不同。 例如例如: xy? 1 : 1.53、條件運算符、條件運算符5.3 if語句語句3、條件運算符、條件運算符例例8 輸入一個字符,判別它是否大寫字母輸入一個字符,判別它是否大寫字母。 如果是,將它轉(zhuǎn)換成小寫字母;如果是,將它轉(zhuǎn)換成小寫字母; 如果不是,不轉(zhuǎn)換。如果不是,不轉(zhuǎn)換。 然后輸出最后得到的字符。然后輸出最后得到的字符。main ( ) char ch; scanf (%c, &c
21、h); ch=(ch=A & ch=Z ? (ch+32):ch; printf(%c, ch) 5.3 if語句語句switchswitch語句是語句是多分支選擇語句多分支選擇語句,也叫,也叫開關(guān)語句開關(guān)語句一般形式:一般形式: switch (表達式表達式) case常量表達式常量表達式1:語句語句 1 break; case常量表達式常量表達式2: 語句語句 2 break; case常量表達式常量表達式n:語句語句 n break; default: 語句語句 n+1 5.4 switch語句語句switch表達式語句1語句2語句n語句n+1式 1式2式ndefaultcase
22、 執(zhí)行過程:執(zhí)行過程:當表達式的值與某一個當表達式的值與某一個 case 后面的常量表達式后面的常量表達式的值相等時,就執(zhí)行的值相等時,就執(zhí)行此此 case 后面的語句。后面的語句。若所有的若所有的 case 中中的常量表達式的值都沒有與表達式的值匹配,則執(zhí)行的常量表達式的值都沒有與表達式的值匹配,則執(zhí)行 default 后面的語句。后面的語句。 例例9 9 根據(jù)成績等級,打印出成績范圍。根據(jù)成績等級,打印出成績范圍。5.4 switch語句語句main( ) char grade; printf(Enter your graden); scanf(%c,&grade); switch
23、(grade) case A: printf(“90100n); break; case B: printf(“8089n); break; case C: printf(“7079n); break; case D: printf(6069 n); break; case E: printf(60n); break; default: printf(errorn); 沒有沒有breakbreak將是將是錯誤的。錯誤的。例如輸入例如輸入B B,打,打印出:印出:80897079606960error注意注意:case:case常量表達式只起語句標號作用常量表達式只起語句標號作用; ; 必須用必
24、須用breakbreak語句終止多個語句終止多個casecase連續(xù)執(zhí)行,否則只要有一連續(xù)執(zhí)行,否則只要有一個個casecase滿足后滿足后, ,以下的語句全部無條件執(zhí)行。除非以下的語句全部無條件執(zhí)行。除非遇到遇到“ ”或或breakbreak語句來終止語句來終止switchswitch語句的執(zhí)行。語句的執(zhí)行。 例例10 10 根據(jù)成績范圍,打印出成績等級。根據(jù)成績范圍,打印出成績等級。5.4 switch語句語句main( ) int score,num; char grade; scanf(%d,&score); num=score/10; switch(num) case 10:
25、 case 9 : grade=A; break; case 8 : grade=B; break; case 7 : grade=C; break; case 6 : grade=D; break; default : grade=E; printf(%d %c,score,grade);鑒于上述原因,鑒于上述原因,2個或多個個或多個case可可以共用一組執(zhí)行以共用一組執(zhí)行語句語句1. 表達式的類型和常量表達式的類型必須一致;表達式的類型和常量表達式的類型必須一致;switchswitch后面后面的表達式一般情況下是的表達式一般情況下是整型整型或或字符型字符型。2. 每一個每一個 case
26、的常量表達式的值必須互不相同。的常量表達式的值必須互不相同。3. 多個多個case和和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。的出現(xiàn)次序不影響執(zhí)行結(jié)果。4. case常量表達式只起語句標號作用常量表達式只起語句標號作用; 必須用必須用break語句終止多個語句終止多個case連續(xù)執(zhí)行,連續(xù)執(zhí)行, 否則只要有一個否則只要有一個case滿足后滿足后,以下的語句全部無條件執(zhí)行。以下的語句全部無條件執(zhí)行。 說明:說明:5.4 switch語句語句 main( ) int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; ca
27、se 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(na=%d,b=%d,a,b); switch的嵌套的嵌套5.4 switch語句語句 5.5 5.5 程序舉例程序舉例例 寫程序,判斷某一年是否閏年。閏年的算法。用一個標志用一個標志leap代表閏年與否。代表閏年與否。leap=1,代表閏年,代表閏年,leap=0,代表,代表非閏年。非閏年。#include #include void main()void main() int year, leap; int year, leap; scanf(%d,&year)
28、; scanf(%d,&year); if (year%4=0) if (year%4=0) if (year%100=0)if (year%100=0) if (year%400=0) leap=1;if (year%400=0) leap=1; else leap=0; else leap=0; else leap=1;else leap=1; else leap=0;else leap=0; if (leap)if (leap) printf(%d is a leap year.n ,year); printf(%d is a leap year.n ,year); else e
29、lse printf(%d is not a leap year.n ,year); printf(%d is not a leap year.n ,year); (?。ǎ。?; (?。ǎ。?; (?。。?; ; 運行情況: . . if (year%4=0&year%100!=0)|year%400=0)if (year%4=0&year%100!=0)|year%400=0) 1 1; 0 0;例例 求求x x2 2方程的解。方程的解。基本的算法:基本的算法: ,不是二次方程。,不是二次方程。 b b2 2,有兩個相等實根。,有兩個相等實根。 b b2 2 ,有兩個不等
30、實根。,有兩個不等實根。 b b2 2 ,有兩個共軛復根。,有兩個共軛復根。#include #include void main ( ) float a,b,c,disc,x1,x2,realpart,imagpart; scanf(“%f,%f,%f”,&a,&b,&c); printf(“the equation ”); if(fabs(a)=1e-6) printf(“is not a quadraticn”); else disc=b*b-4*a*c; if(fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqr
31、t(disc)/(2*a); printf(has distinct real roots:%8.4f and %8.4fn,x1,x2); else realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf(has complex rootsn); printf(%8.4f+%8.4fin,realpart,imagpart); printf(%8.4f-%8.4fin,realpart,imagpart); 例 運輸公司對用戶計算運費。 路程()越遠,每公里運費越低。標準如下: 沒有折扣 折扣 折扣 折扣 折扣 1折扣 設每公里每噸貨物的基本運費為,貨物重為, 距離為,折扣為,則總運費的計算公式為: *() 分析:用if else分支方法,可以完成,但區(qū)間太多。 用switch,尋找合適的表達式以及對應的常量 分析折扣變化的規(guī)律性: 折扣的“變化點”都是的倍數(shù),在橫軸上加一種坐標,c的值為s/250。c代表250的倍數(shù)。 , 無折扣;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年南瓜種子項目可行性研究報告
- 2025至2030年陽光棚項目投資價值分析報告
- 2025至2030年粒粒朱古力威化餅項目投資價值分析報告
- 2025至2030年手指畫蠟筆項目投資價值分析報告
- 2025至2030年三叉金海棠葉樹項目投資價值分析報告
- 二零二五年度汽車尾氣凈化氣體添加劑采購合同
- 2025-2030全球兩片式鍍錫金屬罐行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球卡車秤管理軟件行業(yè)調(diào)研及趨勢分析報告
- 超市生鮮區(qū)油漆裝修合同
- 商場裝修補貼合同協(xié)議書
- 2024年小升初語文入學分班測試卷四(統(tǒng)編版)
- 流行文化對青少年價值觀的影響研究
- 中國保險行業(yè)協(xié)會官方-2023年度商業(yè)健康保險經(jīng)營數(shù)據(jù)分析報告-2024年3月
- 設計質(zhì)量管理和保證措施及設計質(zhì)量管理和質(zhì)量保證措施
- 2024電力系統(tǒng)安全規(guī)定
- 小學二年級語文上冊閱讀理解專項訓練20篇(含答案)
- 科技論文圖表等規(guī)范表達
- 高考寫作指導議論文標準語段寫作課件32張
- 2021年普通高等學校招生全國英語統(tǒng)一考試模擬演練八省聯(lián)考解析
- 華能火力發(fā)電機組節(jié)能降耗技術(shù)導則(2023年版)
- 基礎(chǔ)知識3500個常用漢字附拼音
評論
0/150
提交評論