第三章順序及分支程序設(shè)計(jì)_第1頁
第三章順序及分支程序設(shè)計(jì)_第2頁
第三章順序及分支程序設(shè)計(jì)_第3頁
第三章順序及分支程序設(shè)計(jì)_第4頁
第三章順序及分支程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第3章 順序及分支程序設(shè)計(jì),本章重點(diǎn): 1、復(fù)合語句 2、if 語句 3、ifelse語句 4、嵌套的if及ifelse語句 5、常見錯誤,31 語句概述,語句是一個程序的主要構(gòu)成部分。在C語言里, 一個語句是在結(jié)尾處用分號結(jié)束的。根據(jù)語句功能或構(gòu)成的不同,C語言語句可分為五類: 1表達(dá)式語句 2空語句 3函數(shù)調(diào)用語句 4復(fù)合語句 5控制語句,1表達(dá)式語句 表達(dá)式語句由表達(dá)式加上分號“;”就構(gòu)成了一個語句。事實(shí)上,C語言中有使用價(jià)值的表達(dá)式語句主要有3種: (1)賦值語句。例如:sum=x+y; (2)自加自減運(yùn)算符構(gòu)成的表達(dá)式語句。例如:i+; (3)逗號表達(dá)式語句。例如:x=1,y=1;

2、2空語句,光有一個分號“;”,作為語句結(jié)束符,它表示什么也不做。,3函數(shù)調(diào)用語句 函數(shù)調(diào)用語句是由一次函數(shù)調(diào)用加一個分號“;”構(gòu)成。例如: printf (Printf is a C function ); 其實(shí)“函數(shù)調(diào)用語句”也是一種表達(dá)式語句,只是為了便于理解和使用,我們把“函數(shù)調(diào)用語句”單獨(dú)作為一種語句。,4復(fù)合語句 把多個語句用括號 括起來組成的一個語句稱復(fù)合語句。 在程序中應(yīng)把復(fù)合語句看成是單條語句,而不是多條語句,例如: x=y+z; a=b+c; printf(“%d%d”,x,a); 是一條復(fù)合語句。復(fù)合語句內(nèi)的各條語句都必須以分號“;”結(jié)尾,在括號“”外不能加分號。,5控制語

3、句 控制語句用于控制程序的流程, 以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式。它們由特定的語句定義符組成。語言有九種控制語句。 可分成以下三類: (1) 選擇控制語句 if語句,switch語句 (2) 循環(huán)執(zhí)行語句 do while語句,while語句,for語句 (3) 轉(zhuǎn)向語句 break語句,goto語句,continue語句,return語句,32 問題的引出 (順序程序示例),例3.1有三個電阻并聯(lián),其阻值分別為10、25、50,求并聯(lián)后的電阻。計(jì)算并聯(lián)電阻的公式是:,#include stdio.h main() float r,r1,r2,r3; r1=10; r2=25; r3=50; r=1

4、/(1/r1+1/r2+1/r3); printf(并聯(lián)電阻r=%8.2fn,r); 程序運(yùn)行結(jié)果: 并聯(lián)電阻r= 6.25,33 if 語句,331 if語句的一般形式 C語言中有一種特有的條件運(yùn)算符“ ? : ”,其格式為:c?e1:e2 。若條件c成立,即為真,則取e1的值,否則取e2的值。 此條件運(yùn)算符在某種程度上可以起到邏輯判斷的作用,我們可以用條件運(yùn)算符來解決一些問題。例如:,例3.2 求分段函數(shù)的值。 #include math.h #include stdio.h main() float x,y; /*變量y存放f(x)的值*/ printf(請輸入x的值:); scanf(

5、%f, ,程序運(yùn)行結(jié)果: 請輸入x的值:2 當(dāng)x=2.000000時,f(x)=2.236068,例3.3 任意輸入兩個整數(shù),請按降序輸出這兩個數(shù)。 #include stdio.h main ( ) int a,b; printf(請輸入兩個整數(shù)(a,b):); scanf(%d,%d, /*條件不成立則執(zhí)行語句2 */ ,if 語句的一般格式: if() else ,其語義是,若表達(dá)式的值不為零,則執(zhí)行,否則,執(zhí)行。此處的和可以是任何形式的語句。if-else構(gòu)作了一個兩路分支結(jié)構(gòu)。,332 if-else中的復(fù)合語句 如果兩個分支中需要執(zhí)行的語句不止一條,必須用“ ”括起來,作為一個復(fù)合

6、語句使用,若只有一條語句,“ ”可以省略。 例3.4 已知實(shí)數(shù)a,b,計(jì)算u=(r+s)2, v=(r+s)3的值。 這里: 當(dāng)ab時,r=a2-b2,s=a/b 當(dāng)ab時,r=b2-a2,s=a/b+4,#include stdio.h main() float a,b,u,v,s,r; printf(請輸入實(shí)數(shù)a,b:); scanf(%f,%f, ,if 語句的一般格式: if() else ,分析語法錯誤: if(ab) r=a*a-b*b; s=a/b; else r=b*b-a*a; s=a/b+4; ,if 語句的一般格式: if() else ,分析語法錯誤: if(ab) r

