C語言:循環(huán)控制程序_第1頁
C語言:循環(huán)控制程序_第2頁
C語言:循環(huán)控制程序_第3頁
C語言:循環(huán)控制程序_第4頁
C語言:循環(huán)控制程序_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第 章 循環(huán)控制6.1 goto6.1 goto 語句語句6.2 while 6.2 while 、do-while do-while 語句語句6.3 for 6.3 for 語句語句6.4 6.4 循環(huán)的嵌套循環(huán)的嵌套6.5 break6.5 break語句和語句和continuecontinue語句語句 6.1 goto6.1 goto 語句語句 goto語句被稱為無條件轉(zhuǎn)向語。語句被稱為無條件轉(zhuǎn)向語。 格式:格式:goto 語句標號語句標號; 功能:功能: 遇到遇到 goto語句,就轉(zhuǎn)到語句標號處繼語句,就轉(zhuǎn)到語句標號處繼 續(xù)執(zhí)行。多與續(xù)執(zhí)行。多與if語句配合實現(xiàn)循環(huán)。語句配合實現(xiàn)循環(huán)。

2、 一般說來求和分為兩種情況:數(shù)據(jù)有規(guī)律與無規(guī)律。一般說來求和分為兩種情況:數(shù)據(jù)有規(guī)律與無規(guī)律。100211001ii9152i 1、設(shè)一個變量、設(shè)一個變量sum作為累加器并賦初值作為累加器并賦初值0; 2、輸入數(shù)據(jù)或利用某變量自動產(chǎn)生一個數(shù)據(jù);、輸入數(shù)據(jù)或利用某變量自動產(chǎn)生一個數(shù)據(jù); 3、利用賦值語句先算右邊表達式的特點,執(zhí)行語句:、利用賦值語句先算右邊表達式的特點,執(zhí)行語句: sumsum+變量變量; 求累加和。求累加和。例程例程 6-1 :6-1 :算法:算法:100211001iivoid main ( ) int i=1, sum=0; L: if ( i=100 ) / 判斷結(jié)束條件

3、判斷結(jié)束條件 sum=sum+i; i+; goto L; printf(”sum=%d, sum);結(jié)果:結(jié)果:sum=5050void main ( ) int sum=0, i=0; L: sum=sum+i; i + +; if (i=100) goto L; printf (%d , sum);算法二算法二:建議:建議:盡可能的不用盡可能的不用gotogoto語句,以免破壞語句,以免破壞程序的結(jié)構(gòu)化。程序的結(jié)構(gòu)化。void main() int x, sum=0; L1: scanf(“%d”,&x); if(x=-999) goto L2 sum=sum+x; goto L

4、1; L2: printf(“x=%d”,x);算法三算法三: -999是結(jié)束標志,只是結(jié)束標志,只要是不參與運算的數(shù)均要是不參與運算的數(shù)均可作為結(jié)束標志??勺鳛榻Y(jié)束標志。C語言一般采用三種形式循環(huán)語言一般采用三種形式循環(huán) 1. while 語句語句 2. do while 語句語句 3. for語句語句1. while1. while語句格式語句格式: :while( 表達式表達式 ) 1句或復(fù)合句句或復(fù)合句do 1句或復(fù)合句句或復(fù)合句 while( 表達式表達式) do-while do-while格式語句:格式語句:6.2 6.2 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)下一語句下一語句表達式表達式語句語句=1

5、=0while( 表達式表達式 ) 多條語句多條語句 語句語句 表達式表達式=1=0下一語句下一語句do 多條語句多條語句 while( 表達式表達式)2. 2. 流程圖流程圖: :while語句:語句: 先判斷,后執(zhí)行,先判斷,后執(zhí)行, 最小循環(huán)次數(shù)最小循環(huán)次數(shù)=0。3. 3.特點:特點:dowhile語句:語句: 先執(zhí)行,后判斷,先執(zhí)行,后判斷, 最小循環(huán)次數(shù)最小循環(huán)次數(shù)1 100211001iiwhile(i=100) sum+=i; i+;do sum+=i; i+; while(i=100) 例如:例如: 1. 循環(huán)體中循環(huán)體中至少應(yīng)有一條能改變表達式值的語至少應(yīng)有一條能改變表達式值

6、的語句,使循環(huán)進行若干次后,句,使循環(huán)進行若干次后,表達式值為假結(jié)束循表達式值為假結(jié)束循環(huán),否則將造成無限循環(huán)。環(huán),否則將造成無限循環(huán)。 2若不改變循環(huán)控制條件,可利用若不改變循環(huán)控制條件,可利用break或或if-goto語句強行退出本層循環(huán)。語句強行退出本層循環(huán)。4. 4.說明:說明: #include void main( ) char ch ; int num=0, chn=0 ; while( ( ch=getchar() ) !=n ) if ( ch= 0 & ch= 9 ) num+; else chn+; printf( “ num=%d , chn=%d n”, n

