版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第5章 循環(huán)結(jié)構(gòu)及其應(yīng)用學(xué)習(xí)目標(biāo): 掌握循環(huán)結(jié)構(gòu)的應(yīng)用場(chǎng)合,循環(huán)結(jié)構(gòu)的設(shè)計(jì),循環(huán)語(yǔ)句的用法,設(shè)計(jì)循環(huán)結(jié)構(gòu)程序。學(xué)習(xí)內(nèi)容: while循環(huán),do-while循環(huán),for循環(huán),break語(yǔ)句,循環(huán)嵌套,循環(huán)結(jié)構(gòu)程序設(shè)計(jì)方法。5.1 一個(gè)循環(huán)結(jié)構(gòu)程序?qū)嵗?。要在?jì)算機(jī)屏幕上輸出30個(gè)“*”,可以使用輸出函數(shù)printf()一次完成,但是程序中要重復(fù)輸入30次“*”。其實(shí)同樣的操作可以換一個(gè)思路完成,那就是讓計(jì)算機(jī)重復(fù)30次輸出一個(gè)“*”的工作,而輸出一個(gè)“*”的工作很容易用printf()語(yǔ)句來(lái)實(shí)現(xiàn)?!纠?-1】輸出30個(gè)“*”?!揪幊趟悸贰浚?)定義變量i,并賦初值為1,用i來(lái)進(jìn)行計(jì)數(shù)器。(2)使用
2、循環(huán)結(jié)構(gòu)重復(fù)執(zhí)行輸出一個(gè)“*”的過(guò)程。(3)每次輸出一個(gè)“*”,讓計(jì)數(shù)器加1,當(dāng)計(jì)數(shù)器超過(guò)30就停止重復(fù)工作。【程序代碼】#include <stdio.h>main()int i=1;while(i<=30) printf("*");i+;printf("n");提示:本例中如果去掉語(yǔ)句i+;,就會(huì)出現(xiàn)死循環(huán)。5.2 實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的語(yǔ)句C語(yǔ)言提供了三種實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的語(yǔ)句:while語(yǔ)句、do-while語(yǔ)句和for語(yǔ)句。雖然3個(gè)語(yǔ)句的語(yǔ)法規(guī)則不同,但在使用上很相似,一般情況下可以相互轉(zhuǎn)換。當(dāng)然它們有各自的特點(diǎn),在實(shí)際應(yīng)用中還是要根據(jù)具
3、體情況選擇恰當(dāng)?shù)难h(huán)語(yǔ)句。5.2.1 while語(yǔ)句while語(yǔ)句用于當(dāng)型循環(huán)結(jié)構(gòu),其一般形式為:while(表達(dá)式) 循環(huán)體語(yǔ)句while語(yǔ)句的執(zhí)行過(guò)程是:首先計(jì)算表達(dá)式的值,若結(jié)果為“真”(非零),則執(zhí)行循環(huán)體語(yǔ)句;然后再計(jì)算表達(dá)式的值,重復(fù)上述過(guò)程,直到表達(dá)式的值為“假”(零)時(shí)結(jié)束循環(huán),流程控制轉(zhuǎn)到while語(yǔ)句的下一條語(yǔ)句。小測(cè)驗(yàn):根據(jù)while語(yǔ)句的執(zhí)行過(guò)程,下面程序的輸出結(jié)果為: #include <stdio.h>main()int x=0,n=0;while(x<30)x=(x+1)*(x+1);n=n+1;printf("n=%dn",
4、n);【例5-2】顯示110的平方?!境绦虼a】#include <stdio.h>main()int i=1;while(i<=10)printf("%d*%d=%dn",i,i,i*i);i+;使用while循環(huán)結(jié)構(gòu)時(shí)應(yīng)注意以下幾點(diǎn):(1)while循環(huán)的特點(diǎn)是先判斷條件后執(zhí)行循環(huán)體語(yǔ)句。(2)while循環(huán)中的表達(dá)式一般是關(guān)系表達(dá)式或邏輯表達(dá)式,也可以是其他任何合法的表達(dá)式。(3)循環(huán)體語(yǔ)句可以是一個(gè)語(yǔ)句,也可以是多個(gè)語(yǔ)句,當(dāng)只有一個(gè)語(yǔ)句時(shí),外層的大括號(hào)可以省略,如果循環(huán)體是多個(gè)語(yǔ)句時(shí),一定要用花括號(hào)“”括起來(lái),以復(fù)合語(yǔ)句的形式出現(xiàn)。(4)循環(huán)體內(nèi)一
5、定要有改變循環(huán)條件的語(yǔ)句,使循環(huán)趨于結(jié)束,否則循環(huán)將無(wú)休止地進(jìn)行下去,即形成“死循環(huán)”?!纠?-3】求1到100的自然數(shù)之和,即計(jì)算sum=1+2+100.【程序代碼】#include <stdio.h>main()int i,sum=0;i=1;sum=0;while(i<=100)sum+=i;i+;printf("sum=%dn",sum);小測(cè)驗(yàn):針對(duì)【例5-3】,思考下列問(wèn)題:(1)是否可以不給sum和i賦初值?(2)是否可以將i+改成i=i+1?(3)是否可以將i+放置在sum=sum+i之前?(4)在循環(huán)結(jié)束后,i的值是多少?(5)如果求11
6、00之間的奇數(shù)和,即計(jì)算sum=1+3+5+99,程序該如何修改?(6)求sum=1-2+3-4+5-100,程序該如何修改?5.2.3 do-while語(yǔ)句do-while語(yǔ)句屬于直到型循環(huán),其一般形式為:do 循環(huán)體語(yǔ)句while(表達(dá)式);例如:下面是一個(gè)可以輸出30個(gè)“*”的do-while語(yǔ)句:i=1;doprintf("*");i+;while(i<=30);do-while語(yǔ)句的執(zhí)行過(guò)程是:首先執(zhí)行一次循環(huán)體語(yǔ)句,然后計(jì)算表達(dá)式(循環(huán)條件)的值,若結(jié)果為“真”(非零),返回執(zhí)行循環(huán)體語(yǔ)句,重復(fù)上述步驟,知道表達(dá)式的值為“假”(零)時(shí)結(jié)束循環(huán),流程控制轉(zhuǎn)到
7、while語(yǔ)句的下一條語(yǔ)句。【例5-4】把【例5-3】(求1100的和)用do-while語(yǔ)句改寫?!境绦虼a】#include <stdio.h>main()int i=1,sum=0;dosum=sum+i;i+;while(i<=100);printf("sum=%dn",sum);使用do-while循環(huán)結(jié)構(gòu)是應(yīng)注意以下幾點(diǎn):(1)do-while循環(huán)結(jié)構(gòu)的特點(diǎn)是先執(zhí)行循環(huán)體后判斷條件,因此不管循環(huán)條件是否成立,循環(huán)體語(yǔ)句都至少被執(zhí)行一次。這是他與while循環(huán)的本質(zhì)區(qū)別。(2)不論循環(huán)體是一個(gè)語(yǔ)句還是多個(gè)語(yǔ)句,花括號(hào)“”都不要省略。(3)避免出現(xiàn)
8、“死循環(huán)”。(4)注意do-while循環(huán)最后的分號(hào)“;”不能省略。【例5-5】求n!,即求n的階乘,n由鍵盤輸入。#include <stdio.h>main()int i=1,n;long s=1;printf("please input n:");scanf("%d",&n);dos=s*i;i+;while(i<=n);printf("%d! = %ldn",n,s);小測(cè)驗(yàn):針對(duì)【例5-5】,思考下列問(wèn)題:(1)為什么不給s賦初值0,而賦初值為1?(2)為什么要把變量s定義為long?(3)當(dāng)輸入的
9、n值較大時(shí),如20,程序會(huì)怎么樣呢?如何解決?5.2.3 for語(yǔ)句for語(yǔ)句屬于當(dāng)型循環(huán),其一般形式為:for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3)循環(huán)體語(yǔ)句 例如:下面是一個(gè)可以輸出30個(gè)“*”的for語(yǔ)句:for(i=1;i<=30;i+)printf("*");for語(yǔ)句的執(zhí)行過(guò)程是:(1)首先進(jìn)行表達(dá)式1的計(jì)算。(2)判斷表達(dá)式2的值,若值為“真”(非零),則執(zhí)行循環(huán)體語(yǔ)句,然后轉(zhuǎn)(3)執(zhí)行;若為“假”(零),循環(huán)結(jié)束。(3)進(jìn)行表達(dá)式3的計(jì)算,然后轉(zhuǎn)至第(2)步重復(fù)執(zhí)行。小測(cè)驗(yàn):根據(jù)for語(yǔ)句的執(zhí)行過(guò)程,寫出下面程序段的輸出結(jié)果。(1)for(i=1;i&l
10、t;=4;i+) printf("%dt",i);(2)for(x=15;x>10;x-=2) printf("%dn",x);【例5-6】把例5-3(求1100的和)用for語(yǔ)句改寫。【程序代碼】#include <stdio.h>main()int i,sum=0;for(i=1;i<=100;i+)sum=sum+i;printf("sum=%dn",sum);本例中for語(yǔ)句的3個(gè)表達(dá)式實(shí)現(xiàn)了程序中的3個(gè)功能,即循環(huán)變量賦初值、循環(huán)條件和循環(huán)變量遞增,因此寫法更簡(jiǎn)潔。小測(cè)驗(yàn):針對(duì)上面實(shí)例,思考下列問(wèn)題:
11、(1)如果將i=1放置在for循環(huán)之前,即在for循環(huán)外提前對(duì)循環(huán)變量賦初值,那么for語(yǔ)句該怎么書寫?(2)修改程序,計(jì)算1+3+5+99的值。使用for語(yǔ)句時(shí)應(yīng)注意以下幾點(diǎn):(1)for循環(huán)相當(dāng)于下面的while循環(huán):表達(dá)式1:while(表達(dá)式2)循環(huán)體語(yǔ)句 表達(dá)式3;(2)for語(yǔ)句有3個(gè)表達(dá)式,它們之間由分號(hào)“;”分隔,不能更換成其他分隔符號(hào)。(3)有時(shí)根據(jù)需要可以將for語(yǔ)句格式中的部分或所有表達(dá)式省略,比如可以寫成如下形式:for( ;表達(dá)式2;表達(dá)式3)循環(huán)體語(yǔ)句例5-6中代碼可以改寫為:int i=1,sum=0;for( ;i<=100;i+)sum=sum+I;fo
12、r語(yǔ)句還可以寫成其他多種形式,不過(guò)建議最好還是使用規(guī)范的語(yǔ)句形式。由于經(jīng)常用表達(dá)式1進(jìn)行循環(huán)變量的賦初值,用表達(dá)式2控制循環(huán)結(jié)束,用表達(dá)式3控制循環(huán)變量的遞增或遞減,所以規(guī)范的for語(yǔ)句形式為:for(循環(huán)控制變量賦初值; 循環(huán)條件;循環(huán)控制變量增/減值)循環(huán)體語(yǔ)句【例5-7】把100200之間的不能被3整除的數(shù)輸出。【程序代碼】#include <stdio.h>main()int n;for(n=100;n<=200;n+)if(n%3!=0)printf("%d ",n);小測(cè)驗(yàn):(1)例5-7中輸出的數(shù)據(jù)比較多,如果要求每行只輸出10個(gè)數(shù),程序應(yīng)該
13、如何修改?(2)在所有的兩位數(shù)中,個(gè)位數(shù)比十位數(shù)大的兩位數(shù)有多少個(gè)?是哪些數(shù)?編寫程序完成?!纠?-8】判斷正整數(shù)m是不是素?cái)?shù),m由鍵盤輸入。【程序代碼】#include <stdio.h>main()int m,i,flag=0;scanf("%d",&m);for(i=2;i<=m-1;i+)if(m%i=0)flag=1;break;if(flag=0)printf("%d是素?cái)?shù)!n",m);elseprintf("%d不是素?cái)?shù)! n",m);本例中用到了break語(yǔ)句。在switch語(yǔ)句中我們已經(jīng)接觸
14、過(guò)break語(yǔ)句,它的功能是跳出switch語(yǔ)句,那么在循環(huán)結(jié)構(gòu)中使用break語(yǔ)句,其作用是跳出循環(huán)語(yǔ)句。需要注意的是:一般只有在switch結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中使用break語(yǔ)句,其作用是跳出該結(jié)構(gòu)。小測(cè)驗(yàn):素?cái)?shù)判斷中能否不使用break語(yǔ)句?【例5-9】程序預(yù)期輸出半徑為110的圓的面積,但是如果有面積值超過(guò)100時(shí),則停止執(zhí)行?!境绦虼a】#include <stdio.h>#define PI 3.14main()int r;float area;for(r=1;r<=10;r+)area=PI*r*r;if(area>100)break;printf("
15、;半徑為%d的圓面積為:%fn",r,area);5.3 循環(huán)嵌套一個(gè)循環(huán)體內(nèi)又包含了另一個(gè)完整的循環(huán)結(jié)構(gòu),這種循環(huán)稱為循環(huán)的嵌套。使用循環(huán)嵌套時(shí),三種循環(huán)語(yǔ)句可以自身嵌套,也可以互相嵌套。例如:分析下面程序段,理解循環(huán)嵌套。(1)for(k=1;k<=5;i+)printf("*");輸出結(jié)果為:*(2)for(i=1;i<=3;i+)for(k=1;k<=5;k+)printf("*");輸出結(jié)果為:*顯然,上面程序是for循環(huán)中又包含了一個(gè)for循環(huán),屬于兩層循環(huán)結(jié)構(gòu)。外層循環(huán)用變量i控制,內(nèi)循環(huán)用變量k控制,外循環(huán)i從
16、13循環(huán)3次,外循環(huán)每執(zhí)行一次,內(nèi)循環(huán)k從15循環(huán)5次,所以輸出結(jié)果為3*5=15個(gè)“*”。(3)for(i=1;i<=3;i+)for(k=1;k<=5;k+)printf("*"); printf("n"); 輸出結(jié)果為:*可以看出,上面程序段仍然輸出15個(gè)“*”,不過(guò)因?yàn)榧尤肓藫Q行操作,輸出的是3行5列的“*”方陣。小測(cè)驗(yàn):如果要輸出以下效果,循環(huán)該如何設(shè)計(jì)?*【程序代碼】#include <stdio.h>main()int i,j;for(i=1;i<=5;i+)for(j=1;j<=i;j+)printf("*");printf("n");【例5-14】輸出100200之間(包括100和200)的所有素?cái)?shù)。【程序代碼】#include <stdio.h>main()int m,i,flag,n=0;for(m=100;m<=200;m+)flag=0;for(i=2;i&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版生物質(zhì)發(fā)電監(jiān)理服務(wù)合同三方協(xié)議3篇
- 二零二五版企業(yè)安全風(fēng)險(xiǎn)評(píng)估與安保服務(wù)合同3篇
- 二零二五年度高品質(zhì)鋼結(jié)構(gòu)裝配式建筑安裝服務(wù)合同3篇
- 二零二五版電影投資融資代理合同樣本3篇
- 二零二五版初級(jí)農(nóng)產(chǎn)品電商平臺(tái)入駐合同2篇
- 二零二五年度電商平臺(tái)安全實(shí)驗(yàn)報(bào)告安全防護(hù)方案合同3篇
- 二零二五年度白酒銷售區(qū)域保護(hù)與競(jìng)業(yè)禁止合同3篇
- 二零二五版建筑工程專用防水材料招投標(biāo)合同范本3篇
- 二零二五年研發(fā)合作與成果共享合同2篇
- 二零二五版鋼結(jié)構(gòu)工程節(jié)能合同范本下載3篇
- 2024年四川省德陽(yáng)市中考道德與法治試卷(含答案逐題解析)
- 施工現(xiàn)場(chǎng)水電費(fèi)協(xié)議
- SH/T 3046-2024 石油化工立式圓筒形鋼制焊接儲(chǔ)罐設(shè)計(jì)規(guī)范(正式版)
- 六年級(jí)數(shù)學(xué)質(zhì)量分析及改進(jìn)措施
- 一年級(jí)下冊(cè)數(shù)學(xué)口算題卡打印
- 真人cs基于信號(hào)發(fā)射的激光武器設(shè)計(jì)
- 【閱讀提升】部編版語(yǔ)文五年級(jí)下冊(cè)第三單元閱讀要素解析 類文閱讀課外閱讀過(guò)關(guān)(含答案)
- 四年級(jí)上冊(cè)遞等式計(jì)算練習(xí)200題及答案
- 法院后勤部門述職報(bào)告
- 2024年國(guó)信證券招聘筆試參考題庫(kù)附帶答案詳解
- 道醫(yī)館可行性報(bào)告
評(píng)論
0/150
提交評(píng)論