C語(yǔ)言第4章選擇結(jié)構(gòu).ppt_第1頁(yè)
C語(yǔ)言第4章選擇結(jié)構(gòu).ppt_第2頁(yè)
C語(yǔ)言第4章選擇結(jié)構(gòu).ppt_第3頁(yè)
C語(yǔ)言第4章選擇結(jié)構(gòu).ppt_第4頁(yè)
C語(yǔ)言第4章選擇結(jié)構(gòu).ppt_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第4章 選擇結(jié)構(gòu)程序設(shè)計(jì),華北電力大學(xué) 計(jì)算機(jī)系,C 語(yǔ)言程序設(shè)計(jì),2020/8/4,2,本章主要內(nèi)容,4.1 if語(yǔ)句 4.1.1 if語(yǔ)句的一般形式 4.1.2 if語(yǔ)句的嵌套 4.2 switch語(yǔ)句 4.2.1 switch語(yǔ)句的一般形式 4.2.2 break語(yǔ)句 4.3 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例,2020/8/4,3,單分支語(yǔ)句,語(yǔ)句一般格式 if (表達(dá)式) 語(yǔ)句,功能: 計(jì)算表達(dá)式的值,如果是一個(gè)非0值(即邏輯真),就執(zhí)行內(nèi)嵌語(yǔ)句,否則(即邏輯假)跳過(guò)內(nèi)嵌語(yǔ)句,順序執(zhí)行后續(xù)語(yǔ)句。,2020/8/4,4,單分支語(yǔ)句的算法:,例如: if (x0) m+; if ( ab ) c=a;