7、um , chn ) ;例程例程6-2:6-2:分別統(tǒng)計輸入的字符串中數(shù)字和其他分別統(tǒng)計輸入的字符串中數(shù)字和其他字符的個數(shù)。字符的個數(shù)。從鍵盤輸入一個數(shù),將其數(shù)字按逆序輸出。從鍵盤輸入一個數(shù),將其數(shù)字按逆序輸出。void main() int x,d; printf(“輸入一個正整數(shù):輸入一個正整數(shù):”); scanf(“%d”,&x); do d=x%10; printf(“%d”,d); x=x/10; while(x!=0);例程例程6-3 :6-3 :格式:格式:一種形式更為靈活的循環(huán)語句。一種形式更為靈活的循環(huán)語句。for( 初始初始表達式表達式; 條件表達式條件表達式; 循

8、環(huán)表達式循環(huán)表達式 ) n條語句條語句 賦初值賦初值判斷表達式判斷表達式2 2語句語句 改變循環(huán)條件改變循環(huán)條件結(jié)束結(jié)束forfor語句語句=0(=0(假假) )1 1流程圖流程圖: :用用for語句求累加和:語句求累加和:for ( i=1; i=100; i+) sum+=i;for語句與語句與whilewhile、do-whiledo-while互換用互換用, ,但但for直觀、簡單、方便。直觀、簡單、方便。i=1;while(i=100) sum+=i; i+i=1;do sum+=i; i+; while( i=100 ) for語句中的三個語句中的三個表達式均可部分或全部省表達式均

9、可部分或全部省略略, 但須但須保留分號保留分號; 見見P.111。 for語句中條件測試總是在循環(huán)語句中條件測試總是在循環(huán)開始開始時進行。時進行。 x=10; for (y=10; y!=x; +y) / for循環(huán)一循環(huán)一次也不執(zhí)行次也不執(zhí)行 printf(“%d”,y);說明說明: :例如:例如: 條件表達式是任意合法的條件表達式是任意合法的C表達式,一般不表達式,一般不 可省略可省略, 否則為無限循環(huán)。否則為無限循環(huán)。for ( i=1 ; ; i+ ) sum=sum+i ; while (1) sum=sum+i ; i+ ; 無限無限循環(huán)循環(huán)例如例如: : 循環(huán)表達式亦可省略循環(huán)表

10、達式亦可省略, 但在循環(huán)體中必須有語句但在循環(huán)體中必須有語句 修修 改循環(huán)變量,能正常結(jié)束循環(huán);改循環(huán)變量,能正常結(jié)束循環(huán); 賦值表達式賦值表達式 可移至可移至for語句之前,不影響循環(huán)執(zhí)行。語句之前,不影響循環(huán)執(zhí)行。sum=0; i=1; for ( ; i=100 ; ) sum=sum+i; i+; for ( i=0; (c=getchar( )!=n; i+=c );條件表達式條件表達式又如:又如:例如例如 :void main( ) int I, j=0; for( I=1; I100; I+ ) if ( I%2 | I%3 ) printf(“%4d”,i); if(+j%5=

11、0) printf(“n”); 例程例程6-4 :6-4 : 輸出輸出 1,99不不能被能被2或或3整除整除的數(shù),按的數(shù),按5個數(shù)個數(shù)一行的格式排一行的格式排列。列。 循環(huán)結(jié)構(gòu)例程循環(huán)結(jié)構(gòu)例程 1、定義變量:、定義變量:n=1(分母),(分母),s=1.0(分子),(分子), pi=1.0 (和和), t (分式分式)。 2、 n+=2; s=-s; t= s/n; pi+=t;直到直到| t |=1e-6 ) 用用 /4 /4 1- + + 1- + + 公式公式求求pipi的近似值。直到最后一項的絕對值的近似值。直到最后一項的絕對值1e-61e-6為止。為止。317151例程例程6-56-

12、5:算法:算法:#include void main() int n=1 ; float t, s=1.0, pi=1.0; while( fabs(t)=1e-6 ) pi=pi+t; n=n+2; s= -s; t=s/n; pi=pi*4; printf(pi=%10.6fn,pi);void main() int i=1,n=1; float t, pi=1.0; for( ; i; i+) n+=2; t=1.0/n; if( t1e-6 ) break; if (i%2) pi-=t ; else pi+=t; pi=pi*4; printf(pi=%fn,pi); 與與if語句相

