c語(yǔ)言循環(huán)控制語(yǔ)句_第1頁(yè)
c語(yǔ)言循環(huán)控制語(yǔ)句_第2頁(yè)
c語(yǔ)言循環(huán)控制語(yǔ)句_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余7頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、循環(huán)控制結(jié)構(gòu)(又稱(chēng)重復(fù)結(jié)構(gòu))是程序中的另一個(gè)基本結(jié)構(gòu)在實(shí)際問(wèn)題中,常常需要進(jìn)行大量的重復(fù)處理,循環(huán)結(jié)構(gòu)可以使我們只寫(xiě)很少的語(yǔ)句,而讓計(jì)算機(jī)反復(fù)執(zhí)行,從而完成大量類(lèi)同的計(jì)算C語(yǔ)言提供了 while語(yǔ)句、do.while 語(yǔ)句和for語(yǔ)句實(shí)現(xiàn)循環(huán)結(jié)構(gòu).3.4.1while 語(yǔ)句while語(yǔ)句是當(dāng)型循環(huán)控制語(yǔ)句,一般形式為:while表達(dá)式 語(yǔ)句;語(yǔ)句部分稱(chēng)為循環(huán)體,當(dāng)需要執(zhí)行多條語(yǔ)句時(shí),應(yīng)使用復(fù)合語(yǔ)句.while語(yǔ)句的流程圖見(jiàn)圖 3-8,其特點(diǎn)是先判斷,后執(zhí)行,若條件不成立,有可能一次也不 執(zhí)行.匡3 $ uhile語(yǔ)旬的流強(qiáng)圖例 3-11求 n!分析:n! =n* (n-1)* (n-2)*.2

