《C語言程序設(shè)計(jì)》第4章控制結(jié)構(gòu).ppt

上傳人:xin****828 文檔編號:15475635 上傳時(shí)間:2020-08-12 格式:PPT 頁數(shù):63 大小:571.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
《C語言程序設(shè)計(jì)》第4章控制結(jié)構(gòu).ppt_第1頁
第1頁 / 共63頁
《C語言程序設(shè)計(jì)》第4章控制結(jié)構(gòu).ppt_第2頁
第2頁 / 共63頁
《C語言程序設(shè)計(jì)》第4章控制結(jié)構(gòu).ppt_第3頁
第3頁 / 共63頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《C語言程序設(shè)計(jì)》第4章控制結(jié)構(gòu).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《C語言程序設(shè)計(jì)》第4章控制結(jié)構(gòu).ppt(63頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、第4章 控制結(jié)構(gòu),,本章要求:,掌握選擇控制語句if語句、switch語句以及他們的嵌套應(yīng)用; 掌握循環(huán)控制語句for語句、while語句、dowhile語句以及他們的嵌套應(yīng)用; 掌握break語句、continue語句的應(yīng)用; 能夠運(yùn)用3種結(jié)構(gòu)進(jìn)行綜合程序設(shè)計(jì)。,4.1 關(guān)系運(yùn)算與邏輯運(yùn)算,例子: 三個(gè)數(shù)中找最大 判斷是否是閏年 判斷密碼的正確與否 關(guān)鍵點(diǎn):判斷的條件如何確立?,選擇結(jié)構(gòu),4.1.1 關(guān)系運(yùn)算符與關(guān)系表達(dá)式,比較兩個(gè)量的運(yùn)算符稱為關(guān)系運(yùn)算符: ,= , == ,!= 關(guān)系運(yùn)算符的優(yōu)先級: “、=、 關(guān)系運(yùn)算符 賦值運(yùn)算符 一般形式為:表達(dá)式 關(guān)系運(yùn)算符 表達(dá)式其值: 關(guān)系成

2、立為“真”,不成立則為“假” C語言中用 “1” 表示 “真” ; “0” 表示 “假”,如 56 x=3 xc)a!=(c==b) (a=3)(b=5),又如:當(dāng) a=5, b=4 時(shí) a+=3