7、=a*a-b*b; s=a/b; ; else r=b*b-a*a; s=a/b+4; ,if 語句的一般格式: if() else ,分析邏輯錯誤: 若ab成立,哪幾條語句執(zhí)行? if(ab) r=a*a-b*b; s=a/b; else r=b*b-a*a; s=a/b+4;,1,2,3,注意事項(xiàng):,(1)if后面的一定要有括號,這是語法約定。,(2)允許只使用if語句,沒有else;但程序中不可以沒有if而只有else;,(3)只能執(zhí)行與if有關(guān)的語句或者只執(zhí)行與else有關(guān)的語句,而不可能同時執(zhí)行兩者。,(4)復(fù)合語句內(nèi)的各條語句都必須以分號“;”結(jié)尾,在括號“”外不能加分號;,(5)

8、if語句的表達(dá)式可以是任意類型的C語言的合法的表達(dá)式,但計(jì)算結(jié)果必須為整型、字符型或浮點(diǎn)型之一。,333 if 語句的表達(dá)式,C語言沒有邏輯型數(shù)據(jù),用非0的數(shù)表示“真”,而用0表示“假”,只有表達(dá)式的值為“真”時,才執(zhí)行相對應(yīng)的分支語句。,構(gòu)成表達(dá)式的運(yùn)算符可以是算術(shù)運(yùn)算符,關(guān)系運(yùn)算符和邏輯運(yùn)算符。,關(guān)系運(yùn)算符包括大于()、小于(=)、小于等于(=)和不等于(!=)六種,用于比較運(yùn)算,其運(yùn)算值用整數(shù)1表示“真”,用整數(shù)0表示“假”。,邏輯運(yùn)算符包括與( scanf(%d, ,括號(),邏輯非,算術(shù)運(yùn)算符,關(guān)系運(yùn)算符,邏輯與,邏輯或,賦值運(yùn)算符,高 低,圖3-1閏年表達(dá)式計(jì)算分析,if(year

9、%4=0 scanf(%d, ,例3.7 輸入任意三個整數(shù)a、b、c,求三個數(shù)中的最大值。,34 if語句的嵌套,#include stdio.h main() int a,b,c,max; printf(請輸入a,b,c:); scanf(%d,%d,%d, ,在一個if語句的分支語句中又包含另一個if語句,從而構(gòu)成了if語句的嵌套使用。,從后往前,(1)else與前面最接近的if配對。(2)復(fù)合語句外的else不能與復(fù)合語句內(nèi)的if配對,342 流程圖(自學(xué)) 表3-2 流程圖圖形符號,343 if與else的配對規(guī)則 C語言規(guī)定:else與前面最接近它而還沒有和其他else語句配對的if

10、語句配對。 同時從書寫格式上也要注意,要有層次感,好的程序員應(yīng)該養(yǎng)成這一習(xí)慣,以便他人理解你的程序和自己將來的修改。 例挑選三個數(shù)中最大的一個數(shù),/*錯誤寫法*/ /*正確寫法*/,(2)復(fù)合語句外的else不能與復(fù)合語句內(nèi)的if配對,從后往前,(1)else與前面最接近的if配對,例3.10 求解一元二次解方程:,運(yùn)用結(jié)構(gòu)化程序設(shè)計(jì)思想:先整體后局部,輸入a,b,c; 計(jì)算delta; 根據(jù)delta的不同情況計(jì)算并輸出根;,1,2,3,if(delta0) else,3_1,if(delta0) else if(delta0) else ,偽代碼,#include #include mai

11、n() float a,b,c,delta; printf(請輸入方程系數(shù)a,b,c:); scanf(%f,%f,%f,if(delta0) else if(delta0) else ,r1=(-b+sqrt(delta)/2/a; r2= =(-b-sqrt(delta)/2/a;,r=b/2/a; Im=sqrt(-delta);,r=-b/2/a;,1,2,3,1,2,3,#include #include main() float a,b,c,delta,x1,x2,realpart,imagpart; printf(請輸入方程系數(shù)a,b,c:); scanf(%f,%f,%f, e

12、lse if(delta1e-6), x1=(-b+sqrt(delta)/(2*a); x2=(-b-sqrt(delta)/(2*a); printf(“有兩個不相等的實(shí)根:%8.4f和%8.4fn,x1,x2); else realpart=-b/(2*a); imagpart=sqrt(-delta)/(2*a); printf(有兩個不相等的虛根:n); printf(%8.4f+%8.4fin,realpart,imagpart); printf(%8.4f-%8.4fin,realpart,imagpart); ,35 switch 語句,if語句只能實(shí)現(xiàn)兩路分支,在兩者中選擇其

13、一。雖然嵌套的if語句可以實(shí)現(xiàn)多路檢驗(yàn),但有時不夠簡潔。為此C語言提供了實(shí)現(xiàn)多路選擇的另一個語句switch,稱為開關(guān)語句。下面,我們來看一個用switch語句編寫的具有多路分支的程序。,例3.11 模擬計(jì)算器的功能。編寫一個程序,能夠根據(jù)用戶輸入的運(yùn)算符,對兩個數(shù)進(jìn)行運(yùn)算。流程圖如3-5所示。源程序如下:,#include stdio.h main() float x,y; /*存放兩個運(yùn)算符分量*/ char operator; /*存放運(yùn)算符*/ printf (請輸入x,運(yùn)算符,y:); scanf (%f%c%f,switch(operator) case +: printf (%.2f%c%.2f=%.2fn,x,operator,y,x+y); break; case -: printf (%.2f%c%.2f=%.2fn,x,operator,y,x-y); break; case

溫馨提示

  • 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

提交評論