《C語言程序設(shè)計PPT教學(xué)課件第四章 選擇結(jié)構(gòu)》由會員分享,可在線閱讀,更多相關(guān)《C語言程序設(shè)計PPT教學(xué)課件第四章 選擇結(jié)構(gòu)(45頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、C語言程序設(shè)計第第4章章 選擇結(jié)構(gòu)選擇結(jié)構(gòu)學(xué)習(xí)目標(biāo):1)會運(yùn)用關(guān)系運(yùn)算2)邏輯運(yùn)算3)if語句C語言程序設(shè)計4.1 關(guān)系運(yùn)算和邏輯運(yùn)算關(guān)系運(yùn)算和邏輯運(yùn)算4.1.1 語言的邏輯值語言的邏輯值關(guān)系表達(dá)式關(guān)系表達(dá)式邏輯表達(dá)式邏輯表達(dá)式運(yùn)算運(yùn)算邏輯值()邏輯值()在語言中用在語言中用“”表示真;表示真;“”表示假表示假C語言程序設(shè)計 C語言提供了六種關(guān)系運(yùn)算符:1. (小于)2. (大于) 4. = (大于或等于)5. = = (等于)6. != (不等于) 關(guān)系運(yùn)算符優(yōu)先級低于算術(shù)運(yùn)算符。優(yōu)先級相同(低)優(yōu)先級相同(高)4.1.2 關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符和關(guān)系表達(dá)式比較運(yùn)算比較運(yùn)算關(guān)系運(yùn)算
2、關(guān)系運(yùn)算C語言程序設(shè)計 關(guān)系運(yùn)算符優(yōu)先級高于賦值運(yùn)算符如下圖:算術(shù)運(yùn)算符賦值運(yùn)算符關(guān)系運(yùn)算符高低ab!=c (ab)!=ca= =bc a= =(bc a=(bc)例如: ca+b c(a+b)C語言程序設(shè)計4.1.2.2 關(guān)系表達(dá)式及關(guān)系表達(dá)式的值關(guān)系表達(dá)式及關(guān)系表達(dá)式的值關(guān)系表達(dá)式的結(jié)果值規(guī)定為1或0.1 結(jié)果為真 (成立) 0 結(jié)果為假 (不成立)定義: 用關(guān)系運(yùn)算符將兩個表達(dá)式 (算術(shù)、關(guān)系、邏輯、賦值、字 符等表達(dá)式)連接起來的式子。C語言程序設(shè)計如:a=6、b=12、c=2. ab 值為“” ; a+bb值為“” (a=3)(b=5) 值為“”; a b 值為“(詳見附錄)思考一下
3、:(ab)(bb)= =c 成立 1b+cb 則ab值為1, 所以d=1. f=abc ab為1, abc為0,所以f=0.關(guān)系運(yùn)算為左結(jié)合C語言程序設(shè)計4.1.3 邏輯運(yùn)算符和邏輯運(yùn)算表達(dá)式(邏輯運(yùn)算符和邏輯運(yùn)算表達(dá)式(p36)邏輯運(yùn)算符: & (與)、(或) 、! (非) a b !a !b a&b a b 真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假其意義見下表:C語言程序設(shè)計a&b 當(dāng)a, b均為1時,才為1a b 當(dāng)a, b中有一個為1時,即為1!a 當(dāng)a為1, !a為0,反之為1.由此看到: 和&為雙
4、目運(yùn)算符. !為單目運(yùn)算符。C語言程序設(shè)計優(yōu)先級定義:2. &和低于關(guān)系運(yùn)算符,!高于算術(shù)運(yùn)算符。1. !(非)優(yōu)先于&(與),&優(yōu)先于 (或)。即: !& 例: !a&b xy & c (!a)&b (xy)&c (!a)&b) (xy)&c)高低C語言程序設(shè)計 1. 邏輯表達(dá)式的值與關(guān)系表達(dá)式值一樣,真為1,假為0。例: a=4 則 !a 值為0.此處只要a 0,為真.則!a值為0. a=4, b=5 a&b為1 前面已定義了邏輯表達(dá)式,以下看一看邏輯表達(dá)式的值及具體的運(yùn)算。C語言程序設(shè)計 4&
5、0 | 2 為1. 總之,在邏輯運(yùn)算中,非0值參加邏輯運(yùn)算時被看成1處理. a=4, b=5 a | b為1 a=4, b=5 !a | b為1C語言程序設(shè)計2. 一個邏輯表達(dá)式中的邏輯運(yùn)算符并不是一定全部執(zhí)行. 一個實際的例子:判斷年號是否為閏年。如: a&b&c. 則當(dāng)a=0(假)時, b,c不需判斷。當(dāng)a=1,b=0,則不需判c.又如: a |b |c. 當(dāng)a=1時,b, c均不必判別。閏年的定義: 能被4整除且又能被400整除。 年號能被4整除但不能被100整除。C語言程序設(shè)計 當(dāng)(year%4!=0) (year%100= =0& year%400!=0) 為
6、1時, year為非閏年。設(shè)用變量year表示年號則當(dāng)(year%4= =0& year% 100 !=0)|year%400= =0) 為1時,year為閏年,否則為非閏年。如果要判別非閏年可在上述表達(dá)式前加非(!)運(yùn)算符.即:當(dāng)!( (year%4= =0 & year%100!=0) |year% 400= = 0) 為1時,year為非閏年。或者:C語言程序設(shè)計4.2.1 4.2.1 ifif語句語句的三種形式的三種形式 功能: 當(dāng)表達(dá)式值非0時, 執(zhí)行語句A,否則不執(zhí)行語句A.表達(dá)式語句A例如: if (xy) printf( %d, x)形式1 if(表達(dá)式)語句A
7、其流程圖:!C語言程序設(shè)計#includemain() float a, b, t; scanf(%f, %f, &a, &b); if (ab) t=a; a=b; b=t; printf(%5.2f, %5.2fn, a, b);例子: 輸入兩個實數(shù),按代數(shù)值由小到大次序輸出這兩個數(shù)。 3.6, 3.2 3.20, 3.60運(yùn)行情況如下:C語言程序設(shè)計形式2: if(表達(dá)式)語句A else 語句B功能: 表達(dá)式為非0,執(zhí)行語句A 表達(dá)式為0,執(zhí)行語句B例: if(xy) printf(%d, x); else printf( %d, y);表達(dá)式語句A語句B!C語言程序設(shè)
8、計v例子1: 輸入兩個數(shù),分別賦給x和y,輸出其中一個最大的數(shù)。#includemain() int x,y; scanf(%d%d,&x,&y); if(xy) printf(max=x=%dn,x); else printf(max=y=%dn,y) ;C語言程序設(shè)計例子2:從鍵盤輸入一個數(shù),判斷它是否能被7整除。若能被7整除,打印YES,否則打印NO。#includemain() int i ; printf (input i=); scanf(%d, &i); if (i%7=0) /*判斷i能否被7整除*/ printf(i=%d YESn, i); else
9、 printf(i=%d NOn, i);C語言程序設(shè)計形式3 if(表達(dá)式1)語句1 else if (表達(dá)式2) 語句2else if (表達(dá)式3) 語句3 else if(表達(dá)式n) 語句nelse 語句n+1C語言程序設(shè)計流程:表達(dá)1表達(dá)2表達(dá)3表達(dá)n語句1語句2語句3語句n語句n+1 0= 0= 0 0 0 0= 0= 0C語言程序設(shè)計如: if (3) printf (o.k); if (a) 1. 表達(dá)式可以是邏輯、關(guān)系,甚至是算術(shù)表達(dá)式。 2. 上述形式中的語句必須以分號結(jié)束 3. 上述形式中的語句可以是由 括起來的復(fù)合語句。此時,在 外可以不用分號.注意的問題:C語言程序設(shè)計
10、例4.2 輸入三個數(shù),按從小到大的順序輸出。# include main ( ) float a, b, c,t; scanf(%f,%f,%f, &a, &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);運(yùn)行情況如下:3,7,11.00, 3.00, 7.00C語言程序設(shè)計v例4.5 編寫程序?qū)崿F(xiàn)功能:根據(jù)輸入的學(xué)生成績給出相應(yīng)的等級,大于或等于90分以上的等級為A,60分以下的等級為E,其余
11、每10分為一個等級 。 #include main() int i; printf(“Enter i: ”); scanf (“%d”,&i); printf(“i=%d;”,i); if(i=90) printf(“An”); else if(i=80) printf(“Bn”); else if(i=70) printf(“Cn”); else if(i=60) printf(“Dn”); else printf(“En”);C語言程序設(shè)計4.2.2 if語句的嵌套語句的嵌套(P40)if (表達(dá)式1)內(nèi)嵌ifelse內(nèi)嵌if注意: else與最近的if 配對.一般形式: 在上述形
12、式的if語句中, 又可以是if語句稱為嵌套。if (表達(dá)式2) 語句1if (表達(dá)式3) 語句3else 語句2else 語句4C語言程序設(shè)計例如: if ( )if ( ) 語句2else 語句3if ( ) if ( ) 語句1 else 所以:必要時加 . if ( ) 語句1elseC語言程序設(shè)計例子: 有一函數(shù)y=1 (x0)編一程序,輸入一個x值,輸出y值。有以下幾種寫法,請判斷哪些是正確的?C語言程序設(shè)計程序1:main ( ) int x, y; scanf(“%d, &x); if (x=0) if (x0) y=1; else y=0; else y= 1;C語言程
13、序設(shè)計程序3: 將上述if語句改為: y= 1; if (x! =0) if (x0) y=1; else y=0;程序4: y=0; if (x=0) if (x0) y=1; else y= 1;C語言程序設(shè)計4.3 4.3 條件運(yùn)算符條件運(yùn)算符 max=ab? a:b;當(dāng)ab為真時, max a, 否則maxb C語言提供了一個簡單的條件賦值語句或條件 表達(dá)式。格式: 表達(dá)式1?表達(dá)式2: 表達(dá)式3功能:先判表達(dá)式1, 若非0,則值為表達(dá)式2的 值,否則為表達(dá)式3的值。C語言程序設(shè)計注: 1. 條件運(yùn)算符優(yōu)先于賦值運(yùn)算符. 例: max=(ab? a:b)可去掉( ) 即:max=ab?
14、a:b 2. 條件運(yùn)算符低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符。 例: max=ab? a:b+1 max= ab? a:(b+1)不是:max=(ab? a:b)+1C語言程序設(shè)計 3. 條件運(yùn)算符結(jié)合性為從右至左. 如: ab? a:cd ? c:d 相當(dāng)于 ab? a:(cd? c:d)C語言程序設(shè)計4. 條件表達(dá)式不能取代一般的if語句,只有當(dāng)if 的兩 個分支為給同一變量賦值時才可替代if.if (ab) printf(%d, a); else printf (%d, b);由于printf.不是表達(dá)式,故不可用條件表達(dá)式,但可為: printf(%d, ab? a:b);C語言程序設(shè)計5. 表
15、達(dá)式1、表達(dá)式2、表達(dá)式3可類型不同。main ( ) char ch; scanf (%c, &ch); ch=(ch=A & ch=Z)? (ch+32):ch; printf(%c, ch);例5.4 輸入一個字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。運(yùn)行結(jié)果如下: A aC語言程序設(shè)計引入: 當(dāng)某一表達(dá)式有n個取值,每一取值執(zhí)行一語句,則如果用內(nèi)嵌if十分繁鎖,而用switch簡單。格式: switch(表達(dá)式) case 常量表達(dá)式1: 語句1 case 常量表達(dá)式2: 語句2 case 常量表達(dá)式n: 語句n d
16、efault : 語句n+1 C語言程序設(shè)計例如: 根據(jù)成績等級打印百分?jǐn)?shù)段。#includemain()int grade;printf(Enter a mark:);scanf(%d,&grade);switch (grade)case A: printf (85100n);case B: printf (7084n);case C: printf (6069n);case D: printf (60n); break; case D: printf(60n); break; C語言程序設(shè)計例子:例子: 寫一程序,輸入年號,判斷是否為閏年。 算法: 根據(jù)閏年的判斷條件 當(dāng)年號能被4
17、整除但不能被100整除時,它為閏年。 當(dāng)年號能被100整除又能被400整除時,它為閏年。C語言程序設(shè)計 設(shè)用變量year表示年號,leap為待置值變量,當(dāng)year為閏年:leap1, 否則leap0. 2. 流程圖:真假真假year被4整除year被100整除year被400整除真假leap=0leap=1leap=0真假leap輸出“閏年”輸出“非閏年”leap=1C語言程序設(shè)計3. 程序程序:main ( )int year, leap; scanf(%d, &year); if (year%4= =0) if (year%100= =0) if (year%400= =0) le
18、ap=1; else leap=0; else leap=1; else leap=0;if (leap) printf(%d is, year);else printf(%d is not, year);printf (a leap yearn);C語言程序設(shè)計運(yùn)行情況如下:2000 2000 is a leap year1989 1989 is not a leap year 上述條件也可用一個邏輯表達(dá)式表示: if (year%4=0& year%100!=0|year%400=0) leap=1; else leap=0;C語言程序設(shè)計即:#includemain ( )int year, leap; scanf(%d, &year); if (year%4=0&year%100!=0|(year%400=0) leap=1; else leap=0;if (leap) printf(%d is, year);else printf(%d is not, year);printf (a leap yearn);C語言程序設(shè)計4.5 語句標(biāo)號和goto語句(P45) 大家自己看一下注意:此語句我們是不提倡用的總結(jié):掌握關(guān)系運(yùn)算、邏輯運(yùn) 算以及if語句