循環(huán)結(jié)構(gòu)最新課件_第1頁
循環(huán)結(jié)構(gòu)最新課件_第2頁
循環(huán)結(jié)構(gòu)最新課件_第3頁
循環(huán)結(jié)構(gòu)最新課件_第4頁
循環(huán)結(jié)構(gòu)最新課件_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第六章第六章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)第節(jié) 循環(huán)程序的設(shè)計(jì)步驟如:如:a=123a=123則輸出順序?yàn)椋簞t輸出順序?yàn)椋簆rintf(%d,a%10);a=a/10;printf(%d,a%10);a=a/10;printf(%d,a%10);a=a/10;printf(%d,a%10);a=a/10;printf(%d,a%10);a=a/10;printf(%d,a%10);a=a/10;例:逆序輸出一個(gè)不超過例:逆序輸出一個(gè)不超過4位的正整數(shù)。位的正整數(shù)。Input aInput aa10a10bit=1bit=1a100a100bit=2bit=2a1000a1000bit=3bi

2、t=3bit=4bit=4main()int a,bit;scanf(%d,&a);if(a10)bit=1;elseif(a100)bit=2;elseif(a1000)bit=3;elsebit=4;;/*按題目要求輸出結(jié)果按題目要求輸出結(jié)果*/switch(bit)case 4:printf(%d,a%10);a=a/10;case 3:printf(%d,a%10);a=a/10;case 2:printf(%d,a%10);a=a/10;case 1:printf(%d,a%10);a=a/10;default:;1 1構(gòu)造循環(huán)體。將問題中需要重復(fù)執(zhí)行的部分,利用構(gòu)造循環(huán)體。將問題中

3、需要重復(fù)執(zhí)行的部分,利用C C語言規(guī)則歸納出一組程序段。在歸納的過程中應(yīng)充分語言規(guī)則歸納出一組程序段。在歸納的過程中應(yīng)充分利用利用變量是一個(gè)變化的量變量是一個(gè)變化的量的概念。的概念。 循環(huán)題目的設(shè)計(jì)步驟循環(huán)題目的設(shè)計(jì)步驟:2 2尋找控制循環(huán)的變量。尋找控制循環(huán)的變量。循環(huán)次數(shù)是固定值,可以使用計(jì)數(shù)器來控制循環(huán);循環(huán)次數(shù)是固定值,可以使用計(jì)數(shù)器來控制循環(huán);循環(huán)次數(shù)不是固定值的,尋找規(guī)則變化的量來控制循環(huán)循環(huán)次數(shù)不是固定值的,尋找規(guī)則變化的量來控制循環(huán)體完成規(guī)定的次數(shù)。體完成規(guī)定的次數(shù)。3 3找出控制變量的三個(gè)要素。找出控制變量的三個(gè)要素。 循環(huán)控制變量的初值;循環(huán)控制變量的初值; 循環(huán)的條件;循

4、環(huán)的條件; 使循環(huán)趨于結(jié)束的部分;使循環(huán)趨于結(jié)束的部分; i=0;i10Input xx0 x=-xOutput xi+循環(huán)體循環(huán)體 i=0;i10Input xx0 x=-xOutput xi+ i=0;i10Input xx0 x=-xOutput xi+初初值值條條件件趨趨于于結(jié)結(jié)束束輸出的次數(shù)總輸出的次數(shù)總是是bit次次1.1.whilewhile語句語句v一般形式:一般形式:while(表達(dá)式表達(dá)式) 循環(huán)體語句循環(huán)體語句v執(zhí)行流程:pa假(0)真(非0)whilepAP,用邏輯量表示while(x=1)x=10;單條單條語句語句s=0;i=1;while(i=100)s+=i+;/

5、*i=0; while(i+100)s+=i;*/* i=0;while(+i0);第2節(jié) 實(shí)現(xiàn)循環(huán)的三條語句main()int x,i;i=0; while(i10) scanf(%d,&x); if(x0)x=-x; printf(%8d,x); i+; printf(n);2. dowhile語句v一般形式:do 循環(huán)體語句循環(huán)體語句 while(表達(dá)式表達(dá)式);v執(zhí)行流程:doAp假(0)真(非0)whileAp;必比可少必比可少do 循環(huán)體語句循環(huán)體語句while(表達(dá)式表達(dá)式);s=0;i=1;dos+=i+; while(i=100);/*i=1; dos+=i; while(i

6、+100);*/*i=1; dos+=i; while(+i=100); */main()int x,i;i=0; do scanf(%d,&x); if(x0)x=-x; printf(%8d,x); i+;while(i0);3. for語句一般應(yīng)用形式語句一般應(yīng)用形式:for(expr1;expr2;expr3)循環(huán)體語句循環(huán)體語句expr2A假假(0)真真(非非0)expr1expr3Aexpr1;expr2;expr3循環(huán)變量賦初值循環(huán)變量賦初值循環(huán)條件循環(huán)條件循環(huán)趨于結(jié)束部分循環(huán)趨于結(jié)束部分例例 用用forfor循環(huán)求循環(huán)求 1001nnmain() int i,sum=0; fo

