第6章循環(huán)結(jié)程序設(shè)計(jì)_第1頁
第6章循環(huán)結(jié)程序設(shè)計(jì)_第2頁
第6章循環(huán)結(jié)程序設(shè)計(jì)_第3頁
第6章循環(huán)結(jié)程序設(shè)計(jì)_第4頁
第6章循環(huán)結(jié)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第6章章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)l循環(huán)結(jié)構(gòu)可以完成重復(fù)性、規(guī)律性的操作.在人們所需處理的運(yùn)算任務(wù)中,常常需要用到循環(huán),例如:1100的累加和等。在語言中有三種循環(huán)語句:while、dowhile、for。用goto語句和if語句也能構(gòu)成循環(huán)。l6.1 goto6.1 goto語句語句lgoto語句 為無條件轉(zhuǎn)向語句。l格式:格式:goto goto ;l功能:功能:程序執(zhí)行到goto語句時(shí),轉(zhuǎn)到語句標(biāo)號指定的語句去執(zhí)行。l說明:(1)語句標(biāo)號必須用標(biāo)識符表示,不能整數(shù)作為標(biāo)號。(2)與if語句一起構(gòu)成循環(huán)結(jié)構(gòu)。l例題例題6.1 求s=1+2+3+100lmain()l int i=

2、1,s=0;lloop: if(i=100) /* loop是一個語句標(biāo)號*/l s=s+i;li+;lgoto loop;llprintf(“s=%dn”,s);l6.2 for語句語句l注意注意:結(jié)構(gòu)化程序設(shè)計(jì)方法,主張限制使用goto語句。因?yàn)闉E用goto語句,將會導(dǎo)致程序結(jié)構(gòu)無規(guī)律、可讀性差。l6.2 for語句語句l1for語句的一般格式語句的一般格式l for(變量賦初值;循環(huán)繼續(xù)條件;循環(huán)變量增值)l 循環(huán)體語句組;2for語句的執(zhí)行過程語句的執(zhí)行過程(1)求解“變量賦初值”表達(dá)式。(2)求解“循環(huán)繼續(xù)條件”表達(dá)式。如果其值非0,執(zhí)(3) ;否則,轉(zhuǎn)至(5)。(3)執(zhí)行循環(huán)體語句

3、組,(4)求解“循環(huán)變量增值”表達(dá)式,然后轉(zhuǎn)向(2)。(5)執(zhí)行for語句的下一條語句。l例如:for (n=1;n=20;n+)ls=s+n; for語句執(zhí)行過程圖3說明說明l(1)“變量賦初值”、“循環(huán)繼續(xù)條件”和“循環(huán)變量增值”部分均可缺省,甚至全部缺省,但其間的分號不能省略。l i=1;lfor(;i=100;i+)ls=s+i; for中缺省變量賦初值,但是在for前面要有i=1;lfor(i=1; ;i+)l s=s+i;l for中缺省“循環(huán)繼續(xù)條件”,相當(dāng)于條件永遠(yuǎn)為真,無限循環(huán)。lfor( ; ; ) 語句;l全部缺省即不設(shè)初值,不判斷條件,循環(huán)變量不增值。無終止地執(zhí)行循環(huán)體