2、 a=b; b=c; ,2020/8/4,5,雙分支語(yǔ)句,語(yǔ)句一般格式 if (表達(dá)式) 語(yǔ)句1 else 語(yǔ)句2 功能: 計(jì)算表達(dá)式的值,如果它的值是一個(gè)非0值(邏輯真),就執(zhí)行內(nèi)嵌語(yǔ)句1,之后跳過(guò)內(nèi)嵌語(yǔ)句2,執(zhí)行后續(xù)語(yǔ)句;否則跳過(guò)內(nèi)嵌語(yǔ)句1,執(zhí)行內(nèi)嵌語(yǔ)句2,之后執(zhí)行后續(xù)語(yǔ)句。,2020/8/4,6,雙分支語(yǔ)句的算法:,例如: if (x0) m+; else m-; if ( ch= a ,2020/8/4,7,多分支語(yǔ)句,語(yǔ)句一般格式 if (表達(dá)式1) 語(yǔ)句1 else if (表達(dá)式2) 語(yǔ)句2 else if (表達(dá)式m) 語(yǔ)句m else 語(yǔ)句 n 功能: 依次計(jì)算并判斷表達(dá)式i

3、,為非0時(shí)執(zhí)行后面的語(yǔ)句,都為0時(shí),執(zhí)行語(yǔ)句n 無(wú)論執(zhí)行完哪個(gè)分支,都轉(zhuǎn)到后續(xù)語(yǔ)句,2020/8/4,8,多分支語(yǔ)句的算法,流程圖,表達(dá)式m ?,2020/8/4,9,多分支語(yǔ)句的算法,N-S結(jié)構(gòu)圖,例如: if (a0) x= -1 ; else if (a=0 ) x= 0 ; else x=1 ;,2020/8/4,10,if語(yǔ)句的簡(jiǎn)單應(yīng)用,【例4.1】輸入一個(gè)字符,如果是大寫字母,則將其轉(zhuǎn)換為小寫字母輸出,否則直接輸出。,輸入:用 getchar 或 scanf 函數(shù) ch是否為大寫字母: ch=A ch=getchar( ); if (ch=A ,程序運(yùn)行情況如下: G g,可使用條

4、件表達(dá)式代替,putchar(ch=A ,2020/8/4,12,4.1.2 if語(yǔ)句的嵌套,如果if的內(nèi)嵌語(yǔ)句中又使用了一個(gè)if語(yǔ)句,則構(gòu)成if語(yǔ)句的嵌套。,【例4.2】比較兩個(gè)整數(shù)的關(guān)系。 #include void main( ) int x, y; printf (Enter integer X and Y:); scanf (%d%d, ,應(yīng)該正確判斷: if的內(nèi)嵌語(yǔ)句 if和else的配對(duì),提倡縮格書寫 有利于閱讀程序,2020/8/4,13,if語(yǔ)句嵌套的形式,簡(jiǎn)單if語(yǔ)句的嵌套形式 if (表達(dá)式) if 語(yǔ)句 雙重(或多重)分支if語(yǔ)句的嵌套形式 if (表達(dá)式) if 語(yǔ)句

5、 else if 語(yǔ)句,可以是各種形式的if語(yǔ)句,可以是各種形式的if語(yǔ)句,如果是單分支if語(yǔ)句, 必須用“ ”括起,2020/8/4,14,例如:, if (c=50) printf(50=50) printf(50150n); if (c=50) printf(50=c=100n); else printf(c50n),與哪個(gè)if 配對(duì)?,2020/8/4,15,再例如:,if(ab) if(ac) if(ad) m=1; else m=2; else m=3;,問(wèn)題:哪一個(gè) else 和哪一個(gè) if 相匹配?,規(guī)則:在嵌套的ifelse語(yǔ)句中,else總是與上面的離它最近的尚未配對(duì)的if

6、 配對(duì)。,2020/8/4,16,舉例,【例4.3】輸入一個(gè)數(shù),判斷它是奇數(shù)還是偶數(shù),如果是奇數(shù)則進(jìn)一步判斷它是否為5的倍數(shù)。,2020/8/4,17,程序:,#include void main( ) int x; scanf (%d, ,2020/8/4,18,學(xué)習(xí)if語(yǔ)句的難點(diǎn),if else 語(yǔ)句的配對(duì) 正確用表達(dá)式描述條件 例如:當(dāng)x大于5小于10時(shí)令x自增 if ( 5x10 ) x+;,正確判斷內(nèi)嵌語(yǔ)句 例如:if(xy) x=x+3; y=y-2; else x=x-3; y=y+2;,if (x5 , , ,2020/8/4,19,熟悉常用的if 表達(dá)式形式,例如有定義:in

7、t a,b=0; a等于什么值時(shí),執(zhí)行b=2 ;語(yǔ)句? if (a=0) b=2; if (a=1) b=2; if (a!=0) b=2; if (a=1) b=2; if (a=0) b=2; if (a) b=2; if (!a) b=2;,等價(jià)于,等價(jià)于,2020/8/4,20,4.2 switch語(yǔ)句,switch語(yǔ)句的一般形式 switch (表達(dá)式) case 常量表達(dá)式1: 語(yǔ)句序列1 case 常量表達(dá)式2: 語(yǔ)句序列2 case 常量表達(dá)式n: 語(yǔ)句序列n default : 語(yǔ)句序列n+1 功能: 計(jì)算表達(dá)式的值,與常量表達(dá)式的值比較,等于第i個(gè)值時(shí),順序執(zhí)行語(yǔ)句序列i、

8、i+1、 、 n+1 若與所有常量表達(dá)式值都不相等,執(zhí)行語(yǔ)句序列n+1。,表達(dá)式的值必須為整數(shù),2020/8/4,21,switch語(yǔ)句的算法描述,N-S結(jié)構(gòu)圖,例如: switch (a) case 5: printf( ,當(dāng)a等于5,輸出: default: printf($); case 5: printf( ,switch與break語(yǔ)句結(jié)合才能實(shí)現(xiàn) 程序的分支,break; break; break;,2020/8/4,23,switch語(yǔ)句的簡(jiǎn)單應(yīng)用,【例4.4】已知x,y,要求輸入一個(gè)算術(shù)運(yùn)算符(+、-、* 或 / ),對(duì)x和y進(jìn)行指定的算術(shù)運(yùn)算。,思路: 設(shè)x和y為float型

9、變量并賦初值; 輸入的運(yùn)算符op為char型變量; 根據(jù)op的值(為+、-、*、/)進(jìn)行x和y的相加、相減、相乘、相除運(yùn)算(選擇分支); 還要考慮到輸入字符不是+、-、* 或 / 時(shí)的情況,2020/8/4,24,程序:,#include math.h #include stdio.h void main( ) float x=100,y=15,z; char op; int flag=1; scanf(“%f%c%f”, ,2020/8/4,25,注意:,switch語(yǔ)句的書寫格式:語(yǔ)句體本身必須用花括號(hào)括起;case和default后面如果有多條語(yǔ)句,則可以不必使用花括號(hào);case和常量表

10、達(dá)式之間必須有空格;default可以寫在語(yǔ)句體的任何位置,也可以省略不寫 break語(yǔ)句可以改變case的語(yǔ)句標(biāo)號(hào)作用,終止后續(xù)case語(yǔ)句序列的執(zhí)行。 switch語(yǔ)句和break語(yǔ)句結(jié)合,可以實(shí)現(xiàn)程序的選擇控制(break語(yǔ)句還可以在循環(huán)語(yǔ)句中使用) 允許switch嵌套使用,但同一個(gè)switch語(yǔ)句中,任意兩個(gè)case的常量表達(dá)式值不能相同。,2020/8/4,26,4.3 選擇結(jié)構(gòu)程序設(shè)計(jì)舉例,【例4.5】求一元二次方程ax2+bx+c=0的根。,思路:一元二次方程的根取決于系數(shù)a,b,c 求根公式:,判別式d = b2- 4ac 當(dāng) d = 0時(shí),方程有兩個(gè)相等的實(shí)根: x1=x2

11、=-b/(2*a) 當(dāng)d 0時(shí),方程有兩個(gè)不相等的實(shí)根: x1=(-b+sqrt(d)/(2*a) x2=(-b-sqrt(d)/(2*a) 當(dāng)d 0時(shí),方程有兩個(gè)虛根: x1=jp+ipi x2=jp-ipi,實(shí)部 jp=-b/(2*a) 虛部 ip=sqrt(-d)/(2*a),2020/8/4,27,算法:,2020/8/4,28,程序:,#include #include void main( ) float a,b,c,d,x1,x2,lp,ip; scanf(%f%f%f, ,2020/8/4,29,程序(續(xù)):,else if (d1e-6) /* 不相等的實(shí)根 */ x1=(-

12、b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf(has two real roots:n) ; printf(x1=%8.4f, x2=%8.4fn,x1,x2); else /* 虛根 */ lp=-b/(2*a);ip=sqrt(-d)/(2*a); printf(has two complex roots: n); printf(x1=%8.4f+%8.4fin,lp,ip); printf(x2=%8.4f-%8.4fin,lp,ip); ,2020/8/4,30,舉例(續(xù)):,【例4.6】輸入年份,判別該年是否為閏年。,思路:年份year為閏年的條件為 能夠被4整除,但不能被100整除的年份; 能夠被400整除的年份。 只要滿足任意一個(gè)就可以確定它是閏年。 例如: 1996年、2000年是閏年 1998年、1900年不是閏年,設(shè)定標(biāo)志變量leap,只要符合其中一個(gè)條件的就是閏年,令 leap =1;否則令 leap=0,2020/8/4,31,算法:,year%4=0 scanf(%d, ,2020/8/4,33,例題:,已

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論