6-循環(huán)結(jié)構(gòu)的程序設(shè)計.ppt_第1頁
6-循環(huán)結(jié)構(gòu)的程序設(shè)計.ppt_第2頁
6-循環(huán)結(jié)構(gòu)的程序設(shè)計.ppt_第3頁
6-循環(huán)結(jié)構(gòu)的程序設(shè)計.ppt_第4頁
6-循環(huán)結(jié)構(gòu)的程序設(shè)計.ppt_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C語言程序設(shè)計,計算機(jī)學(xué)院,第六章 循環(huán)結(jié)構(gòu)的程序設(shè)計,6.1 循環(huán)的基本概念 6.2 用while語句設(shè)計循環(huán)結(jié)構(gòu)程序 6.3 用do_while語句設(shè)計循環(huán)結(jié)構(gòu)程序 6.4 用for語句設(shè)計循環(huán)結(jié)構(gòu)程序 6.5 Break語句與continue語句 6.6 幾種循環(huán)語句的比較 6.7 循環(huán)的嵌套,6.1 循環(huán)的基本概念,求 S=1+2+3+.+100,S=0; S=S+1; S=S+2; . S=S+100;,S=0 S=S+i (i=1,2,.,100),s=0,i=1,i100,s=s+i,i=i+1,y,n,6.1 循環(huán)的基本概念,重復(fù)作某件事的現(xiàn)象稱為“循環(huán)”; 循環(huán)結(jié)構(gòu)就是在滿足

2、循環(huán)條件時,重復(fù)執(zhí)行某程序段,直到循環(huán)條件不滿足為止,重復(fù)執(zhí)行的程序稱為循環(huán)體; 循環(huán)結(jié)構(gòu)有“當(dāng)型”和“直到型”兩種形式;,6.2 用while語句設(shè)計循環(huán)結(jié)構(gòu)程序,while 語句: 形式: while(表達(dá)式K) 循環(huán)體S(由若干語句組成) 功能:先判斷條件,當(dāng)條件為真時反復(fù)執(zhí)行循環(huán) 體,條件為假則退出循環(huán)。,6.2 用while語句設(shè)計循環(huán)結(jié)構(gòu)程序,while語句說明: while語句構(gòu)成的循環(huán)屬于“當(dāng)型”循環(huán); 表達(dá)式是控制循環(huán)的條件,可以是任何類型的表達(dá)式; while語句的特點(diǎn)是:先判斷,后執(zhí)行,有可能循環(huán)一次也不執(zhí)行;,6.2 用while語句設(shè)計循環(huán)結(jié)構(gòu)程序,求和: 1+2+3