4、。 3說明說明l(2)當(dāng)循環(huán)體語句組僅由一條語句構(gòu)成時(shí),可以不使用 號括,但是當(dāng)循環(huán)體語句組由多條語句構(gòu)成時(shí)必須用 號括起來。l(3)“循環(huán)變量賦初值”表達(dá)式,既可以是給循環(huán)變量賦初值的賦值表達(dá)式,也可以是與此無關(guān)的其它表達(dá)式(如逗號表達(dá)式)。l例如: for(sum=0,i=1;i=100;i+) sum += i;l(4)“循環(huán)繼續(xù)條件”部分是一個邏輯量,除一般的關(guān)系表達(dá)式(如 n=20)或邏輯表達(dá)式(ab&xy)外,也允許是數(shù)值(或字符)表達(dá)式,只要其值為非0(真),就執(zhí)行循環(huán)體。3說明說明l例如:例如:for(n=0; (c=getchar()!=n; n+=c);for(n=

5、0; (c=getchar()!=n; n+=c);l在循環(huán)繼續(xù)條件中先從鍵盤接收一個字符給c,然后判斷值是否不等于n(換行符),如果不等于,就執(zhí)行循環(huán)體,此語句最后有“;”說明循環(huán)體為空語句,所以執(zhí)行n+=c即把字符的ascii碼累加存入n變量。l此語句的作用是:不斷輸入字符,將它們的碼相加,直此語句的作用是:不斷輸入字符,將它們的碼相加,直到輸入一個到輸入一個“換行換行”符為止符為止例題l例題例題6.2 求1100的累計(jì)和。l/*程序功能:求1100的累計(jì)和*/lmain()l int i,sum=0; /*將累加器sum初始化為0*/l for(i=1; i=100; i+) sum +

6、= i; /*實(shí)現(xiàn)累加*/l printf(sum=%dn,sum);l程序運(yùn)行情況如下:sum=5050例題l例題例題6.3 求t=1*2*3*4*5*nlmain()l int n, i;ldouble t=1.0; /*所求累乘值很大,所以用double型且初始化為1 */lprintf(“input n:”);lscanf(“%d”,&n);lfor (i=1;i=n;i+)lt=t*i; /*實(shí)現(xiàn)累乘,循環(huán)體只有一個語句不用 號*/lprintf(“t=%e”,t); /*用指數(shù)形式輸出雙精度類型的t變量的值*/l運(yùn)行結(jié)果:input n: 5t=1.200000e+02 此

7、程序t 放的是n!,當(dāng)n較大時(shí)階乘數(shù)會很大,所以定義為double型。例題l例例6.4 求s=1+1/2+1/3+1/nlmain()l int i,n;lfloat s=1;lprintf(“input n:”);lscanf(“%d”,&n);lfor(i=2;i=n;i+)ls=s+1.0/i;lprintf(“s=%fn”,s);l此程序注意求1/2、1/3時(shí),如果兩個操作數(shù)都是int型,完成的是整除得0,則最后s的是1,這是錯誤的。應(yīng)使除數(shù)和被除數(shù)其中有一個為實(shí)型才可以,如:s=s+1.0/i;或i定義為float,則 s=s+1/i。運(yùn)行結(jié)果:input n:4s=2.08

8、33336.3 while語句語句l(1)一般格式l while(循環(huán)繼續(xù)條循環(huán)繼續(xù)條件件) l 循環(huán)體語句組;循環(huán)體語句組;l(2)執(zhí)行過程例題l例題例題6.5用while語句求1100的累計(jì)和。lmain()l int i=1,sum=0; /*初始化循環(huán)控制變量i和累計(jì)器sum*/l while( i=100 )l sum += i;/*實(shí)現(xiàn)累加*/l i+;/*循環(huán)控制變量i增1*/l lprintf(“sum=%dn”,sum);l 此程序此程序while while 語句的循環(huán)體語句的循環(huán)體有兩個語句有兩個語句sum += i; sum += i; i+;i+;所以要用所以要用 號

9、括起來號括起來以復(fù)合語句形以復(fù)合語句形式出現(xiàn)。式出現(xiàn)。程序運(yùn)行情況如下: sum=50506.4 do while 語句語句l1一般格式一般格式l do l 循環(huán)體語句循環(huán)體語句組組; l while(循環(huán)繼續(xù)循環(huán)繼續(xù)條件條件); /*本行的分號不能缺省*/例題l 例題例題6.6 用do-while語句求解1100的累計(jì)和。lmain()l int i=1, sum=0; /*定義并初始化循環(huán)控制變量i,以及累計(jì)器sum*/l dol sum += i; /*累加*/l i+; l l while(i=100);/*循環(huán)繼續(xù)條件:i=100*/ printf(“sum=%dn”,sum);l

10、程序運(yùn)行情況如下: sum=5050例題l例題例題6.7統(tǒng)計(jì)從鍵盤上輸入整數(shù)的個數(shù)(輸入0時(shí)結(jié)束,0不計(jì)在內(nèi))lmain( )l int n,x=0;ldo lscanf(“%d”,&n);lx+;lwhile(n!=0);lprintf(“x=%dn”,x-1);l運(yùn)行結(jié)果及分析l運(yùn)行情況:l2 4 6 34 0lx=4l此程序用do while語句一開始不做判斷進(jìn)入循環(huán),用scanf()輸入整數(shù),輸入一個整數(shù),x加一次1,然后判斷是否輸入的是表示結(jié)束的0,一直重復(fù)直到輸入0停止循環(huán)。由于do while語句是后判斷循環(huán)繼續(xù)條件,最后輸入的0也計(jì)算在個數(shù)內(nèi),所以輸出時(shí),要輸出x-1的

11、值。例題l例題例題 6.8 while和 dowhile循環(huán)的比較l (1) (2)lmain() main() l int s=0,i; int s=0,i;lscanf (“%d”,&i); scanf(“%d”,&i); lwhile (i=10) dol s=s+i; s=s+i;li+; i+;l while (i10時(shí),二者結(jié)果就不同了。這是因?yàn)榇藭r(shí)對while 循環(huán)來說,一次也不執(zhí)行循環(huán)體,而對dowhile循環(huán)語句來說則要執(zhí)行一次循環(huán)體。while 循環(huán)是前判斷,而dowhile循環(huán)是后判斷。6.5 循環(huán)的嵌套循環(huán)的嵌套l3種循環(huán)(種循環(huán)(while、dowhi

12、le、for) 可以互相嵌套。可以互相嵌套。l(1) while( ) (2)while( )l l do l while( ) l while( ); l (3) do l (4) for( ; ; )l do l while( )l while( ); llwhile( ); 6.5 循環(huán)的嵌套循環(huán)的嵌套l(5) for( ; ; ) (6) dol lfor( ; ; ) for( ; ;)l l while( );雙重循環(huán)l2兩層兩層for組成的雙循環(huán)的執(zhí)行過程:組成的雙循環(huán)的執(zhí)行過程:l當(dāng)外循環(huán)控制變量每確定一個值時(shí),內(nèi)循環(huán)的控制變量就要從頭至尾的循環(huán)一遍。l例題例題6.9 雙循環(huán)程

13、序舉例。lmain()l int x,y;lfor (x=1;x=2;x+)lfor(y=1;y=3;y+)lprintf (“x=%d,y=%dn”,x,y);l 運(yùn)行結(jié)果:x=1,y=1x=1,y=2x=1,y=3x=2,y=1x=2,y=2x=2,y=3例題l例題例題6.10下面程序的輸出結(jié)果是什么?(訓(xùn)練閱讀程序能力)lmain( )l int k=0,m=0;lint x,y;lfor(x=0;x2;x+)l for(y=0;y3;y+)l k+;lk-=y;llm=x+y;lprintf(“k=%d,m=%dn”,k,m);l運(yùn)行結(jié)果:k=0,m=5本程序是雙循環(huán)嵌套,注意內(nèi)循環(huán)體

14、只有 一個語句k+;因?yàn)闆]有大花括號。不要將 k-=y;語句也認(rèn)為是內(nèi)循環(huán)體語句。當(dāng)x=0時(shí),內(nèi)循環(huán)執(zhí)行3次(y=0,1,2)k+執(zhí)行3次故循環(huán)結(jié)束時(shí)k=3。注意當(dāng)內(nèi)循環(huán)結(jié)束 時(shí)循環(huán)控制變量y的值是3,接著執(zhí)行 k-=y; 語句,即k=k-y=3-3=0。當(dāng)x=1時(shí),內(nèi)循環(huán)仍執(zhí)行原操作。使y=3,k=0。當(dāng)x=2外循環(huán)結(jié)束,執(zhí)行m=x+y=2+3=5。所以輸出結(jié)果為k=0,m=5。 6.6 break語句和語句和continue語句語句l為了使循環(huán)控制更加靈活,語言提供了break語句和continue語句。l1 break語句語句l一般格式: break;(本語句必須在循環(huán)中使用)l功能:l

15、在循環(huán)中當(dāng)滿足特定條件時(shí),使用break語句強(qiáng)行結(jié)束循環(huán),轉(zhuǎn)向執(zhí)行循環(huán)語句的下一條語句。例題l例題例題6.11 break語句應(yīng)用lmain()l int r; lfloat pi=3.14159,s;lfor (r=1;r100) break;lprintf(“r=%d,s=%fn”,r,s);ll運(yùn)行結(jié)果:r=1,s=3.141590r=2,s=12.566360r=3,s=28.274311r=4,s=50.265442r=5,s=78.539749continue語句:語句:l2continue語句:語句:l功能:對于for循環(huán),跳過循環(huán)體其余語句,轉(zhuǎn)向循環(huán)變量增量表達(dá)式的計(jì)算;對于w

16、hile和do-while循環(huán),跳過循環(huán)體其余語句,但轉(zhuǎn)向循環(huán)繼續(xù)條件的判定。l例題例題6.12將100200之間的不能被3整除的數(shù)輸出。(continue應(yīng)用舉例。)lmain()l int n;lfor(n=100; n200停止循環(huán)。l例題例題6.13分析下面程序的運(yùn)行結(jié)果。(continue應(yīng)用舉例。)l/*例題源代碼文件名:lt6_13.c*/lmain()l int i=0,s=0;例題l do lif (i%2)l i+; continue;l i+;ls+=i;lwhile (i7);lprintf(“s=%dn”,s);ll分析:分析:l當(dāng)i%2為0時(shí),表示假跳過 i+; c

17、ontinue;語句,執(zhí)行i+; s+=i;l當(dāng)i%2為1時(shí),表示真執(zhí)行 i+; continue;語句,所以本程序s的和是1+3+5+7。l運(yùn)行結(jié)果:運(yùn)行結(jié)果: s=166.7 循環(huán)程序舉例循環(huán)程序舉例l 例題例題6.146.14 輸出10100之間的全部素?cái)?shù)。所謂素?cái)?shù)n是指,除1和n之外,不能被2(n-1)之間的任何整數(shù)整除。l算法設(shè)計(jì)要點(diǎn):算法設(shè)計(jì)要點(diǎn):l(1)顯然,只要設(shè)計(jì)出判斷某數(shù)n是否是素?cái)?shù)的算法,外面再套一個for循環(huán)即可。l(2)判斷某數(shù)n是否是素?cái)?shù)的算法:根據(jù)素?cái)?shù)的定義,用2(n-1)之間的每一個數(shù)去整除n,如果都不能被整除,則表示該數(shù)是一個素?cái)?shù)。l判斷一個數(shù)是否能被另一個數(shù)

