第4章 選擇結(jié)構(gòu)程序設(shè)計(趙津燕).ppt_第1頁
第4章 選擇結(jié)構(gòu)程序設(shè)計(趙津燕).ppt_第2頁
第4章 選擇結(jié)構(gòu)程序設(shè)計(趙津燕).ppt_第3頁
第4章 選擇結(jié)構(gòu)程序設(shè)計(趙津燕).ppt_第4頁
第4章 選擇結(jié)構(gòu)程序設(shè)計(趙津燕).ppt_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、4.1 選擇結(jié)構(gòu)和條件判斷 4.2 用if語句實現(xiàn)選擇結(jié)構(gòu) 4.3 關(guān)系運算符和關(guān)系表達式 4.4 邏輯運算符和邏輯表達式 4.5 條件運算符和條件表達式 4.6 選擇結(jié)構(gòu)的嵌套 4.7 用switch語句實現(xiàn)多分支選擇結(jié)構(gòu) 4.8 選擇結(jié)構(gòu)程序綜合舉例,第4章 選擇結(jié)構(gòu)程序設(shè)計,在現(xiàn)實生活中,需要進行判斷和選擇的情況是很多的 如果你在家,我去拜訪你 如果考試不及格,要補考 如果遇到紅燈,要停車等待 周末我們?nèi)ソ加?70歲以上的老年人,入公園免票,4.1 選擇結(jié)構(gòu)和條件判斷,在現(xiàn)實生活中,需要進行判斷和選擇的情況是很多的 處理這些問題,關(guān)鍵在于進行條件判斷 由于程序處理問題的需要,在大多數(shù)程序

2、中都會包含選擇結(jié)構(gòu),需要在進行下一個操作之前先進行條件判斷,4.1 選擇結(jié)構(gòu)和條件判斷,C語言有兩種選擇語句: (1)if語句,實現(xiàn)兩個分支的選擇結(jié)構(gòu) (2)switch語句,實現(xiàn)多分支的選擇結(jié)構(gòu),4.1 選擇結(jié)構(gòu)和條件判斷,例4.1 求 方程的根。,由鍵盤輸入a,b,c。假設(shè)a,b,c的值任意,并不保證 。需要在程序中進行判別,如果 ,就計算并輸出方程的兩個實根,否則就輸出“方程無實根”的信息。,4.1 選擇結(jié)構(gòu)和條件判斷,例4.1 求 方程的根。,4.1 選擇結(jié)構(gòu)和條件判斷,#include #include int main ( ) double a , b , c , d , x1 ,

