C語言程序設計PPT課件_第1頁
C語言程序設計PPT課件_第2頁
C語言程序設計PPT課件_第3頁
C語言程序設計PPT課件_第4頁
C語言程序設計PPT課件_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第5 5章章 選擇結(jié)構(gòu)程序設計選擇結(jié)構(gòu)程序設計關關 系系 運運 算算 邏輯運算邏輯運算 switchswitch語句語句 if if 語語 句句 5.1 5.1 關系運算符和關系表達式關系運算符和關系表達式z關系運算:比較運算關系運算:比較運算,用,用“關系表達式關系表達式”進進行運算。行運算。z例例、a 3 是一個關系表達式,它取兩個值:是一個關系表達式,它取兩個值:真真和和假假。5.1.1 5.1.1 關系運算符及其優(yōu)先次序關系運算符及其優(yōu)先次序zC語言有六種關系運算符:語言有六種關系運算符:z 小于小于z 大于大于 z= 大于或等于大于或等于 z=(連續(xù)兩個(連續(xù)兩個=) 優(yōu)先級相同(

2、低)優(yōu)先級相同(低) z!= 不等于不等于 z關系表達式關系表達式:用關系運算符將兩個表達式連接用關系運算符將兩個表達式連接起來的式子起來的式子z關系表達式的值關系表達式的值: 真真(1,任意任意非非0值也作為真值也作為真) 假假(0) z關系運算符與算術運算符、關系運算符與算術運算符、 賦值運算符的賦值運算符的優(yōu)先級關系優(yōu)先級關系 高高算術運算符算術運算符關系運算符關系運算符賦值運算符賦值運算符 低低 (優(yōu)先級關系優(yōu)先級關系)例例、a=3,b=2,c=1;1). ca+b2). ab=c3). a!=bc 5).d=abc等效于等效于cc(a+b) (a+b) 表達式的值為表達式的值為0 0

3、等效于等效于(ab)=c (ab)=c 表達式的值為表達式的值為1 1等效于等效于a!=a!=(bc) (bc) (bc) 表達式的值為表達式的值為1 1d d的值為的值為0 0。f f的值為的值為0 05.2 邏輯運算z5.2.1 邏輯運算符及其優(yōu)先次序邏輯運算符及其優(yōu)先次序& & 邏輯邏輯“與與”雙目運算符雙目運算符| | 邏輯邏輯“或或”雙目運算符雙目運算符! ! 邏輯邏輯“非非”單目運算符單目運算符 a b a&b a | b !a 0 0 0 0 1 0 非非0 0 1 1非非0 0 0 1 0非非0 非非0 1 1 0 ! !非非 高高 算術運算符算術運算符

4、關系運算符關系運算符 & & | |賦值運算符賦值運算符優(yōu)先級關系優(yōu)先級關系 低低&與運算的求值順序與運算的求值順序a&b 若表達式若表達式a的值為的值為0則不論表達式則不論表達式b為何為何值,整個表達式的值都為值,整個表達式的值都為0。因此,在計算時。因此,在計算時先求解表達式先求解表達式a,若,若a為非為非0值,再求解表達式值,再求解表達式b,根據(jù)根據(jù)b的值來決定整個表達式的值;若的值來決定整個表達式的值;若a為為0,則不再求解表達式則不再求解表達式b。 |與運算的求值順序與運算的求值順序a|b 若表達式若表達式a的值為非的值為非0值則不論表達式值則不論表達

5、式b為為何值,整個表達式的值都為何值,整個表達式的值都為1。因此,在計算。因此,在計算時先求解表達式時先求解表達式a,若,若a為為0時,再求解表達式時,再求解表達式b,根據(jù)根據(jù)b的值來決定整個表達式的值;若的值來決定整個表達式的值;若a為非為非0值,則不再求解表達式值,則不再求解表達式b。例:設例:設a=3,b=4,x=0,y=0,求值:,求值: 1、a y2、a = = b | | x = = y 3、! a | | a b 4、! a & b | x y & c5、int a=-1,b=1,c=2,d=3,m=5,n=2,k;k=(m=a+b)&(n=c+d) !