18、整除,可通過判斷它們整除的余數(shù)是否為0來實(shí)現(xiàn)。參考源程序:lmain()l int i=11, j, counter=0; l for( ; i=100; i+=2) /*外循環(huán):為內(nèi)循環(huán)提供一個整數(shù)i*/l for(j=2; j= i ) /*整數(shù)i是素?cái)?shù):輸出,計(jì)數(shù)器加1*/l printf(“%6d”,i); l counter+;l l l運(yùn)行結(jié)果:11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 8997循環(huán)程序舉例循環(huán)程序舉例l 例題例題6.156.15相傳古代印度國王舍罕要褒獎他的聰明能干的宰相達(dá)依爾(國際象棋發(fā)明者)

19、,問他需要什么,達(dá)依爾回答說:“國王只要在國際象棋的棋盤上第一個格子放1粒麥子,第二個格子放2粒麥子,第三個格子放4粒麥子,以此類推,每一格加一倍,一直放到64格,我就感恩不盡了,”。國王答應(yīng)了,結(jié)果全印度的糧食用完還不夠。國王很納悶,怎么也算不清這筆賬?,F(xiàn)在用c語言編程來算一下。l計(jì)算s=1+2+2+2+2算出小麥的顆粒數(shù)。l1立方米小麥大約1.42*10參考源程序:lmain()l int n;ldouble v, sum=0.0, t=1.0;lfor (n=0;n64;n+)l sum+=t; /*做累加各項(xiàng)*/lt*=2; /*做累乘求2各項(xiàng)*/llprintf(“sum=%en”,sum);lv=sum/1.42e+8;lprintf(“v=%e”,v);l運(yùn)行結(jié)果:sum=1.84467e+19v=1.29907+116.8閱讀程序

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論