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

下載本文檔

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

文檔簡介

1、第4章 選擇結(jié)構(gòu)的程序設(shè)計(jì),1. if語句,簡單if語句形式,if (表達(dá)式) 語句;,格式:,執(zhí)行流程:,例如:下面的程序段是輸入兩個整數(shù),輸出其中的大數(shù)。 int a, b, max; printf (input two numbers: ); scanf (%d%d, ,if_else形式,if (表達(dá)式) 語句1; else 語句2;,格式:,執(zhí)行流程:,例如:下面的程序段同樣是輸出兩個整數(shù)中的最大數(shù)。 int a, b; printf (input two numbers: ); scanf (%d%d, ,C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),1. if語句,if_else

2、_if形式,if(表達(dá)式1) 語句1; else if (表達(dá)式2) 語句2; else if (表達(dá)式3) 語句3; else 語句n;,格式:,執(zhí)行流程:,例如:下面的程序段是判斷輸入字符的種類。 char c; printf (Enter a character: ); c = getchar ( ); if (c = A ,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),if語句注意事項(xiàng),(1) if語句后面的表達(dá)式必須用括號括起來 。 (2) 表達(dá)式通常是邏輯表達(dá)式或關(guān)系表達(dá)式,但也可以是其它任何表達(dá)式,如賦值表達(dá)式等,甚至也可以是一個

3、變量。只要表達(dá)式非零時,表達(dá)式的值就為真,否則就是假。 (3) 在if語句的三種形式中,所有的語句應(yīng)為單個語句,如果要想在滿足條件時執(zhí)行一組(多個)語句,則必須把這一組語句用 括起來組成一個復(fù)合語句。但要注意的是在之后不能再加分號。 (4) 在if語句中,如果表達(dá)式是一個判斷兩個數(shù)是否相等的關(guān)系表達(dá)式,要當(dāng)心不要將=寫成了賦值運(yùn)算符=。,if (a = 5) 語句; /表達(dá)式的值永遠(yuǎn)為非0, 所以其后的語句總是要執(zhí)行的 if (b) 語句; /等價(jià)于if (b != 0) 語句;,運(yùn)行結(jié)果:x = 0,運(yùn)行結(jié)果:x != 0,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程

4、 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),if語句嵌套: 一般形式:,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),例 輸入兩數(shù)并判斷其大小關(guān)系,#include void main ( ) int x, y; printf (Enter integer x, y: ); scanf (%d, %d, ,運(yùn)行結(jié)果: Enter integer x, y: 12, 23 XY Enter integer x, y: 12, 12 X=Y,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),語言規(guī)定,在缺省 時,els

5、e總是和它上面離它最近的未配對的if配對,運(yùn)行結(jié)果:a = 0,運(yùn)行結(jié)果:a = 1,if_else 配對原則,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,實(shí)現(xiàn)if else 正確配對方法:加 ,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),例:考慮下面程序輸出結(jié)果: void main( ) int x =

6、 100, a = 10, b = 20; int v1 = 5, v2 = 0; if (a b) if (b != 15) if (!v1) x=1; else if (v2) x = 10; x = -1; printf (“%d”, x); ,結(jié)果:-1,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),2. switch語句(開關(guān)分支語句) 一般形式:,switch ( 表達(dá)式) case E1: 語句組 1; break; case E2: 語句組 2; break; . case En: 語句組 n; break; default:

7、語句組 ; break; ,執(zhí)行過程:,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),使用switch語句注意事項(xiàng),(1) switch后面的“表達(dá)式”,可以是int、char和枚舉型中的一種,但不可為浮點(diǎn)型。,float a, b = 4.0; scanf (%f, ,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),int a, b = 4; scanf (%d, ,使用switch語句注意事項(xiàng),(2) case后面語句(組)可加 也可以不加 ,但一般不加 。 (3) 每個case后面“常量表達(dá)

8、式”的值,必須各不相同,否則會出現(xiàn)相互矛盾的現(xiàn)象。,switch ( i ) case 1: b = b + 1; break; / 可加可不加 case 2: b = b - 1; break; ,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),使用switch語句注意事項(xiàng),(4) 每個case后面必須是“常量表達(dá)式”,表達(dá)式中不能包含變量。,例:按成績分成A、B、C、D、E、F幾個等級。 char score; printf (Enter Score: ); scanf (%d, ,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序

9、設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),使用switch語句注意事項(xiàng),(5) case后面的“常量表達(dá)式”僅起語句標(biāo)號作用,并不進(jìn)行條件判斷。系統(tǒng)一旦找到入口標(biāo)號,就從此標(biāo)號開始執(zhí)行,不再進(jìn)行標(biāo)號判斷,所以必須加上break語句,以便結(jié)束switch語句。,#include void main ( ) char ch; ch = getch ( ); switch ( ch ) case Y : printf (Yesn); break; case N : printf (Non); break; case A : printf (Alln); break; default : printf (Y

