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頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第四章 分支結(jié)構(gòu)程序設(shè)計,回首坦途的路,例3:求方程 ax2 + bx + c = 0 的根。,求解過程: ax2 + bx + c = 0,x1 = (-b + dt ) / 2a x2 = (-b - dt ) / 2a,說明: 1、C中不能用上下標 2、求平方根需要使用數(shù)學函數(shù)庫,問題分析: 設(shè) b 24ac 0 , 輸入 a , b, c 的值, 輸出方程的根。,#include #include void main( ) float a, b, c, x1, x2, dt; printf (輸入 a, b, c: ) ; scanf (%f %f %f, ,程序結(jié)構(gòu): 選擇結(jié)構(gòu)程序設(shè)

2、計(分支),條件語句( if ) 開關(guān)語句 ( switch ),if 語 句: 用 if 語句可以構(gòu)成分支結(jié)構(gòu)。 作用:判斷所給定的條件滿足與否,根據(jù)結(jié)果決定程序的流向。,一、if 語句的三種形式 . 簡單分支(單分支) 格式 : if (表達式) 語句 ; 例1: if(xy) y=x;,工作過程圖 :,main() int a,b,max; printf(n input two numbers: ); scanf(%d%d, ,例2:,格式:if (表達式) 語句; else 語句 2;,2. 雙分支選擇結(jié)構(gòu)的一種最常用形式,工作過程圖 :,例2: if(xy) printf(“ %d

3、”, x); else printf(“ %d ”, y);,main() int a, b; printf(input two numbers: ); scanf(%d%d, ,例2:,if (表達式) 語句1 else 語句2,if (表達式) 語句1,if (表達式) 語句 1; else if(表達式2) 語句 2; else if(表達式3) 語句 3; else if(表達式m) 語句 m; else 語句 n ;,3.多分支if的一種擴展形式,工作過程圖:,例: if (num500) cost=.15; else if (num300) cost=.10; else if (n

4、um100) cost=.075; else if (num50) cost=.05; else cost=0;,#include stdio.h main() char c; printf(input a character: ); c=getchar(); if(c=0 ,例:,(1)三種形式的if語句中,if關(guān)鍵詞后面均為表達式。通常為關(guān)系表達式或邏輯表達式。也可以是其它表達式,如賦值表達式,甚至也可以是一個變量。 例:if (a=5) 語句;或 if (b) 語句;均為合法用法,(2)if 后的條件判斷表達式一定用圓括號括起來。,使用if語句時注意:,(3)三種形式中所用的為單個語句表

5、示, 具體實際若為一組語句一定用 括起來,組成語句塊。但需注意 后不可用 “;”號。,例如:if (ab) a+; b+; else a=0;b=10;,復合語句 /語句塊(Block),括住的若干條語句構(gòu)成一個語句塊 語句塊內(nèi)可以定義變量 變量必須在語句塊的開頭定義 變量僅在定義它的語句塊內(nèi)有效 同一個語句塊內(nèi)的變量不可同名,不同語句塊可以同名 各司其職、下層優(yōu)先 盡量不要在下層語句塊內(nèi)定義變量,也盡量不要定義同名變量,二、if 語句的嵌套:,一般形式: if (表達式1) else,if (表達式2) 語句1 內(nèi)嵌 else 語句 2 if 語句,if 語句中又含有if 語句的形式稱為 i

6、f 語句的嵌套。,if (表達式3) 語句3 內(nèi)嵌 else 語句4 if 語句,說明: 每一個 if 與 else 相匹配,也可能不與 else 相匹配;但是每一個else 必須與一個 if 相匹配。 Else與if 匹配的原則是: 最后的else總是與它上面最近的if 配對。 多分支及分支嵌套應采用縮排方式,以增加程序的可讀性。,if else 配對原則:,缺省 時,else總是和它上面離它最近的未配對的if配對,if (n6) if (nn6n”); else printf(“n=6n”);,分析如下程序段:,4.4程序舉例,#include #include main() float

7、a,b,c,s,area; printf(“please input a,b,c:”); scanf(%f,%f,%f, ,例1: 輸入三角形邊長,判斷能否構(gòu)成三角形,若能求面積,否則 輸出錯誤信息。,運行結(jié)果1: please input a,b,c:3,4,6 area= 5.33,運行結(jié)果2: please input a,b,c: 3,1,7 input errer,Switch 語句(開關(guān)語句),多路選擇 switch語句是多分支選擇語句,可用嵌套的if語句處理,但降低了可讀性。 當分支數(shù)大于三種時,常采用開關(guān)語句簡化程序設(shè)計。,一般形式:,switch ( 表達式) case 常量

8、表達式1: 語句組 1; break; case 常量表達式2: 語句組 2; break; . case 常量表達式n: 語句組 n; break; default: 語句組 ; break; ,執(zhí)行過程:,例 switch(score) case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); ,運行結(jié)果:score為5時,輸出: Very good! Good! Pass!

9、 Fail! data error!,使用switch語句需注意:,1、csae后面的各常量表達式的值不能相同。一般為整型、字符型或枚舉型。每個case后面的常量表達式類型應與switch后括號內(nèi)表達式類型一致 2、程序執(zhí)行到switch語句時,先計算表達式的值,再自上而下尋找與該值匹配的case常量,找到后則執(zhí)行此case后的語句。 對后續(xù)case直接執(zhí)行,不再進行判斷,直到遇break語句或 右花括號為止。 3、若 case后面的語句省略不寫,則表示它與后續(xù)case執(zhí)行相同的語句。,4、 csae后面的 常量表達式不能用一個區(qū)間表示,也不能出現(xiàn) 任何運算符。 例: csae 90=scor

10、e=100:語句; case 90100:語句;,5、case后面可以有多個語句 。 6、各case和default子句的先后順序可隨意。從執(zhí)行效率的角度出發(fā),通常將發(fā)生頻率教高的情況放在前面。 default子句可以省略 7、常量表達式僅起一個語句標號作用。 8、switch語句和 break語句配合才構(gòu)成真正意義上的分支。 break語句的作用是跳出switch結(jié)構(gòu)。,switch和else-if的比較,else-if比switch的條件控制更強大一些 else-if可以依照各種邏輯運算的結(jié)果進行流程控制 switch只能進行=判斷,并且只能是整數(shù)判斷 switch比else-if更清晰

11、兩者都要盡量避免用得過多、過長,尤其不要嵌套得太多 它們大大增加程序的分支,使邏輯關(guān)系顯得混亂,不易維護,易出錯,總結(jié) :選擇結(jié)構(gòu),二分支選擇結(jié)構(gòu),多分支選擇結(jié)構(gòu),【例】求一元二次方程ax2+bx+c=0的根。,思路:一元二次方程的根取決于系數(shù)a,b,c 求根公式:,判別式d = b2- 4ac 當 d = 0時,方程有兩個相等的實根: x1=x2=-b/(2*a) 當d 0時,方程有兩個不相等的實根: x1=(-b+sqrt(d)/(2*a) x2=(-b-sqrt(d)/(2*a) 當d 0時,方程有兩個虛根: x1=jp+ipi x2=jp-ipi,實部 jp=-b/(2*a) 虛部 ip=sqrt(-d)/(2*a),#include math.h main( ) float a,b,c,d,x1,x2,lp,ip; scanf(%f%f%f, ,else if (d1e-6) /* 不相等的實根 */ x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf(has two real roots:n

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論