循環(huán)控制熟練掌握forwhiledowhile三種循環(huán)結(jié)構(gòu)掌握循環(huán)的嵌套.ppt_第1頁
循環(huán)控制熟練掌握forwhiledowhile三種循環(huán)結(jié)構(gòu)掌握循環(huán)的嵌套.ppt_第2頁
循環(huán)控制熟練掌握forwhiledowhile三種循環(huán)結(jié)構(gòu)掌握循環(huán)的嵌套.ppt_第3頁
循環(huán)控制熟練掌握forwhiledowhile三種循環(huán)結(jié)構(gòu)掌握循環(huán)的嵌套.ppt_第4頁
循環(huán)控制熟練掌握forwhiledowhile三種循環(huán)結(jié)構(gòu)掌握循環(huán)的嵌套.ppt_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第六章 循環(huán)控制,熟練掌握for、while、do_while三種循環(huán)結(jié)構(gòu) 掌握循環(huán)的嵌套,學(xué)習(xí)要點,學(xué)習(xí)建議,難點,循環(huán)的嵌套 break和continue語句的正確使用,上機(jī)編程,設(shè)計簡單的循環(huán)結(jié)構(gòu),注意設(shè)計錯誤并調(diào)試,第六章 循環(huán)控制,6.1 概述 6.2 goto語句以及用goto語句構(gòu)成循環(huán)(略) 6.3 while語句 6.4 do-while語句 6.5 for語句(重點!) 6.6 循環(huán)的嵌套(重點!) 6.7 幾種循環(huán)的比較(略) 6.8 break語句和continue語句 6.9 程序舉例,6.1循環(huán)概述,一般需要使用循環(huán)的情況是: 有重復(fù)的操作(循環(huán)體); 循環(huán)次數(shù)可以控制 例 有60個學(xué)生,將成績在80分以上者的學(xué)號和成績打印出來.,什么是循環(huán)? 為什么要使用循環(huán)?,n表示學(xué)生學(xué)號,ni代表第i個學(xué)生的學(xué)號;g表示學(xué)生的成績,gi代表第i個學(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語言中可以用下列語句實現(xiàn)循環(huán). goto和if結(jié)合 while for do-while,return,6.2 goto語句以及用goto語句構(gòu)成循環(huán),注意:結(jié)構(gòu)化程序設(shè)計方法,主張限制使用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 語句,實現(xiàn)當(dāng)型循環(huán),一般形式如下: while (表達(dá)式) 語句組,真,假,例6.2 用while語句求,循環(huán)體內(nèi)如果有一個以上的語句,則必須用 構(gòu)成復(fù)合語句;,return,#include void main( ) int i=1,sum=0; /*初始化循環(huán)控制變量i和累計器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語句實現(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語 句處理同一問題時,若二者的循環(huán)體部分是一 樣的,它們的結(jié)果也一樣。但是如果while后面 的表達(dá)式一開始就為假(0值)時,兩種循環(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語句實現(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的累計和。 #include void main() int i,sum=0; printf(“sum=%dn“,sum); ,6.5 for語句,例 求1100的累計和。 #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的累計和。 #include void main() int i,sum=0; for(i=1; i=100; i+) sum=sum+ i; /*實現(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; /*實現(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; /*實現(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; /*實現(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);,運行結(jié)果 n=1 n=3 n=5,運行結(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)),一個循環(huán)體內(nèi)可以包含另一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。,(1) while( ) (2) for(;) (3) do do while( ) for(;) while( ) while( ),循環(huán)的嵌套(多重循環(huán)),輸出第9行(用for如何實現(xiàn)?): for (i=1;i=9;i+) printf(“9%d=%d ”, i,9*i),輸出第n行(用for如何實現(xiàn)?): for (i=1;i=n;i+) printf(“%d%d=%d ”,n,i,n*i),例:編程,輸出下圖的九九乘法表。,循環(huán)的嵌套(多重循環(huán)),輸出乘法表(如何實現(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 *的個數(shù)與當(dāng)前行的關(guān)系 j=2*i-1 *前面的空格k與行的關(guān)系: 開始時,第一行有7個空格 每多一行,少一個空格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)都能實現(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)嵌套時,break和continue只影響包含它們的最內(nèi)層循環(huán),與外層循環(huán)無關(guān)。,例:計算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+的公式求的近似值,直到最后一項的絕對值小于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); ,下一個例程,P129 6.1 輸入兩個正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。,例:m=4,n=6, 其最大公約數(shù)為i=2 最小公倍數(shù)46/2=12。 試探法,下一個例程,#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 譯密碼。輸入若干字符,若為字母字符則將它們變成其后的第四個字母,AE, wa.非字母字符不變. 思路:,1.建立循環(huán), 循環(huán)控制條件是什么?,例6.10 譯密碼。輸入若干字符,若為字母字符則將它們變成其后的第四個字母,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 譯密碼。輸入若干字符,若為字母字符則將它們變成其后的第四個字母,AE, wa.非字母字符不變. 思路:,2. 判斷輸入是否是字母,a bz 98 122 A B.Z 65 66. 90,if (c=a & c=A & c=Z),例6.10 譯密碼。輸入若干字符,若為字母字符則將它們變成其后的第四個字母,AE, wa.非字母字符不變. 思路:,4. 若變換后超出z時,要輪回. (如何判斷是否要輪回?如何輪回?),a b z 98 122 123 A B. Z 65 66. 90 91,3.變成其后的第四個字母?,c=c+4;,if (cZ 例:W:87,Z:90, WA,則:W426,例6.10 譯密碼。輸入若干字符,若為字母字符則將它們變成其后的第四個字母,AE, WA.非字母字符不變. 思路:,3.變成其后的第四個字母 c=c+4;,4. 若變換后超出z時,要輪回. 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是否素數(shù)。 素數(shù):只能被1和其自已整除的數(shù) 算法思想:讓m被2到 除,如果m能被2k之中任何一個整數(shù)整除,則說明m不是素數(shù),提前結(jié)束循環(huán),此時i必然小于或等于k;如果m不能被2k之間的任一整數(shù)整除,則在完成最后一次循環(huán)后,i還要加1,因此i=k+1,然后才終止循環(huán)。在循環(huán)之后判別i的值是否大于或等于k+1,若是,則表明未曾被2k之間任一整數(shù)整除過,因此輸出“是素數(shù)”。,例6.8 判斷m是否素數(shù)。 算法思想:讓m被2到 除,如果m能被2k之中任何一個整數(shù)整除,則說明m不是素數(shù),提前結(jié)束循環(huán),此時i必然小于或等于k;如果m不能被2k之間的任一整數(shù)整除,則在完成最后一次循環(huán)后,i還要加1,因此i=k+1,然后才終止循環(huán)。在循環(huán)之后判別i的值是否大于或等于k+1,若是,則表明未曾被2k之間任一整數(shù)整除過,因此輸出“是素數(shù)”。 如圖所示:,#include #include void main() int m,i,k; scanf(“%d“, ,if(ik) printf(“%d 是素數(shù)n“,m); else printf(“%d 不是素數(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論