3、行多個(gè)語句,可以使用 ,例:輸入任意兩個(gè)整數(shù)x , y,比較后,確保x要大于等于y,再輸出。 void main() int x, y, t; printf(Enter x and y:n); scanf(%d%d, ,2雙分支結(jié)構(gòu)ifelse.語句 使用格式: if (表達(dá)式) ; else ; 語句的執(zhí)行過程: 當(dāng)表達(dá)式的值為非0(條件成立)時(shí)執(zhí)行, 否則執(zhí)行else后面。,例:輸入三個(gè)數(shù),然后輸出其中最大的數(shù)。 void main() int a, b, c, max; scanf(“%d%d%d”, ,3ifelse if語句(多分支結(jié)構(gòu)) 語句形式: if (表達(dá)式1) 語

4、句1; else if (表達(dá)式2) 語句2; .. else if (表達(dá)式n) 語句n; else 語句塊n+1;,例:簡單計(jì)算器,,例:已知百分制成績x,顯示對應(yīng)的五級制成績,下列哪些正確。,4. 使用if語句中應(yīng)注意以下問題,if(a=5) 語句; if(b) 語句; 都是允許的。,if(x

5、else 語句2; else if (表達(dá)式3) 語句3;,,,要特別注意if和else的配對問題。例如: 其中的else究竟是與哪一個(gè)if配對呢? if(表達(dá)式1) if(表達(dá)式1) if(表達(dá)式2) if(表達(dá)式2) 語句1; 語句1; else else 語句2; 語句2;,,,語言規(guī)定:else 總是與它前面最近的if配對,4.2.2 條件運(yùn)算符和條件表達(dá)式,條件運(yùn)算符為 ? : 它是一個(gè)三目運(yùn)算符。 條件表達(dá)式的一般形式為: 表達(dá)式1 ? 表達(dá)式2 :表達(dá)式3 其求值規(guī)則為:如果表達(dá)式1的值為真,則以表

6、達(dá)式2 的值作為條件表達(dá)式的值,否則以表達(dá)式3的值作為整個(gè)條件表達(dá)式的值。 條件表達(dá)式通常用于賦值語句之中。例如:,if(ab) max=a; else max=b;,max=(ab)?a:b;,,條件運(yùn)算符的說明:,運(yùn)算優(yōu)先級:低于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,高于賦值符。如:max=ab?a:b 條件運(yùn)算符? :是一對運(yùn)算符,不能分開單獨(dú)使用。 結(jié)合方向:自右至左。例如:,ab?a:cd?c:d,cd?c:d,例:若輸入的大寫字母轉(zhuǎn)換成相應(yīng)的小寫字母,否則原樣輸出。,void main() char ch; scanf(%c, ,if (ch=A ,,,4.2.3 switch語句(開關(guān)語句

7、),switch語句使用的一般形式為: switch(表達(dá)式) case 常量表達(dá)式1: 語句1; case 常量表達(dá)式2: 語句2; case 常量表達(dá)式n: 語句n; default : 語句n+1; ,計(jì)算表達(dá)式的值k,若k等于常量表達(dá)式的值,則執(zhí)行對應(yīng)語句,,若k與上訴常量均不相同,執(zhí)行該語句,例:使用switch語句實(shí)現(xiàn)百分制成績化五級制成績。,switch(x/10) case 10: case 9: printf(A); case 8: printf(B); case 7: printf(C); case 6: printf(D); default

8、:printf(E); ,,break; break; break; break;,使用switch語句的通常形式為:,switch(表達(dá)式) case 常量表達(dá)式1: 語句1; break; case 常量表達(dá)式2: 語句2; break; case 常量表達(dá)式n: 語句n; break; default : 語句n+1; ,添加break;后:,例:輸入17(分別代表星期一到星期天),輸出相應(yīng)的內(nèi)容。,void main() int a; printf(input integer number: ); scanf(%d, ,說明:,在case后

9、的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤。 在case后,允許有多個(gè)語句,可以不用括起來。 各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。但需要配合“break;”使用。 default子句可以省略不用。,4.2.3 選擇結(jié)構(gòu)的嵌套,if (表達(dá)式1) 語句1; else if (表達(dá)式2) 語句2; .. else if (表達(dá)式n) 語句n; else 語句n+1;,switch(表達(dá)式) case 常量表達(dá)式1: 語句1; break; case 常量表達(dá)式2: 語句2; break; case 常量表達(dá)式n: 語句n;

10、break; default : 語句n+1; ,這些語句部分,都可以包含另一個(gè)完整的if語句或switch語句,例:輸入三個(gè)數(shù),從小到大排列,if(ab) t=a; a=b; b=t; if(bc) t=b; b=c; c=t; if(ab) t=a; a=b; b=t; ,,,,說明:,嵌套只能在一個(gè)分支內(nèi)嵌套,不出現(xiàn)交叉。其嵌套的形式將有很多種,嵌套層次也可以任意多。 在swicth結(jié)構(gòu)中,每一個(gè)case分支可以完整包含另一個(gè)ifelse結(jié)構(gòu),也可完整包含另一個(gè)swicth結(jié)構(gòu)。 提示:為了便于閱讀和維護(hù),建議在寫含有多層嵌套的程序時(shí),使用縮進(jìn)對齊方式。,4.2.5 選擇結(jié)構(gòu)程序

11、舉例,例:小學(xué)數(shù)學(xué)題,要求: 隨機(jī)產(chǎn)生兩道數(shù)學(xué)題(參加運(yùn)算的數(shù)在110之間),一道加法,一道減法。 產(chǎn)生一道題后,讓用戶輸入答案;判斷答案的正確性,并給出提示。 記錄用戶答對的題數(shù),并對最終的成績作出評價(jià)。 可以使用if語句,或switch語句。,,4.3 循環(huán)結(jié)構(gòu),循環(huán)結(jié)構(gòu)的特點(diǎn): 在給定條件成立時(shí),反復(fù)執(zhí)行某程序段, 直到條件不成立為止。 注意兩個(gè)概念: 給定的條件稱為循環(huán)條件 反復(fù)執(zhí)行的程序段稱為循環(huán)體 在C語言中,實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的語句主要有3種: while doWhile for語句,4.3.1 while語句,while語句的一般形式為: while(表達(dá)式) 語句;表達(dá)式是循

12、環(huán)條件,語句為循環(huán)體 執(zhí)行過程:計(jì)算表達(dá)式的值,當(dāng)值為真(非0)時(shí), 執(zhí)行循環(huán)體語句。否則,退出,例:在屏幕上打印110,,說明:,計(jì)算的值,若表達(dá)式的值為真(非0)時(shí),則執(zhí)行循環(huán)體語句;不斷反復(fù),直到表達(dá)式的值為假(0),則不執(zhí)行循環(huán)體語句,而直接轉(zhuǎn)向循環(huán)體外的第一條語句。 是循環(huán)反復(fù)執(zhí)行的程序,稱為“循環(huán)體”,當(dāng)需要執(zhí)行多條語句時(shí),應(yīng)使用“ ”括起來組成一個(gè)復(fù)合語句。 while語句是先判斷條件,后執(zhí)行循環(huán)體,為“當(dāng)型”循環(huán),因此若條件不成立,有可能一次也不執(zhí)行循環(huán)體。,例: 編程序求:s=1+2+3++100,main() int s=0,n=1; while (n<=100)

13、s=s+n; n++; printf(S=%d,s); ,,4.3.2 do...while語句,一般形式為: do 語句; while (表達(dá)式); 執(zhí)行過程:先執(zhí)行循環(huán)體語句一次,再判別表達(dá)式的值,若為真(非0)則繼續(xù)循環(huán),否則終止循環(huán)。,例: 編程序求:s=1+2+3++100,void main() int s=0,n=1; do s=s+n; n++; while (n<=100); printf(S=%d,s); ,while (n<=100) s=s+n; n++; ,用輾轉(zhuǎn)相除法求兩自然數(shù)m,n的最大公約數(shù)和最小公倍數(shù)。 例 求 m=28

14、 ,n=20 的最大公約數(shù). if (m

15、達(dá)式1;表達(dá)式2;表達(dá)式3) 語句; 表達(dá)式1(控制變量的初始化):用來給循環(huán)變量賦初值,也允許在for語句外給循環(huán)變量賦初值,此時(shí)可以省略該表達(dá)式。 表達(dá)式2(循環(huán)的條件):循環(huán)條件,一般為關(guān)系表達(dá)式或邏輯表達(dá)式。 表達(dá)式3(循環(huán)控制變量的更新 ):用來修改循環(huán)變量的值,一般是賦值語句。,當(dāng)循環(huán)體由多個(gè)語句組成時(shí),也必須用 ,for語句的執(zhí)行過程:,注意:在整個(gè)for循環(huán)過程中,表達(dá)式1只計(jì)算一次,表達(dá)式2和表達(dá)式3則可能計(jì)算多次。,例: 編程序求:s=1+2+3++100,void main() int n,s=0; for(n=1;n<=100;n++) s=s+n; p

16、rintf(s=%dn,s); getch(); ,void main() int s=0,n=1; while (n<=100) s=s+n; n++; printf(“s=%d,s); ,,例:打印20個(gè)1020的隨機(jī)數(shù)在屏幕上。,for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句;,表達(dá)式1; while(表達(dá)式2) 語句; 表達(dá)式3; ,,,有關(guān)for語句的幾點(diǎn)說明:,for語句中的“表達(dá)式1”、“表達(dá)式2”和“表達(dá)式3”都可以省略,但兩個(gè)分號不能省略。 若 “表達(dá)式2”省略了,則判定循環(huán)控制條件為真(非0) “表達(dá)式1”和 “表達(dá)式3”,可以是一個(gè)簡單的表達(dá)式,也可以是逗號表

17、達(dá)式。 注意:三個(gè)表達(dá)式都可以是任何表達(dá)式。,4.3.4 循環(huán)的嵌套多重循環(huán)結(jié)構(gòu),一個(gè)循環(huán)內(nèi)完整地包含另一個(gè)循環(huán)結(jié)構(gòu),則稱為多重循環(huán) 嵌套一層稱為二重循環(huán),嵌套二層稱為三重循環(huán) 例子: 打印九九乘法表 打印由數(shù)字組成的如下所示金字塔圖案,,4.3.5 三種循環(huán)語句比較,4.4 其它控制語句,4.4.1 break語句 作用范圍:switch 語句或循環(huán)語句 功能:跳出switch語句或跳出本層循環(huán), 轉(zhuǎn)去執(zhí)行后面的程序。 break語句的一般形式為: break; 注意:break語句用于循環(huán)體中,一般與if語句聯(lián)合使用,例:車牌抽取程序,要求,用戶可以有5次機(jī)會(huì)選擇。 若選到中意的號

18、碼,可以使用鍵盤中的Y鍵來確定 若已確定選中號碼,則無需再繼續(xù)選擇了。 若5次都沒有選中,進(jìn)行提示,表示選中失敗。,,4.4.2 continue語句,作用范圍:只能用在循環(huán)體中 功能:結(jié)束本次循環(huán),轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。 其一般格式是: continue; 注意:本語句只結(jié)束本層本次的循環(huán),并不跳出循環(huán)。,例,計(jì)算半徑為1到15的圓的面積,僅打印出超過50的圓面積。,void main() int r; float area; for(r=1;r<=15;r++) area=3.141593*r*r; if(area<50.0) continue; printf( squar

19、e=%fn,area); ,,break與continue的區(qū)別,continue:結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue 語句之后的語句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。應(yīng)注意的是, 本語句只結(jié)束本層本次的循環(huán),并不跳出循環(huán)。,break:語句只能用在switch 語句或循環(huán)語句中, 其作用是跳出switch語句或跳出本層循環(huán),轉(zhuǎn)去執(zhí)行后面的程序。,4.4.3 goto語句(無條件轉(zhuǎn)移語句),一般格式: goto 語句標(biāo)號; 如: label: i++; goto label1; 注意:語言不限制程序中使用標(biāo)號的次數(shù),但不得重名。 注意:在結(jié)構(gòu)化程序設(shè)計(jì)中一般不主

20、張使用goto語句, 以免造成程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。,,,4.5 應(yīng)用程序舉例 4.5.1 素?cái)?shù)與哥德巴赫猜想,例:判斷一個(gè)給定的整數(shù)是否為素?cái)?shù) 基本思想: 把m作為被除數(shù),將2Int(Sqrt(m))作為除數(shù),如果都除不盡,m就是素?cái)?shù),否則就不是。可用以下程序段實(shí)現(xiàn),k=sqrt(m); for(i=2;i=k) printf(Yesn); else printf(Non);,例:編一程序驗(yàn)證哥德巴赫猜想,,,,,for(n1=3;n1k) printf(%d=%d+%dn,n,n1,n2); ,,,發(fā)現(xiàn)n1不是素?cái)?shù)后無需判斷n2了,執(zhí)行continue;后,當(dāng)