6、!非非 高高 算術運算符算術運算符關系運算符關系運算符 & & | |賦值運算符賦值運算符優(yōu)先級關系優(yōu)先級關系 低低值為值為0值為值為1值為值為0值為值為0k為為0 ,m為為0, n為為2 z例例: :判別某一年判別某一年yearyear是閏年是閏年, ,閏年的條件符合閏年的條件符合下面二者之一下面二者之一: :(1)(1)能被能被4 4整除整除, ,但不能被但不能被100100整除整除; ;(2)(2)能被能被4 4整除整除, ,又能被又能被400400整除。整除??梢杂靡粋€邏輯表達式表示:可以用一個邏輯表達式表示:(year % 4= =0 (year % 4= =0 &a

7、mp;year %100 !=0year %100 !=0)|year%400= =0year%400= =0上述表達式上述表達式為真,則為真,則yearyear是閏年;是閏年;否則為非閏年否則為非閏年。5.3 if語句 if語句:判別條件是否滿足語句:判別條件是否滿足,來決定程序的流程來決定程序的流程(執(zhí)行兩路操作之一)。(執(zhí)行兩路操作之一)。if語句的三種形式語句的三種形式1、if (表達式)(表達式) 語句語句 例如:例如:if (xy) printf(%d,x); 表達式表達式語句語句假假真真2、if (表達式)(表達式) 語句語句1 else 語句語句2 例如:例如:if (xy)

8、printf(%d,x); else printf(%d,y);表達式表達式語句語句1假假真真語句語句23、if (表達式(表達式1) 語句語句1 else if (表達式(表達式2)語句語句2 else if (表達式(表達式3)語句語句3 else if (表達式(表達式m)語句語句m else 語句語句n 假假表達式表達式1語語句句1真真表達式表達式2語語句句2假假真真表達式表達式3語語句句3假假真真語語句句4表達式表達式4語語句句5假假真真例如:例如: if (a500) b=4; else if ( a300 ) b=3; else if ( a100 )b=2; else if (

9、 a50 )b=1; else b=0;例例5.1 輸入兩個實數(shù),按代數(shù)值由小到輸入兩個實數(shù),按代數(shù)值由小到大輸出這兩個數(shù)。大輸出這兩個數(shù)。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); 運行示例運行示例3.6 ,-3.2 -3.2, 3.6 a b?交換交換a、b的位置的位置假假真真例例5.2 輸入三個數(shù),按由小到大輸出。輸入三個數(shù),按由小到大輸出。main() float a,b,c,t; scanf(%f,%f,%f,&a,&

10、amp;b,&c); if (ab) t = a; a = b; b = t; if (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); 運行運行:3,7,1 1.00,3.00,7.00 371371 1731375.3.2 if5.3.2 if語句的嵌套語句的嵌套 : :z一般形式:一般形式: if ( ) if ( ) 語句語句1 else 語句語句2 else if ( ) 語句語句3 else 語句語句4 使用嵌套使用嵌套if語句時,必須特別注意語句時,

11、必須特別注意if與與else配配對。配對原則對。配對原則:z 從最內(nèi)層開始,從最內(nèi)層開始,else總是與它上面最接近的(未曾配總是與它上面最接近的(未曾配對的)對的)if配對。配對。z 避免避免if與與else配對錯位的最佳辦法是配對錯位的最佳辦法是加大括號加大括號,同時,同時,為了便于閱讀,使用適當?shù)目s進,(只有大括號能保為了便于閱讀,使用適當?shù)目s進,(只有大括號能保證證if和和else不錯位配對,縮進僅便于閱讀)不錯位配對,縮進僅便于閱讀) 內(nèi)嵌內(nèi)嵌if 內(nèi)嵌內(nèi)嵌ifz例例5.3 有一函數(shù)如下,有一函數(shù)如下,編一程序,輸入一個編一程序,輸入一個x值,輸出值,輸出y值。值。程序程序1:mai

12、n() 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 =0) if (x0) y = 1; else y = 0; else y = -1; x = 0真真 假假 x0真真 假假y= 1 y=0 y= -1 y= -1真真 x!=0 假假 x0真真 假假y= 1 y=0 程序程序3:y = -1; if (x != 0) if (x0) y = 1; else y = 0; 5.3.3 條件運算符條件運算符z 在在if語句中,在語句中,在

13、“表達式表達式”為為“真真”和和“假假”時,都只執(zhí)時,都只執(zhí)行一個賦值語句給同一變量賦值行一個賦值語句給同一變量賦值,例例、if (ab) max = a; else max = b;可以用如下可以用如下條件運算符來處理條件運算符來處理: max = (ab) ? a : bz 條件運算符條件運算符,稱為稱為“三目運算符三目運算符”(C語言中唯一的一個三目運算符)。語言中唯一的一個三目運算符)。條條件表達式的一般形式:件表達式的一般形式:z表達式表達式1?表達式?表達式2:表達式:表達式3條件運算符的優(yōu)先級僅高于賦值運算符和逗號運算符條件運算符的優(yōu)先級僅高于賦值運算符和逗號運算符并且結(jié)合性為自