10、es,No or Alln); ,運(yùn)行結(jié)果: No,/假設(shè)輸入為:N,#include void main ( ) char ch; ch = getch ( ); switch ( ch ) case Y : printf (Yesn); break; case N : printf (Non); case A : printf (Alln); break; default : printf (Yes,No or Alln); ,/假設(shè)輸入為:N,運(yùn)行結(jié)果: No ALL,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),使用switch語句注意事項(xiàng),(6)多個case子句,可共用同一語句(

11、組)。,例:當(dāng)a的值是1、2、3時,將b的值加2,當(dāng)a的值是4、5、6時,將b的值減2。 int a, b = 4; scanf (%d, ,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),使用switch語句注意事項(xiàng),(7) case子句和default子句如果都帶有break子句,那么它們之間順序的變化不會影響switch語句的功能。,#include void

12、 main ( ) char ch; ch = getch ( ); switch ( ch ) case Y : printf (Yesn); break; case N : printf (Non); break; case A : printf (Alln); break; default : printf (Yes,No or Alln); break; ,#include void main ( ) char ch; ch = getch ( ); switch ( ch ) case Y : printf (Yesn); break; default : printf (Yes,N

13、o or Alln); break; case N : printf (Non); break; case A : printf (Alln); break; ,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),使用switch語句注意事項(xiàng),(8) case子句和default子句如果有的帶有break子句,而有的沒有帶break子句,那么它們之間順序的變化可能會影響輸出的結(jié)果。,#include void main ( ) char ch; ch = getch ( ); switch ( ch ) case Y : printf (Yesn);

14、 break; case N : printf (Non); break; case A : printf (Alln); break; default : printf (Yes,No or Alln); ,#include void main ( ) char ch; ch = getch ( ); switch ( ch ) case Y : printf (Yesn); break; default : printf (Yes,No or Alln); case N : printf (Non); break; case A : printf (Alln); break; ,/假設(shè)輸入

15、為:B,運(yùn)行結(jié)果: Yes,No or All,運(yùn)行結(jié)果: Yes,No or All No,/假設(shè)輸入為:B,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),使用switch語句注意事項(xiàng),(9) switch語句可以嵌套。,void main ( ) int x = 1, y = 0, a = 0, b = 0; switch ( x ) case 1: switch ( y ) case 0: a+; break; case 1: b+; break; case 2: a+; b+; break; case 3: a+; b+; printf

16、 (na = %d, b = %d, a, b); ,運(yùn)行結(jié)果: a = 2,b = 1,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),4.4 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例,【例1】已知某公司員工的保底薪水為500,某月所接工程的利潤profit(整數(shù))與利潤提成的關(guān)系如下所示(計(jì)量單位:元)。計(jì)算員工的當(dāng)月薪水。,程序應(yīng)該這樣來設(shè)計(jì): 首先要定義一個變量用來存放員工所接工程的利潤; 其次提示用戶輸入員工所接工程的利潤,并調(diào)用scanf函數(shù)接受用戶輸入員工所接工程的利潤; 然后根據(jù)上表的規(guī)則,計(jì)算該員工當(dāng)月的提成比率。 最后計(jì)算該員工當(dāng)月的薪水(保底薪

17、水+所接工程的利潤*提成比率),并輸出結(jié)果。,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),#include void main ( ) long profit; /所接工程的利潤 float ratio; /提成比率 float salary = 500; /薪水,初始值為保底薪水500 printf (Input profit: ); /提示輸入所接工程的利潤 scanf (%ld, /輸出結(jié)果 ,運(yùn)行結(jié)果: Input profit: 4000 salary = 1100.00,方法一:使用if_else if語句,C語言程序設(shè)計(jì)教程 第

18、三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),#include void main ( ) long profit; /所接工程的利潤 float ratio; /提成比率 float salary = 500; /薪水,初始值為保底薪水500 printf (Input profit: ); /提示輸入所接工程的利潤 scanf (%ld, /輸出結(jié)果 ,運(yùn)行結(jié)果: Input profit: 4000 salary = 1100.00,方法二:使用if語句,0.1默認(rèn)為double型,不進(jìn)行強(qiáng)制類型轉(zhuǎn)換將產(chǎn)生警告信息!,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循