7、r(i=1;i=100;i+) sum+=i; printf(%d,sum);main()int x,i;for(i=0;i10;i+) scanf(%d,&x); if(x0)x=-x; printf(%8d,x); printf(n);v說明:說明:lfor語句中語句中expr1, expr2 ,expr3 類類型任意,都可省略,但分號(hào);不可型任意,都可省略,但分號(hào);不可省省l無限循環(huán)無限循環(huán): for(;)lfor語句可以轉(zhuǎn)換成語句可以轉(zhuǎn)換成while結(jié)構(gòu)結(jié)構(gòu)l關(guān)鍵是體現(xiàn)三要素關(guān)鍵是體現(xiàn)三要素expr1;while(expr2)循環(huán)體語句循環(huán)體語句expr3;for(s=0,i=100;

8、i;s+=i-);i=1;for(;i=100;i+)s+=i;i=1;for(;i=100;)s+=i+;while (i=100)s+=i+; main() int m,n,r; scanf(%d,%d,&m,&n); if(mn) r=m,m=n,n=r; r=m%n; while(r!=0) m=n; n=r; r=m%n; printf(%dn,n); main() int m,n,r; scanf(%d,%d,&m,&n); if(mn) r=m,m=n,n=r; do r=m%n; m=n; n=r; while(r!=0); printf(%dn,m); for(r=m%n;r

9、!=0; r=m%n) /*for(;(r=m%n);) m=n; n=r; printf(%dn,n); 例:求最大公約數(shù)?例:求最大公約數(shù)?main() float fac; int i,n; fac=1; i=2; scanf(%d,&n); while(i=n)/*i+=n*/ fac=fac*i; i+; printf(n!=%.0fn,fac);main()float fac;int i,n;i=1;fac=1;scanf(%d,&n);do fac=fac*i;i+;while(i=n);printf(n!=%.0fn,fac); for(fac=1,i=1;i=n;i+)fac

10、=fac*i;printf(n!=%.0fn,fac);例:求例:求n! #include stdio.hmain()int a=0;char c;for(c=getchar();c!=n;c=getchar() /*while(c=getchar()!=n)*/a=10*a+c-0;printf(%dn,a); 例:構(gòu)造整數(shù)?例:構(gòu)造整數(shù)?main()int m;scanf(%d,&m);while(m) printf(%d,m%10); m=m/10;printf(n);例例 梯形法求數(shù)值積分梯形法求數(shù)值積分0ydxxxfba24)(axa+hx x+hbf(x)s=(sqrt(4-x*x

11、)+sqrt(4-(x+h)*(x+h)*h/2;#include math.hmain()float a,b,s=0,sum=0,h,x;scanf(%f,%f,%f, / &a,&b,&h);for(x=a;xb;x+=h) s=(sqrt(4-x*x)+sqrt / (4-(x+h)*(x+h)*h/2; sum+=s;printf(%fn,sum); 1.break1.break語句語句w功能:在循環(huán)語句和功能:在循環(huán)語句和switchswitch語句中語句中, ,終止并跳出終止并跳出循環(huán)體或開關(guān)體循環(huán)體或開關(guān)體7.3輔助控制語句輔助控制語句while(p) A break; Bif(

12、q)while(p) A break; Bif(q)else 增加了循環(huán)結(jié)束的增加了循環(huán)結(jié)束的出口。出口。!p 和和q都是循環(huán)結(jié)都是循環(huán)結(jié)束的條件。束的條件。可以去掉可以去掉breakfor(i=m0;i-) if(m%i=0&n%i=0)break;for(i=mn?n:m;m%i!=0|n%i!=0 ;i-);flag=0;/*沒找到最大公約數(shù)沒找到最大公約數(shù)*/for(i=mn?n:m;!flag&i;i-) if(m%i=0&n%i=0)flag=i;break;為止最后一項(xiàng)的絕對值小于的近似值,直到公式求例用61071513114main()main() int s,n;int s,

