




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第二章 程序的流程控制,2.1 選擇(分支)結(jié)構(gòu),2.1.1 關(guān)系運(yùn)算符與邏輯運(yùn)算符 C的關(guān)系運(yùn)算符如下: 大于 = 大于等于 99 返回1 10(2+10) 返回0,2.0 算法的表示,2.1 算法的概念,算法是對(duì)特定問(wèn)題求解步驟的一種描述,也是解決問(wèn)題的辦法,它是指令的有限序列,其中每一條指令表示一個(gè)或多個(gè)操作。,自然語(yǔ)言 流程圖 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)系運(yùn)算符與邏輯運(yùn)算符 C的邏輯運(yùn)算符如下: ! 邏輯非 else 語(yǔ)句2; 上述結(jié)構(gòu)表示: 如果表達(dá)式的值為非0(true)即真, 則執(zhí)行語(yǔ)句1, 執(zhí)行完語(yǔ)句1從語(yǔ)句2后開(kāi)始繼續(xù)向下執(zhí)行; 如果表達(dá)式的值為0(false)即假, 則跳過(guò)語(yǔ)句 1而執(zhí)行語(yǔ)句2。所謂表達(dá)式是指關(guān)系表達(dá)式和邏輯表達(dá)式的結(jié)合式。 注意: 1. 條件執(zhí)行語(yǔ)句中“else 語(yǔ)句2;”部分是選擇項(xiàng), 可以缺省, 此
3、時(shí)條件語(yǔ)句 變成: if(表達(dá)式) 語(yǔ)句1; 表示若表達(dá)式的值為非0則執(zhí)行語(yǔ)句1 , 否則跳過(guò)語(yǔ)句1繼續(xù)執(zhí)行。 2. 如果語(yǔ)句1或語(yǔ)句2有多于一條語(yǔ)句要執(zhí)行時(shí), 必須使用和 把這些 語(yǔ)句包括在其中, 此時(shí)條件語(yǔ)句形式為: if(表達(dá)式) 語(yǔ)句體1; else 語(yǔ)句體2; ,2.1 選擇(分支)結(jié)構(gòu),2.1.2 if()else結(jié)構(gòu) 注意: if(表達(dá)式) 語(yǔ)句體1; else 語(yǔ)句體2; 3. 條件語(yǔ)句可以嵌套, 這種情況經(jīng)常碰到, 但條件嵌套語(yǔ)句容易出錯(cuò), 其原因主要是不知道哪個(gè)if對(duì)應(yīng)哪個(gè)else。 例如: if( x 20 | x x) printf(Good); else printf
4、(Bad); 對(duì)于上述情況, C規(guī)定: else語(yǔ)句與最近的一個(gè)if語(yǔ)句匹配, 上例 中的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 符號(hào)函數(shù) int main(void) float x; int y=-1; printf(“input x:”); scanf(“%f”, ,2.1 選擇(分支)結(jié)構(gòu),2.1.3 條件運(yùn)算符與條件表達(dá)式 條件表達(dá)式: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) 在編寫(xiě)程序時(shí), 經(jīng)常會(huì)碰到按不同情況分轉(zhuǎn)的多路問(wèn)題, 這時(shí)可用嵌套if -else-fi語(yǔ)句來(lái)實(shí)現(xiàn), 但if-else-if語(yǔ)句使用不方便, 并且容易出錯(cuò)。對(duì)這種情 況, C提供了一個(gè)開(kāi)關(guān)
6、語(yǔ)句。 開(kāi)關(guān)語(yǔ)句格式為: switch(變量) case 常量1: 語(yǔ)句1或空; case 常量2: 語(yǔ)句2或空; . . . case 常量n; 語(yǔ)句n或空; default: 語(yǔ)句n+1或空; ,2.1 選擇(分支)結(jié)構(gòu),執(zhí)行switch開(kāi)關(guān)語(yǔ)句時(shí), 將變量逐個(gè)與case后的常量進(jìn)行比較, 若與其中一 個(gè)相等, 則執(zhí)行該常量下的語(yǔ)句, 若不與任何一個(gè)常量相等, 則執(zhí)行default 后 面的語(yǔ)句。 注意: 1. switch中變量可以是數(shù)值, 也可以是字符。 2. 可以省略一些case和default。 3. 每個(gè) case 或default后的語(yǔ)句可以是語(yǔ)句體, 但不需要使用和括起 來(lái)。
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ù)的開(kāi)關(guān)語(yǔ)句*/ case 1: printf(%dn, test); break; /*退出開(kāi)關(guān)語(yǔ)句*/ 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語(yǔ)句的一般形式為: for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體 它的執(zhí)行過(guò)程如下: (1) 先求解表達(dá)式1; (2) 求解表達(dá)式2,若其值為真(非0),則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句,然后執(zhí)行下面第(3)步,若為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。 (3)若表達(dá)式為真,在執(zhí)行指定的語(yǔ)句后,求解表達(dá)式3。 (4)轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。 (5)執(zhí)行for語(yǔ)句下面的一個(gè)語(yǔ)句。,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),例如:計(jì)算123100? for(i=1;i=100;i+) sum=sum+i; 相當(dāng)于以下的while
9、語(yǔ)句: i=1; while(i=100) sum=sum+i; i+; for語(yǔ)句的一般形式用while語(yǔ)句來(lái)表示為: 表達(dá)式1 while(表達(dá)式2) 語(yǔ)句 表達(dá)式3; ,2.2 循環(huán)結(jié)構(gòu),2.2.1 for結(jié)構(gòu),for語(yǔ)句中表達(dá)式1可以省略,其后的分號(hào)不能省略介,此時(shí)應(yīng)在for語(yǔ)句之前給循環(huán)變量賦初值 。如: for( ; i=100 ; i+) sum=sum+i; 執(zhí)行時(shí),跳過(guò)“求解表達(dá)式1”這一步,其它不變。 2如果表達(dá)式2省略,即不判斷循環(huán)條件,循環(huán)無(wú)終止地進(jìn)行下去。也就是認(rèn)為表達(dá)式2始終為真。 如: for( i=1 ; ; i+) sum=sum+i;,2.2 循環(huán)結(jié)構(gòu),2.
10、2.1 for結(jié)構(gòu),3表達(dá)式3也可以省略,但此時(shí)程序設(shè)計(jì)者應(yīng)另外設(shè)法保證循環(huán)能正常結(jié)束。 如: for(sum0,i1 ;i100 ;) sumsum十i; i+; 本例把i+的操作不放在for語(yǔ)句的表達(dá)式3的位置處,而作為循環(huán)體的一部分,效果是一樣的,都能使循環(huán)正常結(jié)束。,4可以省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,即只給循環(huán)條件。 如: for(;i100;) sumsum+i;i+; 相當(dāng)于:,5三個(gè)表達(dá)式都可省略,如 for (;)語(yǔ)句,2.2 循環(huán)結(jié)構(gòu),2.2.2 while結(jié)構(gòu)和dowhile結(jié)構(gòu),while語(yǔ)句用來(lái)實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。其一般形式如下: whi1e (表達(dá)式E)
11、循環(huán)體 ;,執(zhí)行過(guò)程: 計(jì)算表達(dá)式E的值 若E為非0, 則執(zhí)行語(yǔ)句s, 然后轉(zhuǎn) 若E為0, 則退出循環(huán), 執(zhí)行該循環(huán)后的語(yǔ)句,特點(diǎn): 先判斷表達(dá)式,后執(zhí)行語(yǔ)句, 因此, 若進(jìn)入while循環(huán)時(shí)E的值就是0,則語(yǔ)句S一次也不執(zhí)行,2.2 循環(huán)結(jié)構(gòu),2.2.2 while結(jié)構(gòu)和dowhile結(jié)構(gòu),例如:計(jì)算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語(yǔ)句用來(lái)實(shí)現(xiàn)“直到型”循環(huán)結(jié)
12、構(gòu)。其一般形式為:,do 循環(huán)體 while (表達(dá)式E);,執(zhí)行過(guò)程: 執(zhí)行循環(huán)體S 計(jì)算E值 若E的值為真(非0), 則轉(zhuǎn) 若E的值為假(0), 則結(jié)束循環(huán),特點(diǎn): 先執(zhí)行循環(huán)體,再判斷表達(dá)式,因此循環(huán)體至少執(zhí)行一次。,2.2 循環(huán)結(jié)構(gòu),例如:計(jì)算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)體與計(jì)算表達(dá)式的先后順序不同,dowhile先執(zhí)行循環(huán)體
13、,再計(jì)算表達(dá)式;while循環(huán)為先計(jì)算表達(dá)式,表達(dá)式的結(jié)果為非零值,則執(zhí)行循環(huán)體語(yǔ)句。 b. dowhile至少要執(zhí)行一次循環(huán)體。while執(zhí)行循環(huán)體的次數(shù)可能為零次或若干次。,2.2 循環(huán)結(jié)構(gòu),猴子吃桃問(wèn)題:猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不癮,又多吃了一個(gè)。第二天早上又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上想再吃時(shí),見(jiàn)只剩下一個(gè)桃子了。求第一天共摘了多少個(gè)桃子。,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)嵌套,一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱(chēng)為循環(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語(yǔ)句和continue語(yǔ)句,1 break語(yǔ)句 break語(yǔ)句可以使流程跳出switch結(jié)構(gòu),繼續(xù)執(zhí)行switch語(yǔ)句下面的一個(gè)語(yǔ)句。break語(yǔ)句還可以用來(lái)從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語(yǔ)句。如 for(r=1; r100) break; printf(” area%f”,area); break語(yǔ)句的一般形式: break; 注意:break語(yǔ)句只能用于循環(huán)語(yǔ)句和switch語(yǔ)句。,2.2 循環(huán)結(jié)構(gòu),2.2.4 break語(yǔ)句和continue語(yǔ)句,2 continue語(yǔ)句 一般形式為 continu
16、e; 其作用為結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定。,continue語(yǔ)句和break語(yǔ)句的區(qū)別是:continue語(yǔ)句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行,而break語(yǔ)句則是結(jié)束本層循環(huán),不再進(jìn)行條件判斷。如果有以下兩個(gè)循環(huán)結(jié)構(gòu): (1)while (表達(dá)式1) (2) while (表達(dá)式1) if(表達(dá)式2) break; if(表達(dá)式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語(yǔ)句和continue語(yǔ)句,2.2 循環(huán)結(jié)構(gòu),2.2.5 程序舉例,例1 用/4=1-1/3+1/5-1/7+求的近似值,直到某一項(xiàng)的絕對(duì)值小于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個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第1,2兩個(gè)數(shù)為1,1。從第三個(gè)數(shù)開(kāi)始,該數(shù)是前兩個(gè)數(shù)之和。即: F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2 (n3),int main(void)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 煤炭安全管理人員考試試題試題及答案
- 臨床醫(yī)學(xué)檢驗(yàn)技術(shù)(師):臨床檢驗(yàn)基礎(chǔ)
- 2025年專(zhuān)升本藝術(shù)概論考試模擬卷(藝術(shù)理論前沿?zé)狳c(diǎn)知識(shí)問(wèn)答與解析)含答案
- 海洋空間資源優(yōu)化配置
- 老王P課件特點(diǎn)介紹
- 老年人照護(hù)職業(yè)培訓(xùn)課件
- 2025年八角行業(yè)分析報(bào)告及未來(lái)五至十年行業(yè)發(fā)展報(bào)告
- 餐飲店面租賃及品牌推廣合同
- 車(chē)抵押貸款糾紛處理合同
- 水利泵站工程信息化建設(shè)與運(yùn)維合同范本
- 2025至2030中國(guó)近視眼治療儀市場(chǎng)競(jìng)爭(zhēng)力剖析及企業(yè)經(jīng)營(yíng)形勢(shì)分析報(bào)告
- 信息安全培訓(xùn)《釣魚(yú)郵件防范技巧》
- 2025年北京市高考英語(yǔ)試卷真題(含答案解析)
- 吉利質(zhì)量改善3824步課件
- 化工工藝學(xué)理論知識(shí)考核題庫(kù)與答案
- AI技術(shù)支持的學(xué)情分析
- 《西游記》妖怪情況簡(jiǎn)表
- 最好的cadence中文教程仿真
- JGJ-130-2011建筑施工扣件式鋼管腳手架安全技術(shù)規(guī)范(新版)
- 打架斗毆等暴力事件處理流程圖
- 哈銅吉爾吉斯斯坦Bozymchak黃金選礦廠(chǎng)安裝工程施工組織設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論