2、*1,0!=1.即 S0=1,Sn=S n-1* n.可以從 SO 開(kāi)始,依次求出 S1、S2、.Sn.統(tǒng)一令S等于階乘值,S的初值為0! =1;變量i為計(jì)數(shù)器,i從1變到n,每一步令S=S*i, 則最終S中的值就是n!.流程圖見(jiàn)圖3-9,程序如下:Train:int n, i ;long int 呂;print f(Minput n (n>=0) :11);scanf Majin);if (n>=0)5=1;if (n>o)11;whlle (i<=n)s*=l;)prlatf ("tdL = t Id n1lf ny s);elseprint f (

3、9;* inval 1 i input I n ");運(yùn)行結(jié)果如下;input n (n>=0 i01= 1FEW -input n(n>=0):匹6 I=720input n (n>=0 j : -2-iinvalid Input考察圖3-9中循環(huán)部分的流程圖可以看出,在循環(huán)前各變量應(yīng)有合適的值(s=1),另外,控制循環(huán)結(jié)束的變量(此處為i)必須在循環(huán)體中被改變,否則,循環(huán)將無(wú)限進(jìn)行下去,成為死 循環(huán)制口利用格卑高利公式求丈 r/4 = 1 - 1/3 + 1/S - 1/? + .直別誥后一項(xiàng)的絕對(duì)伯小T第于為止黒序如下=* include* Includecs

4、tdiorh> cmath h>包pl;doublelong int n s;ni;Efcl;pdx)+0;while (fsits (t jpi=pi+t:n=n+l;s=-s;t= (fLost) () f ;flciat; in';E>1 書(shū)!*4; printf (,r運(yùn)行結(jié)果為:HLKpl =3.141591s、n的值,本題中,將多項(xiàng)式的每一項(xiàng)用 t表示,S代表符號(hào),在每一次循環(huán)中,只要改變就可求出每一項(xiàng)t.一般情況下,while型循環(huán)最適合于這種情況:知道控制循環(huán)的條件為某個(gè)邏輯表達(dá)式的值,而且該表達(dá)式的值會(huì)在循環(huán)中被改變,如同例 3-12的情況一樣.3.

5、4.2do.while 語(yǔ)句在C語(yǔ)句中,直到型循環(huán)的語(yǔ)句是do.while,它的一般形式為:do語(yǔ)句 while表達(dá)式其中語(yǔ)句通常為復(fù)合語(yǔ)句,稱(chēng)為循環(huán)體do.while語(yǔ)句的流程圖見(jiàn)圖 3-10,其基本特點(diǎn)是:先執(zhí)行后判斷,因此,循環(huán)體至少被執(zhí) 行一次.但需要注意的是,do.while與標(biāo)準(zhǔn)的直到型循環(huán)有一個(gè)極為重要的區(qū)別,直到型循環(huán)是當(dāng) 條件為真時(shí)結(jié)束循環(huán),而do.while語(yǔ)句恰恰相反,當(dāng)條件為真時(shí)循環(huán),一旦條件為假,立即結(jié)束循環(huán),請(qǐng)注意 do.while語(yǔ)句的這一特點(diǎn).例3-13計(jì)算 sin(x)=x-x3/3!+x5/5!-x7/7!+.直到最后一項(xiàng)的絕對(duì)值小于1e-7時(shí)為止.分析:這

6、道題使用遞推方法來(lái)做.讓多項(xiàng)式的每一項(xiàng)與一個(gè)變量n對(duì)應(yīng),n的值依次為1,3,5,乙.,從多項(xiàng)式的前一項(xiàng)算后一項(xiàng),只需將前一項(xiàng)乘一個(gè)因子:(-x2)/( n-1)* n)用s表示多項(xiàng)式的值,用t表示每一項(xiàng)的值,程序如下:栽一1干句啟詭程圖#in clude <math.h># in clude <stdio.h>m a i n ()double s, t,x ;int n ;prin tf("please in put x :");scanf("%lf" ,&x);t=x;n=1;s=x;don=n+2;t=t*(-x*x)

7、/(float)( n)-1)/(float)( n); s=s+t;while(fabs(t)>=1e-7);printf("sin(%f)=%lf , "x, s);運(yùn)行結(jié)果如下:RUN?please in putx:1.5753?sin (1.575300)=0.999990RUN?please in putx:-0.65?sin(-0.650000)=-0.6051863.4.3for 語(yǔ)句for語(yǔ)句是循環(huán)控制結(jié)構(gòu)中使用最廣泛的一種循環(huán)控制語(yǔ)句,特別適合已知循環(huán)次數(shù)的情況.它的一般形式為:for(<表達(dá)式1> ; <表達(dá)式2> ; &l

8、t;表達(dá)式3>)語(yǔ)句for語(yǔ)句很好地體現(xiàn)了正確表達(dá)循環(huán)結(jié)構(gòu)應(yīng)注意的三個(gè)問(wèn)題:1) 控制變量的初始化.2) 循環(huán)的條件.3) 循環(huán)控制變量的更新.表達(dá)式1 :一般為賦值表達(dá)式,給控制變量賦初值;表達(dá)式2 :關(guān)系表達(dá)式或邏輯表達(dá)式,循環(huán)控制條件;表達(dá)式3: 一般為賦值表達(dá)式,給控制變量增量或減量語(yǔ)句:循環(huán)體,當(dāng)有多條語(yǔ)句時(shí),必須使用復(fù)合語(yǔ)句for循環(huán)的流程圖如圖3-11,其執(zhí)行過(guò)程如下:for3,首先計(jì)算表達(dá)式1,然后計(jì)算表達(dá)式2,若表達(dá)式2為真,則執(zhí)行循環(huán)體;否則,退出循環(huán),執(zhí)行for循環(huán)后的語(yǔ)句.如果執(zhí)行了循環(huán)體,則循環(huán)體每執(zhí)行一次,都計(jì)算表達(dá)式 然后重新計(jì)算表達(dá)式 2,依此循環(huán),直至表

9、達(dá)式2的值為假,退出循環(huán).例3-14計(jì)算自然數(shù)1到n的平方和.震達(dá)式1|# in clude <stdio.h># in clude <math.h>mai n ()int i;float s;prin tf("please in put n :"); scanf("%d", &n);s=0.0;for(i=1;i<=n;i+) s=s+(float)(i)*(float)(i);,nn" ,n, s); 運(yùn)行結(jié)果如下:RUNplease input n:51*1+2*2+.+5*5=55.000000fo

10、r 語(yǔ)句的幾種格式for 語(yǔ)句的三個(gè)表達(dá)式都是可以省略的,但分號(hào) “; ”絕對(duì)不能省略 .a. for(;) 語(yǔ)句;這是一個(gè)死循環(huán),一般用條件表達(dá)式加break 語(yǔ)句在循環(huán)體內(nèi)適當(dāng)位置,一旦條件滿(mǎn)足時(shí),用 break 語(yǔ)句跳出 for 循環(huán) .例如,在編制菜單控制程序時(shí),可以如下:for(;)printf("please input choice(Q=Exit):"); 顯/* 示菜單語(yǔ)句塊: */ scanf("%c" , &ch);if(ch='Q')or(ch='q')break; 語(yǔ)/* 句段 */b. f