3、+.+100=? main() int i,s; i=1;s=0; while(i=100) s=s+i;i+; printf(“s=%dn”,s); ,問題:是否可以 1、去掉while語句的 2、去掉i+; 3、將i+; 移到s=s+i;之前,while語句-實(shí)例,例1:從鍵盤輸入10個整數(shù),求這10個整數(shù)之和。,count=count+1,成立,不成立,輸出結(jié)果total,計數(shù)器count=0,累加器total=0,輸入num,total += num,開始,結(jié)束,while ( count=10 ) ,count = count + 1;,scanf(%d, ,total = tota

4、l + num;,程序主體,while語句-實(shí)例,#include main ( ) int count,num,total; /* count:計數(shù)器,num:輸入的整數(shù) */ count = total = 0; /* total:存放累加和 */,while ( count=10 ) /* 循環(huán)控制條件 */ count = count + 1; /* 循環(huán)體 */ printf (Enter the No.%d=, count); scanf (%d, /* 計算累加和 */ ,printf(Total=%dn, total); ,while語句-實(shí)例,例2:求 1 到 10 的階乘

5、n!。,n = n * i,成立,不成立,計數(shù)器 i = 1,累積器 n = 1,輸入結(jié)果,i = i + 1,開始,結(jié)束,while ( i = 10 ) ,n = n * i;,printf(%d, n);,i = i + 1;,程序主體,遞推公式: f(n)=1 當(dāng)n=1時 f(n)=f(n-1)*n 當(dāng)n1時,while語句-實(shí)例3,循環(huán)嵌套: 在循環(huán)體中,又包含有循環(huán)語句。 例3:輸出下三角形乘法九九表。 1 2 3 4 5 6 7 8 9 - 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42

6、49 8 16 24 32 40 48 56 64 9 18 27 36 45 54 63 72 81 假設(shè):行號為i ,列號為j,i=6 j=5 i*j,(1=i=9),(1=j=i),則:第 i 行中一共要輸出 i 個乘積。,while語句-實(shí)例,#include main ( ) int i=1, j; /* i:行計數(shù)器 j:列計數(shù)器 */ while ( i = 9 ) /* 控制打印表頭 */ printf ( %4d, i+ ); printf (n-n); i=1; while ( i= 9 ) j = 1; /* 列計數(shù)器置1 */ while ( j = i ) /* 嵌套

7、的二重循環(huán)。輸出第i行 */ printf (%4d, i*j ); j +; /* 列計數(shù)器+1 */ printf (n); /* 一行輸出結(jié)束后,輸出n */ i +; /* 行計數(shù)器+1 */ ,外層循環(huán)體每執(zhí)行1次,內(nèi)層循環(huán)要完成由內(nèi)循環(huán)條件所決定的次數(shù),while語句使用注意,1.while (0) . 由于循環(huán)的條件表達(dá)式恒等于0,循環(huán)體永遠(yuǎn)也不會執(zhí)行,是編程者的錯誤。 2.while (1) . 由于循環(huán)的條件表達(dá)式恒等于 1,所以不可能通過循環(huán)控制條件來結(jié)束循環(huán)體的執(zhí)行,稱為“死循環(huán)”。 3.為了保證循環(huán)正常運(yùn)行,應(yīng)該特別注意: 循環(huán)控制條件 控制條件的初始狀態(tài)(初始值) 循

8、環(huán)體內(nèi)部對控制條件的影響,6.3 用do_while語句設(shè)計循環(huán)結(jié)構(gòu)程序,do_while語句 形式: do 循環(huán)體Swhile(K); 先執(zhí)行循環(huán)體,當(dāng)條件為真時反 復(fù)執(zhí)行循環(huán)體,條件為假則退出循環(huán)。,6.3 用do_while語句設(shè)計循環(huán)結(jié)構(gòu)程序,do_while語句說明: do_while語句構(gòu)成“直到型”循環(huán)結(jié)構(gòu); do_while語句的特點(diǎn)是先執(zhí)行后判斷,循環(huán)體至少執(zhí)行一次; 重復(fù)執(zhí)行循環(huán)體,直到表達(dá)式為假時退出循環(huán);,6.3 用do_while語句設(shè)計循環(huán)結(jié)構(gòu)程序,求積: n!=1*2*3*.*n main() /* 求n! */ int i,n ,s; scanf(“%d”,;

9、double s;,%f,用do_while語句設(shè)計循環(huán)結(jié)構(gòu),main() int s=0,x; scanf(%d, ,main() int s=0,x; scanf(%d, ,輸入:12 輸出: s=12,循環(huán)至少 執(zhí)行一次,循環(huán)沒有 被執(zhí)行,輸入:12 輸出: s=0,while 與do while的比較,6.4 用for語句設(shè)計循環(huán)結(jié)構(gòu)程序,for語句: 形式: for(k1;k2;k3) S(循環(huán)體) 功能: ki-表達(dá)式 k1 - 用來確定循環(huán)變量的初值 k2 - 確定循環(huán)控制條件 k3 - 確定循環(huán)變量的增量 先計算k1,當(dāng)k2為真時執(zhí)行循環(huán)體 并計算k3,然后再判斷k2,直到k2

10、為 假時退出循環(huán)。,6.4 用for語句設(shè)計循環(huán)結(jié)構(gòu)程序,計算1*2*100=? main( ) int i;double s=1; for(i=1;i=100;i+) s=s*i; printf(“s=%fn”,s); ,循環(huán)變量初值,循環(huán)條件,循環(huán)變量步長,循環(huán)體中,如有多條語句要用 括起來。,for語句中的三個表達(dá)式(表達(dá)式1,表達(dá)式2和表達(dá)式3)中的任意一個都可省略,但是分號不能省略。,for (n=0;n+) 缺表達(dá)式2, 造成死循環(huán),不可使用! (除非循環(huán)體中有使循環(huán)退出的條件) for (n=0;n100;) 缺表達(dá)式3, n增量應(yīng)在循環(huán)體內(nèi)進(jìn)行 for (; ;) 三個表達(dá)式都

11、缺省, 死循環(huán)(同2) for (;n100;) 缺表達(dá)式1和表達(dá)式3,for語句的其它幾種變化形式,for (;n100;n+) 缺表達(dá)式1, n 應(yīng)在循環(huán)之前賦初值,分號始終不能缺!,for 語句-實(shí)例,輸出圖形 * * * * * 使用嵌套循環(huán)完成,main() int i,j,n; scanf(%d, ,外循環(huán)對行 內(nèi)循環(huán)對列,6.5 Break語句與continue語句,break語句: 形式:break; (用于循環(huán)或switch語句中) 功能:終止執(zhí)行所在的循環(huán)(或switch)語句 continue語句: 形式:continue; (只能用于循環(huán)體中) 功能:結(jié)束本次循環(huán).(不

12、是結(jié)束整個循環(huán)),6.5 Break語句與continue語句,main() /*求1-13中不能被3整除的數(shù)*/ int i; for(i=1;i=13;i+) if(i%3 = 0) continue; printf(“%d,”,i); 輸出 ?,1,2,4,5,7,8,10,11,13,1,2,若把continue; 換成 break;則輸出,break;,6.6 幾種循環(huán)語句的比較,三種循環(huán)語句可以處理同一問題; for和 while循環(huán)語句: 先判斷, 后執(zhí)行(可能不執(zhí)行循環(huán))。do_while循環(huán)語句: 先執(zhí)行, 后判斷(至少執(zhí)行一次循環(huán)) for語句用于循環(huán)次數(shù)確定的情況,whi

13、le、do_while用于循環(huán)次數(shù)不確定的情況; do_while語句更適合首次循環(huán)肯定執(zhí)行的情況;,while、do_while語句只能表達(dá)循環(huán)控制條件,而for語句有3個表達(dá)式,不僅能控制循環(huán),而且能控制循環(huán)變量的初值及其變化,功能更強(qiáng)。 其中for語句中的三個表達(dá)式都可省掉(不采用)或部分省掉。 通常表達(dá)式2不可少,否則循環(huán)中必須有使循環(huán)退出的條件 如果省掉第一、二表達(dá)式,分號不可少,6.6 幾種循環(huán)語句的比較,循環(huán)體可放入表達(dá)式 3,for ( i=1; i=10; printf (“%5d”, i ) , i+) ;,因?yàn)檠h(huán)體在表達(dá)式 2 之后,表達(dá)式 3 之前執(zhí)行,如果將 循環(huán)體

14、語句放入表達(dá)式 3,循環(huán)體語句與原來的表達(dá)式 3構(gòu)成逗 號表達(dá)式,作為循環(huán)語句新的表達(dá)式 3,而 for 語句就無循環(huán)體 語句了。,語法上循環(huán)結(jié)構(gòu)必須要有循環(huán)體語句,否則會出現(xiàn)語法錯誤。,為解決這個問題,在for 語句后加一空語句,作為循環(huán)體 語句用以解決語法的要求。,空語句,6.6 幾種循環(huán)語句的比較,6.7 循環(huán)的嵌套,循環(huán)嵌套:循環(huán)語句的循環(huán)體中又出現(xiàn)循環(huán)語句。 main() /*2重循環(huán)*/ int i; for(i=1;i=2;i+) /*外循環(huán)*/ printf(“i=%d,j=”,i); for(j=1;j=3;j+)/*內(nèi)循環(huán)*/ printf(“%d,”,j); printf

15、(“n”); 輸出 ?,外循環(huán)的每一次循環(huán)(i), 均對應(yīng)整個內(nèi)循環(huán)(j=1,2,3),i=1,j=,1,i=2,j=,1,2,3,2,3,嵌套結(jié)構(gòu)規(guī)則,外循環(huán),內(nèi)循環(huán),交叉循環(huán),外循環(huán) 入口,內(nèi)循環(huán)出口,內(nèi)循環(huán)出口,外循環(huán)出口,外循環(huán)出口,1. 在嵌套的循環(huán)中外循環(huán)與內(nèi)循環(huán)變量不可同名。,2. 外循環(huán)與內(nèi)循環(huán)不可交叉。,6.8 應(yīng)用實(shí)例,main() /*求10到12中的素數(shù)*/ int i,j,k; scanf(“%d”, 輸入10 輸出 輸入11 輸出 輸入12 輸出,for(k=10;k13;k+) /* 外循環(huán)提供要檢測的數(shù) k*/ ,內(nèi)循環(huán),10 no,11 yes,12 no,輸

16、出: 10 no 11 yes 12 no,6.8 應(yīng)用實(shí)例,求Fibonacci 數(shù)列 1,1,2,3,5,8.的前20項 遞推公式: f1=1,f2=1 fi=fi-1+fi-2 (i=3,4,20),main( ) long f1,f2,f; int i; f1=f2=1; printf(%12ld %12ldn,f1,f2); for(i=3;i=20;i+) f=f1+f2; f1=f2;f2=f;/* 為下一項做準(zhǔn)備*/ printf(%12ld ,f); if(i%2=0) printf(“n”);/*每行2個數(shù)*/ ,6.8 應(yīng)用實(shí)例,f1,f2,f1,f2,f1 .,main

17、( ) long f1,f2; int i; f1=f2=1; for(i=1;i=10;i+) printf(%12ld %12ldn,f1,f2); f1=f1+f2; f2=f2+f1;/*一次產(chǎn)生兩個數(shù)*/ ,6.8 應(yīng)用實(shí)例,main( ) int i,j,k,a,t=0; for(i=1;i=9;i+) for(j=1;j=9;j+) for(k=1;k=9;k+) for(a=1;a=9;a+) if(i=j|i=k|i=a) continue; if(j=k|j=a|k=a) continue; if(i+j+k+a!=12) continue; printf(“%d,%d,%

18、d,%d ”,i,j,k,a); t+;if(t%6=0) printf(“n”);/*每行6個排列*/ ,從1到9中選出4個互不相同的數(shù)構(gòu)成排列, 并使它們的和等于12,輸出所有這樣的排列.如1,2,3,6,循環(huán)94次 判斷8*94=52488次,6.8 應(yīng)用實(shí)例,main( ) int i,j,k,a,t=0; for(i=1;i=6;i+) for(j=1;j=6;j+) for(k=1;k=6;k+) for(a=1;a=6;a+) if(i=j|i=k|i=a) continue; if(j=k|j=a|k=a) continue; if(i+j+k+a!=12) continue; printf(“%d,%d,%d,%d ”,i,j,k,a); if(t%6=0) printf(“n”); ,4個數(shù)中任意3個數(shù)的和最小值為6,所以4個數(shù)均不超過6,循環(huán)64次 判斷8* 64=10368次,6.8 應(yīng)用實(shí)例,main( ) int i,j,k,a,t=0; for(i=1;i6|

溫馨提示

  • 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

提交評論