13、同語句相同, 當循環(huán)體中又包含了另一個完整當循環(huán)體中又包含了另一個完整的循環(huán)語句時的循環(huán)語句時循環(huán)嵌套。循環(huán)嵌套。C語言的語言的循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu), 均可以相互均可以相互嵌套嵌套: 例如例如 : do while() for( ) while() for( ) for( ) ; while( ) ;6.4 6.4 循環(huán)的嵌套循環(huán)的嵌套 輸出輸出1*9的乘法表。的乘法表。 輸出輸出9*9的乘法表。的乘法表。 a=1; for ( a=1; a=9; a+) for(b=1;b=9;b+) for(b=1;b=9;b+) p r i n t f ( “ % d ” , a* b ); printf(

14、“%d”,a*b); printf(“n”); 由上例看出,循環(huán)嵌套的執(zhí)行過程是:由上例看出,循環(huán)嵌套的執(zhí)行過程是: 外循環(huán)走一外循環(huán)走一次次,內(nèi)循環(huán)走一,內(nèi)循環(huán)走一圈圈。例如例如 :例程例程 6-6 6-6 :求一個班某門課的平均分(求一個班某門課的平均分(30人)。人)。 求求 五個班某門課的平均分,五個班某門課的平均分,30人人/班。班。 s=0; for(n=1;n=30;n+) scanf(“%d,”&x); s=s+x; printf(“%f”,s/30.0); for( c=1;c=5;c+) s=0; for(n=1;n=30;n+) scanf(“%d”,&x

15、); s=s+x; printf(“%d=%f”,c,s/30); 例程例程 6-7 6-7 :求累乘求累乘n! 1、設(shè)一個變量作為累乘器(存放累乘的積),且、設(shè)一個變量作為累乘器(存放累乘的積),且 設(shè)初值為設(shè)初值為1(t1;);) 2、執(zhí)行、執(zhí)行t=t *x;void main() int t=1, j; for(j=2; j=6; j+) t=t*j ;算法:算法:求求 1!+2!+3!+4!+5!+6!void main() int I, j, t, sum=1; for(I=2;I=6;I+) t=1; for( j=2; j=I ; j+) t=t*j; sum=sum+t; vi

16、od main() int I, t=1, sum=1; for( I=2; I=6; I+) t=t*I; sum=sum+t; 算法算法1:算法算法2:例程例程6-8:6-8: 百雞問題。有百雞問題。有100元錢,想買元錢,想買100只雞,其只雞,其中公雞中公雞5元元/只只 ,母雞,母雞3元元/只,小雞只,小雞3只只/元,求:公雞、元,求:公雞、母雞、小雞各買多少只。母雞、小雞各買多少只。解:設(shè)公雞為解:設(shè)公雞為x只、母雞為只、母雞為y只、小雞為只、小雞為z只。只。 則有則有 x+y+z=100 5x+3y+z/3=100 根據(jù)題意根據(jù)題意 x : 1 20 ; y : 133 z=3*(

17、1005*x3*y )void main() int x, y, z , n=0 ; for( x= 1; x=20 ; x+ ) for( y=1; y=33 ; y+ ) z = 3*(100-5*x-3*y ); if( x+y+z= =100) n+; printf(“%d,%d,%d”, x, y, z); printf(“n=%d”,n); 為了提高執(zhí)行速度:為了提高執(zhí)行速度:盡量將判斷條件化為盡量將判斷條件化為最簡形式,不需循環(huán)最簡形式,不需循環(huán)的語句外提的語句外提: a=x+y+z; if (a=100) 例程例程6-96-9:出出5道兩位數(shù)的加法題,做對道兩位數(shù)的加法題,做對

18、1題得題得10分,分, 輸出得分及做錯的題數(shù)。輸出得分及做錯的題數(shù)。算法:算法:1、利用隨機函數(shù)、利用隨機函數(shù)rand()產(chǎn)生產(chǎn)生2個整數(shù),并判斷它們個整數(shù),并判斷它們 是否為是否為2位整數(shù),若否,需重新產(chǎn)生數(shù)。位整數(shù),若否,需重新產(chǎn)生數(shù)。2、顯示需計算的題目,并輸入解題的結(jié)果;、顯示需計算的題目,并輸入解題的結(jié)果;3、根據(jù)結(jié)果判斷是否正確,若正確,則加、根據(jù)結(jié)果判斷是否正確,若正確,則加10分,然分,然 后進入下一輪循環(huán);后進入下一輪循環(huán); 見見6-9.c break 語句:語句:只能用在只能用在switch結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中, 使程序跳出使程序跳出switch結(jié)構(gòu)或結(jié)構(gòu)或本層本層循環(huán)。循環(huán)。 break特別適用于循環(huán)次數(shù)不確定的情況,進特別適用于循環(huán)次數(shù)不確定的情況,進入循環(huán)后,利用一個入循環(huán)后,利用一個if語句配合使用語句配合使用break,以實現(xiàn),以實現(xiàn)程序在指定條件成立后提前結(jié)束循環(huán)的目的。程序在指定條件成立后提前結(jié)束循環(huán)的目的。 pi =3.14159; for(r=1; r100) break; printf (%f, area);例程例程 6-106-10: 計算圓的面積計算圓的面積 r2, 半徑取半徑取1, 2, 3, 4, 當當 面積面積100時結(jié)束。時結(jié)束。 continune語句語句: 用來結(jié)束用來結(jié)束本次本次循環(huán),

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論