11、or( ;表達(dá)式 2;表達(dá)式 3) 使用條件是:循環(huán)控制變量的初值不是已知常量,而是在前面通過(guò)計(jì)算得到,例如: i=m-n;?for( ; i<k ;i+) 語(yǔ)句;c. for (表達(dá)式 1;表達(dá)式 2; ) 語(yǔ)句 一般當(dāng)循環(huán)控制變量非規(guī)則變化,而且循環(huán)體中有更新控制變量的語(yǔ)句時(shí)使用 . 例如:for(i=1 ; i<=100 ;)?i=i*2+1;?d. for(i=1 , j=n ; i<j ; i+ , j-) 語(yǔ)句;在 for 語(yǔ)句中,表達(dá)式 1、表達(dá)式 3 都可以有一項(xiàng)或多項(xiàng),如本例中,表達(dá)式1 同時(shí)為 i 和 j賦初值,表達(dá)式 3 同時(shí)改變 i 和 j 的值 .當(dāng)

12、有不止一項(xiàng)時(shí),各項(xiàng)之間用逗號(hào) “,”分隔 . 另外, C 語(yǔ)言還允許在循環(huán)體內(nèi)改變循環(huán)變量的值,這在某些程序的設(shè)計(jì)中是很有用的 . 到此,我們已經(jīng)學(xué)習(xí)了 C 語(yǔ)言中三種循環(huán)控制語(yǔ)句 while 、 do.while 和 for 語(yǔ)句,下面再討 論兩個(gè)問(wèn)題: 三種語(yǔ)句的選用同一個(gè)問(wèn)題,往往既可以用 while 語(yǔ)句解決,也可以用 do.while 或者 for 語(yǔ)句來(lái)解決,但在實(shí)際應(yīng)用中,應(yīng)根據(jù)具體情況來(lái)選用不同的循環(huán)語(yǔ)句,選用的一般原則是:1) 如果循環(huán)次數(shù)在執(zhí)行循環(huán)體之前就已確定,一般用for語(yǔ)句;如果循環(huán)次數(shù)是由循環(huán)體的執(zhí)行情況確定的,一般用 while語(yǔ)句或者do.while語(yǔ)句.2)

13、當(dāng)循環(huán)體至少執(zhí)行一次時(shí),用do.while語(yǔ)句,反之,如果循環(huán)體可能一次也不執(zhí)行,選用while語(yǔ)句.循環(huán)的嵌套一個(gè)循環(huán)的循環(huán)體中有另一個(gè)循環(huán)叫循環(huán)嵌套.這種嵌套過(guò)程可以有很多重.一個(gè)循環(huán)外面僅包圍一層循環(huán)叫二重循環(huán);一個(gè)循環(huán)外面包圍兩層循環(huán)叫三重循環(huán);一個(gè)循環(huán)外面包圍多層循環(huán)叫多重循環(huán).三種循環(huán)語(yǔ)句for、while、do.while可以互相嵌套自由組合.但要注意的是,各循環(huán)必須 完整,相互之間絕不允許交叉.如下面這種形式是不允許的:dofor(;) while();例3-15打印8行7列的星形矩陣 流程圖見(jiàn)圖3-12,程序如下:BEGIN )=1亠厲圖3 2剖3-戸的鼻法適程圖#in cl

14、ude<stdio.h>main ()inti,j;for(i=0;i<8,i+)/* 控制行 */ for(j=0;j<7>j+)/* 控制列 */ printf("*");printf("n") ; /* 換行 */ 打印結(jié)果如下: RUN*將程序中 for(j=0;j<7;j+) 改為 for(j=0;j<i;j+) ,用行數(shù)來(lái)控制每行星號(hào)的多少,就可以 打印三角形 .3.4.4break 與 continue 語(yǔ)句 有時(shí),我們需要在循環(huán)體中提前跳出循環(huán),或者在滿(mǎn)足某種條件下,不執(zhí)行循環(huán)中剩下 的語(yǔ)句而立即

15、從頭開(kāi)始新的一輪循環(huán),這時(shí)就要用到break 和 continue 語(yǔ)句 .1. break 語(yǔ)句在前面學(xué)習(xí) switch 語(yǔ)句時(shí),我們已經(jīng)接觸到 break 語(yǔ)句,在 case 子句執(zhí)行完后,通過(guò) break 語(yǔ)句使控制立即跳出 switch 結(jié)構(gòu) . 在循環(huán)語(yǔ)句中, break 語(yǔ)句的作用是在循環(huán)體中測(cè)試到應(yīng)立 即結(jié)束循環(huán)時(shí),使控制立即跳出循環(huán)結(jié)構(gòu),轉(zhuǎn)而執(zhí)行循環(huán)語(yǔ)句后的語(yǔ)句 .例 3-16打印半徑為 1到 10 的圓的面積,若面積超過(guò) 100,則不予打印 . #include<stdio.h>main()intr;float area; for(r=1;r<=10;r+)