3、 x2 , p , q ; printf ( a,b,c= ) ; scanf ( %lf,%lf,%lf , ,4.1 選擇結(jié)構(gòu)和條件判斷,if ( d = 0 ) x1 = p + q ; x2 = p - q ; printf ( x1=%5.2lf,x2=%5.2lfn , x1 , x2 ) ; else printf ( x1=%5.2lf+%5.2lfin , p , q ) ; printf ( x2=%5.2lf-%5.2lfin , p , q ) ; return 0 ; ,4.1 選擇結(jié)構(gòu)和條件判斷,執(zhí)行該程序3次,以便解3個方程: 解方程:x 2 + 2x + 1 =

4、 0,該方程有相等二實根: a,b,c=1,2,1 x1=-1.00,x2=-1.00 解方程:x 2 + 2x - 8 = 0,該方程有不相等二實根: a,b,c=1,2,-8 x1=2.00,x2=-4.00 解方程:x 2 + 2x + 5 = 0,該方程有一對共軛虛根: a,b,c=1,2,5 x1=-1.00+2.00i x2=-1.002.00i,4.1 選擇結(jié)構(gòu)和條件判斷,4.2 用if語句實現(xiàn)選擇結(jié)構(gòu),4.2.1 用if語句處理選擇結(jié)構(gòu)舉例 4.2.2 if語句的一般形式,4.2.1 用if語句處理選擇結(jié)構(gòu)舉例,例4.2 輸入兩個實數(shù),按代數(shù)值由小到大的順序輸出這兩個數(shù)。,解題

5、思路: 只需要做一次比較,然后進行一次交換即可 用if語句實現(xiàn)條件判斷 關(guān)鍵是怎樣實現(xiàn)兩個變量值的互換,A,B,互換前,A,B,互換后,4.2.1 用if語句處理選擇結(jié)構(gòu)舉例,A,B,C,4.2.1 用if語句處理選擇結(jié)構(gòu)舉例,A,B,C,4.2.1 用if語句處理選擇結(jié)構(gòu)舉例,A,B,C,4.2.1 用if語句處理選擇結(jié)構(gòu)舉例,#include int main() float a,b,t; scanf(%f,%f, ,將a和b的值互換,如果ab,#include int main() float a,b,t; scanf(%f,%f, ,選擇結(jié)構(gòu),用if語句實現(xiàn)的,例4.3 輸入3個數(shù)a,

6、b,c,要求按由小到大的順序輸出。,解題思路:可以先用偽代碼寫出算法: if ab,a和b對換 (a是a、b中的小者) if ac,a和c對換 (a是三者中最小者) if bc,b和c對換 (b是三者中次小者) 順序輸出a,b,c,#include int main() float a,b,c,t; scanf(%f,%f,%f, ,如果 ab,將a和b對換,a是a、b中的小者,#include int main() float a,b,c,t; scanf(%f,%f,%f, ,如果 ac,將a和c對換,a是三者中的小者,#include int main() float a,b,c,t;

7、scanf(%f,%f,%f, ,如果 bc,將b和c對換,b是三者中的次小者,if (表達式) 語句1 else 語句2 ,關(guān)系表達式 邏輯表達式 數(shù)值表達式,方括號內(nèi)的部分為可選的,4.2.2 if語句的一般形式,4.2.2 if語句的一般形式,if (表達式) 語句1 else 語句2 ,簡單的語句 復(fù)合語句 另一個if語句等,最常用的3種if語句形式: 1. if (表達式) 語句1 (沒有else子句) 2. if (表達式) 語句1 else 語句2 (有else子句) 3. if(表達式) 語句 else if(表達式) 語句 else if(表達式) 語句 else if(表達

8、式) 語句 else 語句m+1 (在else部分又嵌套了多層的if語句),if(number 500) cost = 0.15; else if (number 300) cost = 0.10; else if (number 100) cost = 0.075; else if (number 50) cost = 0.05; else cost=0;,if (number 500) cost = 0.15; else if (number 300) cost = 0.10; else if (number 100) cost = 0.075; else if (number 50) c

9、ost = 0.05; else cost = 0;,等價于,分號不能丟,說明: (1)整個if語句可寫在多行上,也可寫在一行上 但都是一個整體,屬于同一個語句 (2)“語句1”“語句m”是if中的內(nèi)嵌語句 內(nèi)嵌語句也可以是一個if語句 (3)“語句1”“語句m”可以是簡單的語句,也可以是復(fù)合語句,4.3 關(guān)系運算符和關(guān)系表達式,4.3.1關(guān)系運算符及其優(yōu)先次序 4.3.2 關(guān)系表達式,關(guān)系運算符: 用來對兩個數(shù)值進行比較的比較運算符 語言提供種關(guān)系運算符: (小于) = (小于或等于) (大于) = (大于或等于) = (等于) != (不等于),優(yōu)先級相同 (高),優(yōu)先級相同 (低),4.

10、3.1 關(guān)系運算符及其優(yōu)先次序,關(guān)系、算術(shù)、賦值運算符的優(yōu)先級,ca+b 等效于 c(a+b) ab=c 等效于 (ab)=c a=bc 等效于 a=(bc),4.3.1 關(guān)系運算符及其優(yōu)先次序,4.3.2 關(guān)系表達式,關(guān)系表達式 用關(guān)系運算符將兩個數(shù)值或數(shù)值表達式連接起來的式子 關(guān)系表達式的值是一個邏輯值,即“真”或“假” 在C的邏輯運算中,以“”代表“真”,以“”代表“假”,4.4 邏輯運算符和邏輯表達式,4.4.1 邏輯運算符及其優(yōu)先次序 4.4.2 邏輯表達式 4.4.3 邏輯型變量,4.4.1 邏輯運算符及其優(yōu)先次序,3種邏輯運算符: else max=b;,max = (a b)

11、? a : b;,條件運算符,有一種if語句,當被判別的表達式的值為“真”或“假” 時,都執(zhí)行一個賦值語句且向同一個變量賦值 如:if (ab) max=a; else max=b;,max = (a b) ? a : b;,條件表達式,4.5 條件運算符和條件表達式,條件表達式的一般形式為 表達式?表達式: 表達式,4.5 條件運算符和條件表達式,條件運算符的執(zhí)行順序: 求解表達式1 若為非0(真)則求解表達式2,此時表達式2的值就作為整個條件表達式的值 若表達式1的值為0(假),則求解表達式3,表達式3的值就是整個條件表達式的值,4.5 條件運算符和條件表達式,條件運算符優(yōu)先于賦值運算符

12、條件運算符的結(jié)合方向為“自右至左” 以下為合法的使用方法: ab ? (max=a):(max=b); ab ? printf(“%d”,a): printf(“%d”,b);,4.5 條件運算符和條件表達式,例4.4 輸入一個字符,判別它是否大寫字母,如果是,將它轉(zhuǎn)換成小寫字母;如果不是,不轉(zhuǎn)換。然后輸出最后得到的字符。,4.5 條件運算符和條件表達式,解題思路:用條件表達式來處理,當字母是大寫時,轉(zhuǎn)換成小寫字母,否則不轉(zhuǎn)換,4.5 條件運算符和條件表達式,ch=(ch=A ,#include int main() char ch; scanf(%c, ,4.5 條件運算符和條件表達式,4.

13、6 選擇結(jié)構(gòu)的嵌套,在if語句中又包含一個或多個if語句稱為if語句的嵌套 一般形式: if( ) if( ) 語句1 else 語句2 else if( ) 語句3 else 語句4,內(nèi)嵌if,else總是與它上面最近的未配對的if配對,在if語句中又包含一個或多個if語句稱為if語句的嵌套 if () if () 語句1 else語句2,內(nèi)嵌if, 限定了內(nèi)嵌if范圍,4.6 選擇結(jié)構(gòu)的嵌套,例4.5有一函數(shù): 編一程序,輸入一個x值,要求輸出相應(yīng)的y值。,4.6 選擇結(jié)構(gòu)的嵌套,解題思路: 用if語句檢查x的值,根據(jù)x的值決定賦予y的值 由于y的可能值不是兩個而是三個,因此不可能只用一個

14、簡單的(無內(nèi)嵌if)的if語句來實現(xiàn),4.6 選擇結(jié)構(gòu)的嵌套,4.6 選擇結(jié)構(gòu)的嵌套,解題思路:方法1 (1) 先后用3個獨立的if語句處理: 輸入x 若 x 0, 則y = 1 輸出x和y,scanf(%d,4.6 選擇結(jié)構(gòu)的嵌套,解題思路:方法2 (2) 用一個嵌套的if語句處理: 輸入x 若x 0, 則y = -1 否則 若 x = 0, 則y = 0 否則 y = 1 輸出x和y,scanf(%d,4.6 選擇結(jié)構(gòu)的嵌套,解題思路:方法2 (2) 用一個嵌套的if語句處理: 輸入x 若x 0, 則y = -1 否則 若 x = 0, 則y = 0 否則 y = 1 輸出x和y,scan

15、f(%d,scanf(%d,提倡內(nèi)嵌if放在else中,4.7 用switch語句實現(xiàn)多分支選擇結(jié)構(gòu),switch語句用來實現(xiàn)多分支選擇結(jié)構(gòu) 學(xué)生成績分類 85分以上為A等 7084分為B等 6069分為C等 人口統(tǒng)計分類 按年齡分為老、中、青、少、兒童,例4.6 要求按照考試成績的等級輸出百分制分數(shù)段,A等為85分以上,B等為7084分,C等為6069分 ,D等為 60分以下 。成績的等級由鍵盤輸入。,4.7 用switch語句實現(xiàn)多分支選擇結(jié)構(gòu),解題思路: 判斷出這是一個多分支選擇問題 根據(jù)百分制分數(shù)將學(xué)生成績分為4個等級 如果用if語句,至少要用3層嵌套的if,進行3次檢查判斷 用swi

16、tch語句進行一次檢查即可得到結(jié)果,4.7 用switch語句實現(xiàn)多分支選擇結(jié)構(gòu),#include int main() char grade; scanf(%c, ,值為A,#include int main() char grade; scanf(%c, ,不能少,#include int main() char grade; scanf(%c, ,值為C,#include int main() char grade; scanf(%c, ,值為F,#include int main() char grade; scanf(%c, ,此行位置有問題,應(yīng)如何修改?,switch語句的作用是根

17、據(jù)表達式的值,使流程跳轉(zhuǎn)到不同的語句 switch語句的一般形式: switch(表達式) case 常量1 :語句1 case 常量2 :語句2 case 常量n :語句n default : 語句n+1 ,整數(shù)類型(包括字符型),switch語句的作用是根據(jù)表達式的值,使流程跳轉(zhuǎn)到不同的語句 switch語句的一般形式: switch(表達式) case 常量1 :語句1 case 常量2 :語句2 case 常量n :語句n default : 語句n+1 ,不能相同,scanf(%c, ,scanf(%c, ,scanf(%c, ,例4.7 編寫程序,用switch語句處理菜單命令。

18、解題思路:在許多應(yīng)用程序中,用菜單對流程進行控制,例如從鍵盤輸入一個A或a字符,就會執(zhí)行A操作,輸入一個B或b字符,就會執(zhí)行B操作,等等。,#include int main() void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) case a: case A: action1(a,b);break; case b: case B: action2(a,b);break; default: putchar(a); return 0; ,輸入a或A,調(diào)用action1函數(shù)

19、,執(zhí)行A操作,void action1(int x,int y) printf(x+y=%dn,x+y); ,#include int main() void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) case a: case A: action1(a,b);break; case b: case B: action2(a,b);break; default: putchar(a); return 0; ,輸入b或B,調(diào)用action2函數(shù),執(zhí)行B操作,void act

20、ion2(int x,int y) printf(x*y=%dn,x*y); ,#include int main() void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) case a: case A: action1(a,b);break; case b: case B: action2(a,b);break; default: putchar(a); return 0; ,輸入其他字符,發(fā)出警告,這是一個非常簡單的示意程序 實際應(yīng)用中,所指定的操作可能比較復(fù)雜: A

21、:輸入全班學(xué)生各門課的成績 B:計算并輸出每個學(xué)生各門課的平均成績 C:計算并輸出各門課的全班平均成績 D:對全班學(xué)生的平均成績由高到低排序并輸出 可以按以上思路編寫程序,把各action函數(shù)設(shè)計成不同的功能以實現(xiàn)各要求,4.8 選擇結(jié)構(gòu)程序綜合舉例,例4.8 寫一程序,判斷某一年是否閏年。,Y,N,Y,N,Y,N,判定閏年的算法用傳統(tǒng)流程圖表示,判定閏年的算法用N-S圖表示,輸入year,否,是,year%4為0,否,是,輸出 year 非閏年,year%100不為0,year%400為0,是,否,輸出year 非閏年,輸出year 閏年,輸出 year 閏年,#include int ma

22、in() int year; printf(enter year:); scanf(%d, ,用不同的方法編寫程序: 用變量leap代表是否閏年的信息。若閏年,令leap=1;非閏年,leap=0。最后判斷l(xiāng)eap是否為(真),若是,則輸出“閏年”信息 參見教材圖4.13,4.8 選擇結(jié)構(gòu)程序綜合舉例,#include int main() int year,leap; printf(enter year:); scanf(%d, ,標志變量,與if (leap!=0)含義相同,#include int main() int year,leap; printf(enter year:); scanf(%d, ,采取鋸齒形式,#include int main() int year,leap; printf(enter year:); scanf(%d, ,if(year%4!=0) leap=0; else if (year%100!=0) leap=1; else if(year%400!=0) leap=0; else leap=1;,#include int main() int year,leap

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論