19、環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),方法三:使用switch語句,算法設(shè)計(jì)要點(diǎn): 為使用switch語句,必須將利潤profit與提成的關(guān)系轉(zhuǎn)換成某些整數(shù)與提成的關(guān)系。分析本題可知,提成的變化點(diǎn)都是1000的整數(shù)倍(1000、2000、5000、),如果將利潤profit整除1000,則當(dāng): profit 1000 對應(yīng)0、1 1000 profit 2000 對應(yīng)1、2 2000 profit 5000 對應(yīng)2、3、4、5 5000 profit 10000 對應(yīng)5、6、7、8、9、10 10000 profit 對應(yīng)10、11、12、 為解決相鄰兩個區(qū)間的重疊問題,最簡單

20、的方法就是:利潤profit先減1(最小增量),然后再整除1000即可: profit 1000 對應(yīng)0 1000 profit 2000 對應(yīng)1 2000 profit 5000 對應(yīng)2、3、4 5000 profit 10000 對應(yīng)5、6、7、8、9 10000 profit 對應(yīng)10、11、12、,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),#include void main ( ) long profit; /所接工程的利潤 int grade; float ratio; /提成比率 float salary = 500; /薪水

21、,初始值為保底薪水500 printf (Input profit: ); /提示輸入所接工程的利潤 scanf (%ld, /輸入所接工程的利潤,方法三:使用switch語句,/將利潤-1、再整除1000,轉(zhuǎn)化成switch語句中的case標(biāo)號 grade = (profit - 1) / 1000; switch ( grade ) /計(jì)算提成比率 case 0: ratio = 0; break; / profit1000 case 1: ratio = (float)0.10; break; / 1000profit2000 case 2: case 3: case 4: ratio

22、= (float)0.15; break; / 2000profit5000 case 5: case 6: case 7: case 8: case 9: ratio = (float)0.20; break; / 5000profit10000 default: ratio = (float)0.25; / 10000profit salary += profit * ratio; /計(jì)算當(dāng)月薪水 printf (salary = %.2fn, salary); /輸出結(jié)果 ,運(yùn)行結(jié)果: Input profit: 4000 salary = 1100.00,C語言程序設(shè)計(jì)教程 第三章 順

23、序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),【例2】寫一程序,從鍵盤上輸入1年份year(4位十進(jìn)制數(shù)),判斷其是否閏年。閏年的條件是:能被4整除、但不能被100整除,或者能被400整除。,程序應(yīng)該這樣來設(shè)計(jì): 如果能被整除,則余數(shù)為,即如果的值等于,則表示能被整除! 首先將是否閏年的標(biāo)志leap預(yù)置為0(非閏年),這樣僅當(dāng)year為閏年時,將leap置為1即可。這種處理兩種狀態(tài)值的方法,對優(yōu)化算法和提高程序可讀性非常有效,請讀者仔細(xì)體會。,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),#include void main

24、 ( ) int year, leap = 0; / leap=0:預(yù)置為非閏年 printf (Please input the year: ); /提示輸入年份 scanf (“%d”, ,運(yùn)行結(jié)果: Please input the year: 2008 2008 is a leap year.,判斷是否為閏年,if ( ( year % 4 = 0 ,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),【例3】寫一程序,從鍵盤上輸入任意兩個數(shù)和一運(yùn)算符(+:加,-:減,*:乘,/:除),計(jì)算其運(yùn)算的結(jié)果并輸出 。,程序應(yīng)該這樣來設(shè)計(jì): 首先輸

25、入兩個數(shù)和一運(yùn)算符號,然后根據(jù)運(yùn)算符號來做相應(yīng)的運(yùn)算,但是在做除法運(yùn)算時,應(yīng)判別除數(shù)是否為0,如果為0,運(yùn)算非法,給出提示信息。如果運(yùn)算符號不是+、-、*、/則同樣是非法的,也應(yīng)給出提示信息。其它情況,輸出運(yùn)算的結(jié)果。,C語言程序設(shè)計(jì)教程 第三章 順序 選擇 循環(huán)結(jié)構(gòu),C語言程序設(shè)計(jì)教程 第四章 選擇結(jié)構(gòu)程序設(shè)計(jì),#include void main ( ) float a, b; /存放兩個數(shù)的變量 int tag = 0; /運(yùn)算合法的標(biāo)志,0-合法,1-非法 char ch; /運(yùn)算符變量 float result; /運(yùn)算結(jié)果變量 printf (input two number: ); /提示輸入兩個數(shù) scanf (%f%f, /輸入運(yùn)算符,switch ( ch ) /根據(jù)運(yùn)算符來進(jìn)行相關(guān)的運(yùn)算 cas

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論