16、 area=3.141593*r*r;if(area>100.0)break; printf("square=%fn" , area);printf("nowr=%dn" , r); 運(yùn)行程序:RUN square=3.141593 square=12.566373 square=28.274338 square=50.265488 square=78.539825 nowr=6當(dāng) break 處于嵌套結(jié)構(gòu)中時(shí),它將只跳出最內(nèi)層結(jié)構(gòu),而對(duì)外層結(jié)構(gòu)無(wú)影響 .2. continue 語(yǔ)句continue 語(yǔ)句只能用于循環(huán)結(jié)構(gòu)中,一旦執(zhí)行了 contin

17、ue 語(yǔ)句,程序就跳過(guò)循環(huán)體中位于 該語(yǔ)句后的所有語(yǔ)句,提前結(jié)束本次循環(huán)周期并開(kāi)始新一輪循環(huán) .例3-17計(jì)算半徑為 1到 15的圓的面積,僅打印出超過(guò) 50的圓面積 .#include<stdio.h>main()int r;float area;for(r=1;r<=5;r+)area=3.141593*r*r;if(area<50.0)continue;printf("square=%f" , area);結(jié)果為:RUNsquare=50.265488square=78.539825同 break 一樣, continue 語(yǔ)句也僅僅影響該語(yǔ)句

18、本身所處的循環(huán)層,而對(duì)外層循環(huán)沒(méi)有影響.3.4.5 程序應(yīng)用舉例例 3-18 驗(yàn)證哥德巴赫猜想:任一充分大的偶數(shù),可以用兩個(gè)素?cái)?shù)之和表示,例如:4=2+26=3+3 98=19+79 哥德巴赫猜想是世界著名的數(shù)學(xué)難題, 至今未能在理論上得到證明, 自從計(jì)算機(jī)出現(xiàn)后, 人 們就開(kāi)始用計(jì)算機(jī)去嘗試解各種各樣的數(shù)學(xué)難題, 包括費(fèi)馬大定理、 四色問(wèn)題、 哥德巴赫猜 想等,雖然計(jì)算機(jī)無(wú)法從理論上嚴(yán)密地證明它們,而只能在很有限的范圍內(nèi)對(duì)其進(jìn)行檢驗(yàn), 但也不失其意義 .費(fèi)馬大定理已于 1994年得到證明, 而哥德巴赫猜想這枚數(shù)學(xué)王冠上的寶石, 至今無(wú)人能及 .分析:我們先不考慮怎樣判斷一個(gè)數(shù)是否為素?cái)?shù),而從

19、整體上對(duì)這個(gè)問(wèn)題進(jìn)行考慮,可以這樣做:讀入一個(gè)偶數(shù)n,將它分成p和q,使n=p+q.怎樣分呢?可以令 p從2開(kāi)始,每次加1,而令q=n-p,如果p、q均為素?cái)?shù),則正為所求,否則令p=p+q再試.其基本算法如下:1) 讀入大于 3 的偶數(shù) n.2) P=13) do4) p=p+1 ; q=n-p;5) p 是素?cái)?shù)嗎?6) q 是素?cái)?shù)嗎?7) whilep 、 q 有一個(gè)不是素?cái)?shù) .8) 輸出 n=p+q.為了判明 p、q 是否是素?cái)?shù), 我們?cè)O(shè)置兩個(gè)標(biāo)志量 flag p 和 flag q ,初始值為 0,若 p 是素?cái)?shù), 令flag p=1,若q是素?cái)?shù),令flag q=1,于是第7步變成:7)w

20、hile(flag p*flag q=0);再來(lái)分析第 5、第 6 步,怎樣判斷一個(gè)數(shù)是不是素?cái)?shù)呢? 素?cái)?shù)就是除了 1 和它自身外,不能被任何數(shù)整除的整數(shù),由定義可知: 2、3、5、7、11、13、17、19 等是素?cái)?shù);1、4、6、8、9、10、12、14等不是素?cái)?shù);要判斷i是否是素?cái)?shù),最簡(jiǎn)單的辦法是用2、3、4、?i-1這些數(shù)依次去除i,看能否除盡,若被其中之一除盡,則 i 不是素?cái)?shù),反之, i 是素?cái)?shù) .但其實(shí),沒(méi)必要用那么多的數(shù)去除,實(shí)際上,用反證法很容易證明,如果小于等于i 的平方根的數(shù)都除不盡,則 i 必是素?cái)?shù) .于是,上述算法中的第5步、第 6 步可以細(xì)化為:第 5)步 p 是素?cái)?shù)嗎?flag p=1;for(j=2;j<=sqrt(p);j+)if

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論