13、n; float pi,f; float pi,f; s=1;f=1;n=1;pi=0s=1;f=1;n=1;pi=0; while(1while(1) pi=pi+s pi=pi+s* *f; f; n=n+2; n=n+2; s=-s; s=-s; f=1./n; f=1./n; if(f1e-6)break; if(f1e-6)break; printf(%fn”,(pi=4printf(%fn”,(pi=4* *pi);pi);f=1,pi=0,n=1,s=11pi=pi+f*sn=n+2s=-sf=1/n輸出輸出pi=pi*4f1e-6) pi=pi+s*f; n=n+2; s=-s

14、; f=1./n; 考慮每一項(xiàng)的絕對值!考慮每一項(xiàng)的絕對值! 2. 2. continue語句v功能:結(jié)束本次循環(huán),跳過功能:結(jié)束本次循環(huán),跳過循環(huán)體中循環(huán)體中尚未執(zhí)行的尚未執(zhí)行的語句,進(jìn)行下一次語句,進(jìn)行下一次v僅用于循環(huán)語句中僅用于循環(huán)語句中while(p) A continue; Bif(q)while(p) A Bif(!q) 例例 求輸入的十個(gè)整數(shù)中正數(shù)的個(gè)數(shù)及其平均值求輸入的十個(gè)整數(shù)中正數(shù)的個(gè)數(shù)及其平均值#include main() int i,num=0,a; float sum=0; for(i=0;i10;i+) scanf(%d,&a);if(a=0) continue;

15、num+;sum+=a; printf(%d plus integers sum :%6.0fn,num,sum); printf(Mean value:%6.2fn,sum/num);for(i=0;i0) num+; sum+=a; 7.4 循環(huán)的嵌套循環(huán)的嵌套 循環(huán)題語句中又包含另一循環(huán)的結(jié)構(gòu)循環(huán)題語句中又包含另一循環(huán)的結(jié)構(gòu) 三種循環(huán)可互相嵌套三種循環(huán)可互相嵌套, ,層數(shù)不限層數(shù)不限(1) while() while() . (2) do do while( ); . while( );(3) while() do while( ); . (4) for( ; ;) do while()

16、; while() .內(nèi)循環(huán)內(nèi)循環(huán)外循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)讀入ak=ai=2當(dāng)ika被i整除真假用break結(jié)束循環(huán)i=i+1ik+1真假輸出:a”是素?cái)?shù)”輸出:a”不是素?cái)?shù)”【例例】輸出所有兩位素?cái)?shù)。要求:一行輸出輸出所有兩位素?cái)?shù)。要求:一行輸出1515個(gè)素?cái)?shù)個(gè)素?cái)?shù)。判斷判斷a是否是否為素?cái)?shù)為素?cái)?shù)a=10;a100;a+#include main( ) int i,a,end,n=0; end=sqrt(a);flag=1;for ( i=2; i=end; i+ ) if ( a%i=0 ) flag=0; break;if ( flag) printf(%4d,a); n+; if (

17、n%15=0 ) printf(n); for ( a=10; a=99; a+ ) 能改成能改成for ( a=11; a=99; a=a+2 ) ? 例例 循環(huán)嵌套,輸出九九表循環(huán)嵌套,輸出九九表#include main() int i,j; for(i=1;i10;i+) printf(%4d,i); printf(n); for(i=1;i10;i+) for(j=1;j10;j+) printf(%4d,i*j); printf(“n”); for(i=1;i10;i+) for(j=1;j10;j+) printf(%4d,i*j); printf(“n”); 結(jié)論結(jié)論2:可以表

18、示各種可能的組合可以表示各種可能的組合可用于解有多組解的問題!可用于解有多組解的問題!窮舉法窮舉法123456789123456789246810 12 14 16 1836912 15 18 21 24 27918 27 36 45 54 63 72 81.ji結(jié)論結(jié)論1:內(nèi)層循環(huán)的變化頻率快。內(nèi)層循環(huán)的變化頻率快。【例例】編程求三個(gè)數(shù)字編程求三個(gè)數(shù)字x、y、z (09) 滿足滿足: xyz+zyx=1231。#include stdio.hmain( )int x,y,k; for(x=1;x=9;x+) for(y=0;y=9;y+) for(z=1;z=9;z+) if(101*x+20*y+101*z=1231) printf(x=%d,y=%d,z=%dn,x,y,z); 求解過程求解過程 +abnext 第第5項(xiàng)項(xiàng)+abnext 第第3項(xiàng)項(xiàng)abnext 第第4項(xiàng)項(xiàng)abnext 第第6項(xiàng)項(xiàng)+ 112812323535next=a+b;a=b; b=next;規(guī)律:規(guī)律: 【例例】輸出斐波納契(輸出斐波納契(Fibonacci)級(jí)數(shù))級(jí)數(shù)1,1,2,3,5,8,13, 的前的前30項(xiàng)項(xiàng)。main( ) int i,n; long a,b,next; a=b=1; print

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論