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