




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第二章 程序的流程控制,2.1 選擇(分支)結(jié)構(gòu),2.1.1 關(guān)系運算符與邏輯運算符 C的關(guān)系運算符如下: 大于 = 大于等于 99 返回1 10(2+10) 返回0,2.0 算法的表示,2.1 算法的概念,算法是對特定問題求解步驟的一種描述,也是解決問題的辦法,它是指令的有限序列,其中每一條指令表示一個或多個操作。,自然語言 流程圖 N-S圖 偽代碼 PAD圖,2.2 算法的表示,2.0 算法的表示,2.2 算法的表示-流程圖,2.0 算法的表示,程序的三種基本結(jié)構(gòu),1.順序結(jié)構(gòu),2.2 算法的表示-流程圖,2.0 算法的表示,程序的三種基本結(jié)構(gòu),2.2 算法的表示-流程圖,2.選擇序結(jié)構(gòu),
2、2.0 算法的表示,程序的三種基本結(jié)構(gòu),2.2 算法的表示-流程圖,3.循環(huán)序結(jié)構(gòu),1.當(dāng)型(while型)循環(huán)結(jié)構(gòu),2.直到型(until型)循環(huán)結(jié)構(gòu),2.0 算法的表示,2.1 選擇(分支)結(jié)構(gòu),2.1.1 關(guān)系運算符與邏輯運算符 C的邏輯運算符如下: ! 邏輯非 else 語句2; 上述結(jié)構(gòu)表示: 如果表達式的值為非0(true)即真, 則執(zhí)行語句1, 執(zhí)行完語句1從語句2后開始繼續(xù)向下執(zhí)行; 如果表達式的值為0(false)即假, 則跳過語句 1而執(zhí)行語句2。所謂表達式是指關(guān)系表達式和邏輯表達式的結(jié)合式。 注意: 1. 條件執(zhí)行語句中“else 語句2;”部分是選擇項, 可以缺省, 此
3、時條件語句 變成: if(表達式) 語句1; 表示若表達式的值為非0則執(zhí)行語句1 , 否則跳過語句1繼續(xù)執(zhí)行。 2. 如果語句1或語句2有多于一條語句要執(zhí)行時, 必須使用和 把這些 語句包括在其中, 此時條件語句形式為: if(表達式) 語句體1; else 語句體2; ,2.1 選擇(分支)結(jié)構(gòu),2.1.2 if()else結(jié)構(gòu) 注意: if(表達式) 語句體1; else 語句體2; 3. 條件語句可以嵌套, 這種情況經(jīng)常碰到, 但條件嵌套語句容易出錯, 其原因主要是不知道哪個if對應(yīng)哪個else。 例如: if( x 20 | x x) printf(Good); else printf
4、(Bad); 對于上述情況, C規(guī)定: else語句與最近的一個if語句匹配, 上例 中的else與if( y x)相匹配。為了使else與if( x 20 | x 20 | x x) printf(Good); else printf(Bad);,2.1 選擇(分支)結(jié)構(gòu),2.1.2 if()else結(jié)構(gòu) 例2.1 符號函數(shù) int main(void) float x; int y=-1; printf(“input x:”); scanf(“%f”, ,2.1 選擇(分支)結(jié)構(gòu),2.1.3 條件運算符與條件表達式 條件表達式:e1 ? e2 : e3 例如: a=(x0) ? (x+)
5、: (x-) 相當(dāng)于 if(x0) a=x+; else a=x-;,2.1 選擇(分支)結(jié)構(gòu),2.1.2 if()else結(jié)構(gòu) 例2.2 數(shù)據(jù)分段處理,049為 A 段, 50119為 B 段,120169為 C 段 int main(void) int y; char result; printf(“input y:”); scanf(“%d”, ,2.1 選擇(分支)結(jié)構(gòu),2.1.3 switch結(jié)構(gòu) 在編寫程序時, 經(jīng)常會碰到按不同情況分轉(zhuǎn)的多路問題, 這時可用嵌套if -else-fi語句來實現(xiàn), 但if-else-if語句使用不方便, 并且容易出錯。對這種情 況, C提供了一個開關(guān)
6、語句。 開關(guān)語句格式為: switch(變量) case 常量1: 語句1或空; case 常量2: 語句2或空; . . . case 常量n; 語句n或空; default: 語句n+1或空; ,2.1 選擇(分支)結(jié)構(gòu),執(zhí)行switch開關(guān)語句時, 將變量逐個與case后的常量進行比較, 若與其中一 個相等, 則執(zhí)行該常量下的語句, 若不與任何一個常量相等, 則執(zhí)行default 后 面的語句。 注意: 1. switch中變量可以是數(shù)值, 也可以是字符。 2. 可以省略一些case和default。 3. 每個 case 或default后的語句可以是語句體, 但不需要使用和括起 來。
7、,2.1.3 switch結(jié)構(gòu) 下例的 switch 中變量為整數(shù)型。 例 2.3 int main(void) int test; for(test=0; test=10; test+) switch(test) /*變量為整型數(shù)的開關(guān)語句*/ case 1: printf(%dn, test); break; /*退出開關(guān)語句*/ case 2: printf(%dn, test); break; case 3: printf(%dn, test); break; default: puts(Error); break; ,switch中變量也可為字符,2.1 選擇(分支)結(jié)構(gòu),2.2 循
8、環(huán)結(jié)構(gòu),for語句的一般形式為: for(表達式1;表達式2;表達式3) 循環(huán)體 它的執(zhí)行過程如下: (1) 先求解表達式1; (2) 求解表達式2,若其值為真(非0),則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面第(3)步,若為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。 (3)若表達式為真,在執(zhí)行指定的語句后,求解表達式3。 (4)轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。 (5)執(zhí)行for語句下面的一個語句。,2.2.1 for結(jié)構(gòu),2.2.1 for結(jié)構(gòu),2.2 循環(huán)結(jié)構(gòu),2.2.1 for結(jié)構(gòu),例如:計算123100? for(i=1;i=100;i+) sum=sum+i; 相當(dāng)于以下的while
9、語句: i=1; while(i=100) sum=sum+i; i+; for語句的一般形式用while語句來表示為: 表達式1 while(表達式2) 語句 表達式3; ,2.2 循環(huán)結(jié)構(gòu),2.2.1 for結(jié)構(gòu),for語句中表達式1可以省略,其后的分號不能省略介,此時應(yīng)在for語句之前給循環(huán)變量賦初值 。如: for( ; i=100 ; i+) sum=sum+i; 執(zhí)行時,跳過“求解表達式1”這一步,其它不變。 2如果表達式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進行下去。也就是認(rèn)為表達式2始終為真。 如: for( i=1 ; ; i+) sum=sum+i;,2.2 循環(huán)結(jié)構(gòu),2.
10、2.1 for結(jié)構(gòu),3表達式3也可以省略,但此時程序設(shè)計者應(yīng)另外設(shè)法保證循環(huán)能正常結(jié)束。 如: for(sum0,i1 ;i100 ;) sumsum十i; i+; 本例把i+的操作不放在for語句的表達式3的位置處,而作為循環(huán)體的一部分,效果是一樣的,都能使循環(huán)正常結(jié)束。,4可以省略表達式1和表達式3,只有表達式2,即只給循環(huán)條件。 如: for(;i100;) sumsum+i;i+; 相當(dāng)于:,5三個表達式都可省略,如 for (;)語句,2.2 循環(huán)結(jié)構(gòu),2.2.2 while結(jié)構(gòu)和dowhile結(jié)構(gòu),while語句用來實現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。其一般形式如下: whi1e (表達式E)
11、循環(huán)體 ;,執(zhí)行過程: 計算表達式E的值 若E為非0, 則執(zhí)行語句s, 然后轉(zhuǎn) 若E為0, 則退出循環(huán), 執(zhí)行該循環(huán)后的語句,特點: 先判斷表達式,后執(zhí)行語句, 因此, 若進入while循環(huán)時E的值就是0,則語句S一次也不執(zhí)行,2.2 循環(huán)結(jié)構(gòu),2.2.2 while結(jié)構(gòu)和dowhile結(jié)構(gòu),例如:計算123100? int main(void) int i, sum=0; i=1; while (i=100) sum+=i; i+; printf (“sum=%d”,sum) ; ,2.2 循環(huán)結(jié)構(gòu),2.2.2 while結(jié)構(gòu)和dowhile結(jié)構(gòu),do-while語句用來實現(xiàn)“直到型”循環(huán)結(jié)
12、構(gòu)。其一般形式為:,do 循環(huán)體 while (表達式E);,執(zhí)行過程: 執(zhí)行循環(huán)體S 計算E值 若E的值為真(非0), 則轉(zhuǎn) 若E的值為假(0), 則結(jié)束循環(huán),特點: 先執(zhí)行循環(huán)體,再判斷表達式,因此循環(huán)體至少執(zhí)行一次。,2.2 循環(huán)結(jié)構(gòu),例如:計算123100? main( ) int i, sum=0; i=1; do sum+=i; i+; while (i=100); printf (“sum=%d”,sum) ; ,2.2.2 while結(jié)構(gòu)和dowhile結(jié)構(gòu),while循環(huán)和dowhile循環(huán)的區(qū)別在于: a.它們執(zhí)行循環(huán)體與計算表達式的先后順序不同,dowhile先執(zhí)行循環(huán)體
13、,再計算表達式;while循環(huán)為先計算表達式,表達式的結(jié)果為非零值,則執(zhí)行循環(huán)體語句。 b. dowhile至少要執(zhí)行一次循環(huán)體。while執(zhí)行循環(huán)體的次數(shù)可能為零次或若干次。,2.2 循環(huán)結(jié)構(gòu),猴子吃桃問題:猴子第一天摘下若干個桃子,當(dāng)即吃了一半,還不癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少個桃子。,main()int day,x1,x2; /*x1是今天,x2是昨天*/day=9;x2=1;while(day0) x1=(x2+1)*2;/*第一天的桃子數(shù)是第2
14、天桃子數(shù)加1后的2倍*/ x2=x1; day-;printf(the total is %dn,x1);,2.2.2 while結(jié)構(gòu)和dowhile結(jié)構(gòu),2.2 循環(huán)結(jié)構(gòu),本節(jié)課新內(nèi)容到此結(jié)束,后面的內(nèi)容為下一節(jié),2.2.3 循環(huán)嵌套,一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套. 三種循環(huán)(whi1e循環(huán)、do-whi1e循環(huán)和for循環(huán))可以互相嵌套。例如,下面幾種都是合法的形式: (1) while() (3)for(;) for(;) while() . . (2) do (4)while() . . do do while(); . while()
15、; while(); ,2.2 循環(huán)結(jié)構(gòu),2.2.4 break語句和continue語句,1 break語句 break語句可以使流程跳出switch結(jié)構(gòu),繼續(xù)執(zhí)行switch語句下面的一個語句。break語句還可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句。如 for(r=1; r100) break; printf(” area%f”,area); break語句的一般形式: break; 注意:break語句只能用于循環(huán)語句和switch語句。,2.2 循環(huán)結(jié)構(gòu),2.2.4 break語句和continue語句,2 continue語句 一般形式為 continu
16、e; 其作用為結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進行下一次是否執(zhí)行循環(huán)的判定。,continue語句和break語句的區(qū)別是:continue語句只結(jié)束本次循環(huán),而不是終止整個循環(huán)的執(zhí)行,而break語句則是結(jié)束本層循環(huán),不再進行條件判斷。如果有以下兩個循環(huán)結(jié)構(gòu): (1)while (表達式1) (2) while (表達式1) if(表達式2) break; if(表達式2) continue; ,2.2 循環(huán)結(jié)構(gòu),例6. 6 把100-200之間的不能被3整除的數(shù)輸出。,main() int n; for(n=100;n=200;n+) if(n%3=0) continu
17、e; printf(%d ,n); ,2.2.4 break語句和continue語句,2.2 循環(huán)結(jié)構(gòu),2.2.5 程序舉例,例1 用/4=1-1/3+1/5-1/7+求的近似值,直到某一項的絕對值小于10-6為止。,#include int main(void) int s; float n,t,pi; t=1;pi=0;n=1;s=1; while(fabs(t)1e-6) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(pi=%10.6f,pi); ,2.2 循環(huán)結(jié)構(gòu),2.2.5 程序舉例,例2 求Fibonacci數(shù)列前40個數(shù)。這個數(shù)列有如下特點:第1,2兩個數(shù)為1,1。從第三個數(shù)開始,該數(shù)是前兩個數(shù)之和。即: F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2 (n3),int main(void)
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術(shù)貿(mào)易壁壘及其應(yīng)對考核試卷
- 圖冊制作合同范本
- 科技引領(lǐng)生態(tài)優(yōu)先-打造現(xiàn)代化的科技小鎮(zhèn)環(huán)境
- 托兒所服務(wù)的資源整合與社會資源優(yōu)化考核試卷
- 知識產(chǎn)權(quán)管理實踐案例分享
- 化學(xué)實驗安全與操作規(guī)范考核試卷
- 電子競技產(chǎn)業(yè)發(fā)展中的人文關(guān)懷與社會責(zé)任
- 泥工木工合同范本
- 油井維修合同范本
- 康復(fù)輔具適配服務(wù)培訓(xùn)考核試卷
- 壓力變送器的拆卸及安裝 壓力變送器維護和修理保養(yǎng)
- 2024遼寧大連中遠海運川崎船舶工程限公司招聘73人公開引進高層次人才和急需緊缺人才筆試參考題庫(共500題)答案詳解版
- 2024年上海市法院系統(tǒng)輔助文員招聘筆試參考題庫附帶答案詳解
- 企業(yè)復(fù)產(chǎn)復(fù)工方案
- 妊娠期合并糖尿病護理
- 骨科專案改善PDCA提高四肢骨折患者肢體腫脹消腫率品管圈
- 酒店消防監(jiān)控值班方案及措施
- 人教小學(xué)教材培訓(xùn)課件
- 2024年浙江省電力交易員競賽選拔考試參考題庫(含答案)
- 云南省昆明市盤龍區(qū)2023-2024學(xué)年高一上學(xué)期期末考試化學(xué)試題(解析版)
- 2025屆高考語文二輪復(fù)習(xí)備考策略《道法結(jié)合 科學(xué)備考》
評論
0/150
提交評論