14、右向左。(不是指運算的順序)并且結(jié)合性為自右向左。(不是指運算的順序)其中,其中,“(ab) ? a : b”是一個是一個條件表達式,若條件(條件表達式,若條件(ab)成立,則條件表達式取值成立,則條件表達式取值a;否則,取值否則,取值b。v條件表達式的求解過程條件表達式的求解過程先求解表達式先求解表達式1的值的值若表達式若表達式1的值為真的值為真(非非0);則求解表達式;則求解表達式2的值,將的值,將其作為條件表達式的值。表達式其作為條件表達式的值。表達式3不計算。不計算。 若表達式若表達式1的值為假的值為假(0);則求解表達式;則求解表達式3的值,將的值,將其作為條件表達式的值。表達式其作

15、為條件表達式的值。表達式2不計算。不計算。例:例:int a=1,b=2,c=3,d=4,m=5,n=6,k; k=ab?(m=cb): (n=bd)例:例:int a=1,b=2,c=3,d=4,m=5,n=6,k; k=ac?(m=cb): (n=bd)v條件表達式不能取代一般的條件表達式不能取代一般的if 語句,只有在語句,只有在if 語句中內(nèi)語句中內(nèi)嵌語句是賦值語句時,且兩個分支都對同一個變量賦嵌語句是賦值語句時,且兩個分支都對同一個變量賦值時,才能代替值時,才能代替if 語句。語句。如:如:if (ab) max=a; else max=b; 此時可用此時可用 max = ab ?

16、a : b ; 代替前面的代替前面的if 語句。語句。其它情況的其它情況的if 語句不能用語句不能用條件表達式條件表達式代替。代替。v條件表達式中,三個子表達式的類型可以互不相同。條件表達式中,三個子表達式的類型可以互不相同。若表達式若表達式2與表達式與表達式3類型不同時,則條件表達式的類類型不同時,則條件表達式的類型為二者較高的類型。如:型為二者較高的類型。如:int a=1,b=2; 表達式表達式 a= A & ch = Z)?(ch+32):ch; printf(%c,ch); 大寫字母?大寫字母?轉(zhuǎn)換為小寫字母轉(zhuǎn)換為小寫字母:ch+32假假真真5.4 switch語句語句zsw

17、itch語句直接處理多個分支(當然包括兩語句直接處理多個分支(當然包括兩 個分支)。個分支)。其一般形式:其一般形式:switch(表達式)(表達式) case 常量表達式常量表達式1:語句組:語句組1 case 常量表達式常量表達式2:語句組:語句組2 case 常量表達式常量表達式n:語句組:語句組n default:語句組:語句組n+1 幾點說明:幾點說明:開關表達式,可以是整型、字符型或其它類型,開關表達式,可以是整型、字符型或其它類型,若表達式是實型表達式時,若表達式是實型表達式時,switch會自動取整,會自動取整,舍去小數(shù)部分。舍去小數(shù)部分。case 后的常量表達式,必須是整型、

