




已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第六章 循環(huán)控制,熟練掌握for、while、do_while三種循環(huán)結(jié)構(gòu) 掌握循環(huán)的嵌套,學(xué)習(xí)要點(diǎn),學(xué)習(xí)建議,難點(diǎn),循環(huán)的嵌套 break和continue語句的正確使用,上機(jī)編程,設(shè)計(jì)簡單的循環(huán)結(jié)構(gòu),注意設(shè)計(jì)錯(cuò)誤并調(diào)試,第六章 循環(huán)控制,6.1 概述 6.2 goto語句以及用goto語句構(gòu)成循環(huán)(略) 6.3 while語句 6.4 do-while語句 6.5 for語句(重點(diǎn)!) 6.6 循環(huán)的嵌套(重點(diǎn)!) 6.7 幾種循環(huán)的比較(略) 6.8 break語句和continue語句 6.9 程序舉例,6.1循環(huán)概述,一般需要使用循環(huán)的情況是: 有重復(fù)的操作(循環(huán)體); 循環(huán)次數(shù)可以控制 例 有60個(gè)學(xué)生,將成績在80分以上者的學(xué)號和成績打印出來.,什么是循環(huán)? 為什么要使用循環(huán)?,n表示學(xué)生學(xué)號,ni代表第i個(gè)學(xué)生的學(xué)號;g表示學(xué)生的成績,gi代表第i個(gè)學(xué)生的成績,S1: i=1 S2: 如果gi =80,則打印ni 、 gi S3: i=i+1 S4: 如果i=60,返回S2,否則,算法結(jié)束,循環(huán)體,循環(huán)條件,循環(huán)控制變量i,6.1循環(huán)概述,在C語言中可以用下列語句實(shí)現(xiàn)循環(huán). goto和if結(jié)合 while for do-while,return,6.2 goto語句以及用goto語句構(gòu)成循環(huán),注意:結(jié)構(gòu)化程序設(shè)計(jì)方法,主張限制使用goto語句。,無條件轉(zhuǎn)向語句 格式:goto 語句標(biāo)號; 例: goto loop1;,用途: (1)與if語句一起構(gòu)成循環(huán)結(jié)構(gòu); (2)從多層循環(huán)的內(nèi)層循環(huán)跳到外層循環(huán),6.2 goto語句以及用goto語句構(gòu)成循環(huán),例6.1求,return,loop: if (i=100) sum =sum+ i; i+; goto loop;,6.3 while 語句,實(shí)現(xiàn)當(dāng)型循環(huán),一般形式如下: while (表達(dá)式) 語句組,真,假,例6.2 用while語句求,循環(huán)體內(nèi)如果有一個(gè)以上的語句,則必須用 構(gòu)成復(fù)合語句;,return,#include void main( ) int i=1,sum=0; /*初始化循環(huán)控制變量i和累計(jì)器sum*/ while( i=100 ) sum =sum+ i; i+; /*循環(huán)控制變量i增1*/ printf(“sum=%dn”,sum); ,要有修改循環(huán)變量、使循環(huán)趨于結(jié)束的語句.,6.4 用do-while語句實(shí)現(xiàn)循環(huán),一般形式如下: do 循環(huán)體語句 while(表達(dá)式);,例6.3 用do-while語句求 #include void main() int i=1, sum=0; do sum =sum+ i; /*累加*/ i+; while(i=100); /*循環(huán)繼續(xù)條件:i=100*/ printf(“sum=%dn”,sum); ,while語句和用do-while語句的比較: 在一般情況下,用while語句和用do-while語 句處理同一問題時(shí),若二者的循環(huán)體部分是一 樣的,它們的結(jié)果也一樣。但是如果while后面 的表達(dá)式一開始就為假(0值)時(shí),兩種循環(huán)的結(jié) 果是否相同呢?,#include void main() int sum=0,i; scanf(“%d”, ,#include void main() int sum=0,i; scanf(“%d”, ,return,while語句和用do-while語句的比較:,i=1,i=11,6.5 用for語句實(shí)現(xiàn)循環(huán),for語句的一般形式,for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句,for語句最簡單的應(yīng)用形式,也就是最易理解的形式.,執(zhí)行過程如圖所示。 (1)求解“變量賦初值”表達(dá)式。 (2)求解“循環(huán)繼續(xù)條件”表達(dá)式。如果其值非0,執(zhí)行(3);否則,轉(zhuǎn)至(4)。 (3)執(zhí)行循環(huán)體語句組,并求解“循環(huán)變量增值”表達(dá)式,然后轉(zhuǎn)向(2)。 (4)執(zhí)行for語句的下一條語句。,6.5 for語句,例 求1100的累計(jì)和。 #include void main() int i,sum=0; printf(“sum=%dn“,sum); ,6.5 for語句,例 求1100的累計(jì)和。 #include void main() int i, sum=0; i=1; do sum =sum+ i; i+; while(i=100); printf(“sum=%dn”,sum); ,for(i=1; i=100; i+) sum=sum+ i;,例 求1100的累計(jì)和。 #include void main() int i,sum=0; for(i=1; i=100; i+) sum=sum+ i; /*實(shí)現(xiàn)累加*/ printf(“sum=%dn“,sum); ,6.5 for語句,for循環(huán)執(zhí)行流程: i=1,i+ - i=2, i=100 sum=1+2=3,i+ - i=101, i100 退出循環(huán), i=100 sum=0+1=1,#include void main() int i,sum=0; /*將累加器sum初始化為0*/ for( ; i=100; i+) sum =sum+ i; /*實(shí)現(xiàn)累加*/ printf(“sum=%dn“,sum);,for語句應(yīng)用說明:,for(i=1; i=100; i+) sum =sum+ i;,循環(huán)變量賦初值,循環(huán)終止條件,循環(huán)變量增量,#include void main() int i,sum=0; i=1; for( ; i=100; ) sum =sum+ i; /*實(shí)現(xiàn)累加*/ printf(“sum=%dn“,sum); ,for(i=1; i=100; i+) sum =sum+ i;,#include void main() int i,sum=0; for(i=1; ; i+) sum =sum+ i; /*實(shí)現(xiàn)累加*/ printf(“sum=%dn“,sum); ,for(i=1; i=100; i+) sum =sum+ i;,表達(dá)式2可以省略, 但必須在循環(huán)體中補(bǔ)償循環(huán)控制功能,否則構(gòu)成死循環(huán),if(i100) break; /*break語句的功能是退出它所在的循環(huán)*/,表達(dá)式1和表達(dá)式3可以是和初值、 增量無關(guān)的逗號表達(dá)式,sum=0; for(i=1; i=100; i+) sum =sum+ i;,for(i=1,sum=0; i=100; sum=sum+i, i+) ;,表達(dá)式1和表達(dá)式3可以是和初值、增量無關(guān)的逗號表達(dá)式,sum=0; for(i=1; i=100; i+) sum =sum+ i;,for(i=1,sum=0; i=100; sum=sum+i, i+) ;,for(i=1,sum=0; i=100; sum=sum+i+) ;,for(i=1,sum=0; i=100; i+, sum=sum+i) ;,以下程序的輸出結(jié)果(!),main() int n; for(n=1;n=5;n+=2) printf(“n=%dn”,n);,main() int n; for(n=1;n=5;n+=2); printf(“n=%dn”,n);,運(yùn)行結(jié)果 n=1 n=3 n=5,運(yùn)行結(jié)果 n=7,for 語句和while語句是可以互換的. 表達(dá)式1; while(表達(dá)式2) 語句組; 表達(dá)式3; for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句組; ,6.5 for語句,return,顯然,用for語句簡單、方便。,6.6 循環(huán)的嵌套(多重循環(huán)),一個(gè)循環(huán)體內(nèi)可以包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。,(1) while( ) (2) for(;) (3) do do while( ) for(;) while( ) while( ),循環(huán)的嵌套(多重循環(huán)),輸出第9行(用for如何實(shí)現(xiàn)?): for (i=1;i=9;i+) printf(“9%d=%d ”, i,9*i),輸出第n行(用for如何實(shí)現(xiàn)?): for (i=1;i=n;i+) printf(“%d%d=%d ”,n,i,n*i),例:編程,輸出下圖的九九乘法表。,循環(huán)的嵌套(多重循環(huán)),輸出乘法表(如何實(shí)現(xiàn)?): for (n=1;n=9;n+) for (i=1;i=n;i+) printf(“%d%d=%d ”,n,i,n*i); printf(“n”); ,輸出第n行: for (i=1;i=n;i+) printf(“%d%d=%d ”,n,i,n*i);,問題1:外循環(huán)、內(nèi)循環(huán)的循環(huán)次數(shù)是多少?,循環(huán)的嵌套,例:打印九九表 #include “stdio.h“ void main() int i,n; for (n=1;n=9;n+) for (i=1;i=n;i+) printf(“%d%d=%d “,n,i,i*n); printf(“n“); ,* * * * * * * *,循環(huán)的嵌套,分析: 行的控制 i:18 *的個(gè)數(shù)與當(dāng)前行的關(guān)系 j=2*i-1 *前面的空格k與行的關(guān)系: 開始時(shí),第一行有7個(gè)空格 每多一行,少一個(gè)空格k=8-i while (i=8) for (k=1;k=8-i;k+) 輸出空格; for (j=1;j=(2*i-1);j+) 輸出*; i+; ,#include main() int i,j,k; i=1; while (i=8) for (k=1;k=8-i;k+) printf(“ ”); for (j=1;j=(2*i-1);j+) printf(“*”); printf(“n”); i+; ,循環(huán)的嵌套,return,* * * * * * * *,6.7幾種循環(huán)的比較,(2)for語句的功能更強(qiáng),凡用while循環(huán)能完成的,用for循環(huán)都能實(shí)現(xiàn)。,(1)四種循環(huán)都可以用來處理同一問題,一般情況下它們可以互相代替。但一般不提倡用goto型循環(huán)。,return,為了使循環(huán)控制更加靈活,語言提供了break語句和continue語句。 1一般格式: break; continue;,6.8 break 和continue,2功能 (1)break:強(qiáng)行結(jié)束循環(huán),轉(zhuǎn)向執(zhí)行循環(huán)語句的下一條語句。,(2)continue:結(jié)束本次循環(huán)。 即跳過循環(huán)體中尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判斷。,break語句用來從循環(huán)體里退出,中止循環(huán) continue用來跳過剩下的語句,回到循環(huán)開始,break語句和continue語句,3說明 (1)break能用于循環(huán)語句和switch語句中,continue只能用于循環(huán)語句中。,6.8 break 和continue,(2)循環(huán)嵌套時(shí),break和continue只影響包含它們的最內(nèi)層循環(huán),與外層循環(huán)無關(guān)。,例:計(jì)算r=1,2,10的圓面積,只到面積大于100為止;,#include void main( ) int r; float area; for(r=1;r100.0) printf(“Area is %fn”,area); ,break;,把100200之間的不能被3整除的打印出來.,6.8 break 和continue,void main() int n; for(n=100;n=200;n+) ,if(n%3= =0) printf(“不能被3整除的數(shù)是:%dn”,n);,return,continue;,6.9 程序舉例,例6.6用/41-1/3+1/5-1/7+的公式求的近似值,直到最后一項(xiàng)的絕對值小于106為止,#include #include main() int s; float n, t, pi; t=1; pi=0; n=1.0; s=1; while (fabs(t)=1e-6) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(“pi=%10.6fn”,pi); ,下一個(gè)例程,P129 6.1 輸入兩個(gè)正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。,例:m=4,n=6, 其最大公約數(shù)為i=2 最小公倍數(shù)46/2=12。 試探法,下一個(gè)例程,#include void main() int m,n,i; printf(“please input two integers n,mn“); scanf(“%d,%d“, ,if(nm) i=m;m=n;n=i;,for(i=m;i=1;i-) if(m%i=0),printf(“最大公約數(shù)是: %d.n“,i); printf(“最小公倍數(shù)是: %d.n“, m*n/i);,下一張,#include void main() int m,n,k,i,leap=1; printf(“please input two integers n,mn“); scanf(“%d,%d“, ,if(nm) k=m;m=n;n=k;,for(i=m;(i=1),i+;,下一張,printf(“最大公約數(shù)是: %d.n“,i); printf(“最小公倍數(shù)是: %d.n“, m*n/i);,例6.10 譯密碼。輸入若干字符,若為字母字符則將它們變成其后的第四個(gè)字母,AE, wa.非字母字符不變. 思路:,1.建立循環(huán), 循環(huán)控制條件是什么?,例6.10 譯密碼。輸入若干字符,若為字母字符則將它們變成其后的第四個(gè)字母,AE, wa.非字母字符不變. 思路:,1.建立循環(huán), 循環(huán)結(jié)束以輸入回車符為準(zhǔn) while(c=getchar( )!=n) 循環(huán)體。 ,對比: while(c=getchar( )!=n),while(c=getchar( )!=n),例6.10 譯密碼。輸入若干字符,若為字母字符則將它們變成其后的第四個(gè)字母,AE, wa.非字母字符不變. 思路:,2. 判斷輸入是否是字母,a bz 98 122 A B.Z 65 66. 90,if (c=a & c=A & c=Z),例6.10 譯密碼。輸入若干字符,若為字母字符則將它們變成其后的第四個(gè)字母,AE, wa.非字母字符不變. 思路:,4. 若變換后超出z時(shí),要輪回. (如何判斷是否要輪回?如何輪回?),a b z 98 122 123 A B. Z 65 66. 90 91,3.變成其后的第四個(gè)字母?,c=c+4;,if (cZ 例:W:87,Z:90, WA,則:W426,例6.10 譯密碼。輸入若干字符,若為字母字符則將它們變成其后的第四個(gè)字母,AE, WA.非字母字符不變. 思路:,3.變成其后的第四個(gè)字母 c=c+4;,4. 若變換后超出z時(shí),要輪回. if (cZ & cz) c=c-26 例:W:87,Z:90, WA,則:W426,2. 判斷輸入是否是字母 if (c=a & c=A & c=Z),1.建立循環(huán), 循環(huán)結(jié)束以輸入回車符為準(zhǔn) while(c=getchar( )!=n),#include void main( ) char c; while(c=getchar( )!=n) if (c=a ,abdEgW efhIkA,例6.8 判斷m是否素?cái)?shù)。 素?cái)?shù):只能被1和其自已整除的數(shù) 算法思想:讓m被2到 除,如果m能被2k之中任何一個(gè)整數(shù)整除,則說明m不是素?cái)?shù),提前結(jié)束循環(huán),此時(shí)i必然小于或等于k;如果m不能被2k之間的任一整數(shù)整除,則在完成最后一次循環(huán)后,i還要加1,因此i=k+1,然后才終止循環(huán)。在循環(huán)之后判別i的值是否大于或等于k+1,若是,則表明未曾被2k之間任一整數(shù)整除過,因此輸出“是素?cái)?shù)”。,例6.8 判斷m是否素?cái)?shù)。 算法思想:讓m被2到 除,如果m能被2k之中任何一個(gè)整數(shù)整除,則說明m不是素?cái)?shù),提前結(jié)束循環(huán),此時(shí)i必然小于或等于k;如果m不能被2k之間的任一整數(shù)整除,則在完成最后一次循環(huán)后,i還要加1,因此i=k+1,然后才終止循環(huán)。在循環(huán)之后判別i的值是否大于或等于k+1,若是,則表明未曾被2k之間任一整數(shù)整除過,因此輸出“是素?cái)?shù)”。 如圖所示:,#include #include void main() int m,i,k; scanf(“%d“, ,if(ik) printf(“%d 是素?cái)?shù)n“,m); else printf(“%d 不是素?cái)?shù)n“,m);,k=sqrt(m)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)內(nèi)部審計(jì)財(cái)務(wù)代理合同標(biāo)準(zhǔn)文本
- 零售業(yè)采購計(jì)劃編制及目標(biāo)優(yōu)化合同
- 住宅小區(qū)車位租賃合同標(biāo)準(zhǔn)范本
- 財(cái)產(chǎn)分割及子女撫養(yǎng)權(quán)糾紛調(diào)解協(xié)議書
- 房地產(chǎn)項(xiàng)目前期開發(fā)手續(xù)一站式代辦與專業(yè)咨詢協(xié)議
- 消費(fèi)者金融代收款代理合同
- 不可壓縮流體的一元流動課件
- 車輛駕駛與智能駕駛系統(tǒng)承包合同范本
- 文化創(chuàng)意產(chǎn)業(yè)廠房轉(zhuǎn)租合同書
- 餐飲企業(yè)股東權(quán)益保障與合伙經(jīng)營合同
- 警察政治培訓(xùn)課件
- 2025-2030中國疏浚工程行業(yè)發(fā)展態(tài)勢與前景規(guī)劃分析報(bào)告
- 科室vte管理制度
- 2025年中國舒適眼鏡白皮書-艾瑞咨詢-202506
- 中小學(xué)美術(shù)教學(xué)評價(jià)構(gòu)建及實(shí)施策略
- 2025-2030玉石行業(yè)風(fēng)險(xiǎn)投資發(fā)展分析及運(yùn)作模式與投融資研究報(bào)告
- 江蘇省揚(yáng)州市2024-2025學(xué)年四年級下學(xué)期6月數(shù)學(xué)期末試題一(有答案)
- (2025)發(fā)展對象培訓(xùn)考試題和答案
- 2024年西南醫(yī)科大學(xué)招聘專職輔導(dǎo)員真題
- 2025年經(jīng)濟(jì)學(xué)基礎(chǔ)理論考試試卷及答案
- 建筑施工項(xiàng)目支付流程及管理
評論
0/150
提交評論