21、前次循環(huán)的后半部分無需執(zhí)行,4.5.2 窮舉法,基本思想:一一列舉各種可能的情況,并判斷哪一種可能是符合要求 例:將一張面值為100元的人民幣等值換成100張5元、1元和0.5元的零鈔,要求每種零鈔不少于1張,問有哪幾種組合? 分析:5元的最少1張,最多100張 1元的最少1張,最多100張 0.5元的最少1張,最多100張列出所有的情況,把真正符合要求的情況打印出來。,void main() int x, y, z, n; printf( 5yuan 1yuan 0.5yuann); n=0; for(x=1; x<=100;x++) for(y=1;y<=100;y++) for(

22、z=1;z<=100;z++) if(x+y+z==100 ,,,,,,4.5.3 迭代法,遞推法:有一只猴子,撿到了一框桃子。它每天吃現(xiàn)存桃子的一半再多一個(gè)。到了第7天,它只有一個(gè)桃子了,問它第一天撿到了幾個(gè)桃子? 解:注意后一天和前一天的桃子數(shù)的關(guān)系。 x=(x+1)*2;,,例,用迭代法求平方根,已知迭代公式為: 編程分析: 可假定一個(gè)初值x0=a/2(估計(jì)值), 根據(jù)迭代公式得到一個(gè)新的值x1,這個(gè)新值x1比初值x0更接近要求的值x; 再以新值作為初值,即:x1x0,重新按原來的方法求x1, 重復(fù)這一過程直到|x1-x0|<(某一給定的精度)。此時(shí)可將x1作為問題的解。,,x0 = a / 2; /* 取迭代初值 */ x1 = 0.5 * (x0 + a / x0); while (fabs(x1 - x0) 0.00001) x0 = x1; /* 為下一次迭代作準(zhǔn)備 */ x1 = 0.5 * (x0 + a / x0); printf(%f s sqrt is:%fn, a, x1);,迭代法求平方根部分代碼,,

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!