18、字符型或后的常量表達式,必須是整型、字符型或枚舉類型,不能是實型表達式,在常量表達式枚舉類型,不能是實型表達式,在常量表達式中不允許出現(xiàn)變量。每個中不允許出現(xiàn)變量。每個case后的常量表達式后的常量表達式的值都必須各不相同,否則出錯。的值都必須各不相同,否則出錯。開關表達式的值與某個開關表達式的值與某個case后的常量表達式的后的常量表達式的值相等時,就執(zhí)行此值相等時,就執(zhí)行此case后面的語句。若所后面的語句。若所有的有的case中的常量表達式的值都沒有與開關中的常量表達式的值都沒有與開關表達式的值相匹配,則執(zhí)行表達式的值相匹配,則執(zhí)行default后的語句,后的語句,此選項亦可省略。此選項

19、亦可省略。執(zhí)行完一個執(zhí)行完一個case后的語句后,遇到后的語句后,遇到break語句,語句,就退出就退出switch語句的執(zhí)行,若沒有語句的執(zhí)行,若沒有break語句,語句,程序會順序執(zhí)行下去,程序會順序執(zhí)行下去,case 常量表達式常量表達式 僅起僅起到一個語句標號的作用。到一個語句標號的作用。break 語句非常重要。語句非常重要。多個多個case語句可以共用一組語句。語句可以共用一組語句。 例例、根據(jù)考試成績的等級(、根據(jù)考試成績的等級(grade)打印出百分制分數(shù)段:打印出百分制分數(shù)段:switch (grade) case A:printf(85100n);break; case B

20、:printf(7084n);break; case C:printf(6069n);break; case D:printf(60n);break; default: printf(errorn); break語句使程序跳出語句使程序跳出switch結(jié)構(gòu)。結(jié)構(gòu)。 習題習題5-6:判別學生成績的等級判別學生成績的等級: 小于小于60分分,E級級; 小于小于70分分,D級級; 小于小于80分分,C級級; 小于小于90分分,B級級; 小于小于100分分,A級級; 1.算法算法: 分數(shù)分數(shù)/10: 6 ,E級級 7 ,D級級 8 ,C級級 9 ,B級級 10 ,A級級 60 70 80 90 100

21、 6 7 8 9 10ABCDE5.5 程序舉例程序舉例60E假假真真70D假假真真80C假假真真B90 0,有兩個不等實根。,有兩個不等實根。 z b2-4ac 0, 有兩個共軛復根。有兩個共軛復根。 2. N-S流程圖:流程圖: disc= b2-4ac 程序如下:(程序如下:(disc= b2-4ac )#include “math.h”main() float a,b,c,disc,x1,x2,realpart,imagpart; scanf(“%f,%f,%f”,&a,&b,&c); /* 方程系數(shù)方程系數(shù) */ printf(“The equation”);

22、 if (fabs(a) = 1E-6) /*a=0*/ printf(“is not quadraticn”); /* 二次方程系數(shù)二次方程系數(shù) */ else disc = b*b - 4*a*c; /* disc */ if (fabs(disc) 1E-6) /* disc0 */ x1 = (-b + sqrt(disc)/(2*a); x2 = (-b - sqrt(disc)/(2*a); printf(“has distinct real roots:%8.4f and %8.4fn”,x1,x2); else /* disc =3000) c=12; else c=s/250

23、; switch(c) case 0: d=0;break; case 1: d=2;break;case 2: case 3: d=5;break;case 4: case 5: case 6: case 7: d=8; break;case 8: case 9: case 10: case 11: d=10;break;case 12: d=15; f=p*w*s*(1-d/100.0); printf(freight=%-15.4fn,f); getch();思考題寫出下面程序在以下情況的輸出結(jié)果:寫出下面程序在以下情況的輸出結(jié)果: a=10,b=5; a=-5,b=-10; a=0,b=-3; a=6,b=7。 main( ) int a,b; scanf(%d,%d,&a,&b); if (ab) if(a0) printf(A);

溫馨提示

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

評論

0/150

提交評論