




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1,第六章 循環(huán)控制,6.1 概述 6.2 goto語句以及goto語句構(gòu)成的循環(huán) 6.3 用while語句實(shí)現(xiàn)循環(huán) 6.4 用do-while語句實(shí)現(xiàn)循環(huán) 6.5 用for語句實(shí)現(xiàn)循環(huán) 6.6 循環(huán)的嵌套 6.7 幾種循環(huán)的比較 6.8 break語句和continue語句 6.9 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例,本章重點(diǎn): 循環(huán)的基本概念 不同形式的循環(huán)控制 多重循環(huán)問題,2,6.1 概 述,問題的提出: 輸出一行10個星號“*” 語句是? printf(*n); 輸出兩行10個星號“*” 語句是? printf(*n); printf(*n); 輸出100行10個星號“*” 語句是? printf
2、(*n); 用循環(huán)結(jié)構(gòu)解決,在C語言中可以用以下語句來實(shí)現(xiàn)循環(huán): 1. 用goto語句和if語句構(gòu)成循環(huán); 2. 用while語句; 3. 用do-while語句; 4. 用for語句。,3,6.1 goto語句以及用goto語句構(gòu)成循環(huán),語句標(biāo)號用標(biāo)識符表示,它的定名規(guī)則與變量名相同。,4,sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 sum=4950+100=5050,例:用if 和goto語句構(gòu)成循環(huán),求,#include void main() int i,sum=0; i=1; loop1: if(i=100) sum+=i; i+; goto loop1;
3、 printf(%d,sum); ,5,3.說明,語句標(biāo)號僅僅對goto語句有效,對其它語句不影響。,同一個程序中,不允許有同名標(biāo)號。,goto語句通常與if語句配合使用, 實(shí)現(xiàn)條件轉(zhuǎn)移、構(gòu)成循環(huán)、跳出循環(huán)體等功能。,不能用整數(shù)作標(biāo)號。 只能出現(xiàn)在goto所在函數(shù)內(nèi),且唯一。 只能加在可執(zhí)行語句前面。 限制使用goto語句。,6,程序運(yùn)行情況為: 123asd 123asdThe end,7,6.2 用while語句實(shí)現(xiàn)循環(huán),真(非零),循環(huán)體,假(零),1.while語句的一般形式: while (表達(dá)式) 循環(huán)體;,2.while語句常稱為“當(dāng)型”循環(huán)語句。,8,3.說明:,先判斷表達(dá)式,
4、當(dāng)條件成立時,則執(zhí)行循環(huán)體,循環(huán)體有可能一次也不執(zhí)行。,表達(dá)式同if語句后的表達(dá)式一樣,可以是任何類型的表達(dá)式。,循環(huán)體多于一句時,用一對 括起。,下列情況,退出while循環(huán) 條件表達(dá)式不成立(為零) 循環(huán)體內(nèi)遇break,return,goto 無限循環(huán): while(1) 循環(huán)體,9,例:用while循環(huán)求,#include void main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum); ,10,例:顯示110的平方,#include void main() int i=1; while(i=10) pr
5、intf(%d*%d=%dn,i,i,i*i); i+; ,運(yùn)行結(jié)果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100,11,例:分析下列程序段的循環(huán)次數(shù),i=1; while (i=100) putchar(*); i+;, ,12,#include stdio.h void main( ) int x; scanf( %d ,例:輸入一系列整數(shù),判斷其正負(fù)號,當(dāng)輸入0時,結(jié)束循環(huán)。,輸入數(shù)據(jù),為第一次判斷做準(zhǔn)備,while(x!=0),判斷是否結(jié)束, if(x0) printf( + ); else
6、 printf( - ); scanf( %d , ,判斷正負(fù)號,13,注意,表達(dá)式在判斷前,必須要有明確的值。,循環(huán)體中一般有改變條件表達(dá)式的語句。,while(表達(dá)式)后面沒有分號。,14,例:編寫加、減、乘、除運(yùn)算程序。用3#3退出。,#include #include void main ( ) int i=1,flag=0; float a,b,result; char sym; clrscr( ); printf(請輸入第1題,用3#3退出。n); scanf( %f%c%f,清屏函數(shù),用清屏函數(shù)時加此行,15,while ( sym!=# ) switch ( sym ) cas
7、e +: result=a+b; break; case -: result=a-b; break; case *: result=a*b; break; case /: if ( b=0 ) flag=1; else result=a/b; break; default : flag=2; ,見下一頁,除數(shù)0,用1標(biāo)記,非法字符,用2標(biāo)記,注意縮進(jìn)格式,不能少,16,if ( flag = 0 ) printf(%f%c%f=%fn,a,sym,b,result); i+; if ( flag = 1 ) printf(除數(shù)為0!n); if ( flag = 2 ) printf(%c是非
8、法運(yùn)算符!n,sym); printf(請輸入第%d題,用3#3退出。n,i ); scanf( %f%c%f, ,是合法算式,準(zhǔn)備下一題,i,17,6.4 用do-while語句實(shí)現(xiàn)循環(huán),1.do-while的形式: do 循環(huán)體; while (表達(dá)式);,2.do-while語句 常稱為“直到型”循環(huán)語句。,真(非零),循環(huán)體,假(零),18,例:用dowhile循環(huán)求,#include void main() int i,sum=0; i=1; do sum+=i; i+; while(i=100); printf(%d,sum); ,19,特點(diǎn):先執(zhí)行循環(huán)體,后判斷表達(dá)式。 說明:
9、至少執(zhí)行一次循環(huán)體,第一次條件為真時,while,do-while等價;第一次條件為假時,二者不同。 dowhile可轉(zhuǎn)化成while結(jié)構(gòu)。,20,例:while和dowhile比較,#include void main() int i,sum=0; scanf(%d, ,#include void main() int i,sum=0; scanf(%d, ,21,例:用do-while語句實(shí)現(xiàn)統(tǒng)計(jì)從鍵盤輸入的一行非空字符的個數(shù)(以回車鍵作為輸入結(jié)束標(biāo)記)。,#include stdio.h void main() char ch; int num=0; ch=getchar(); do n
10、um+; ch= getchar(); while(ch!=n); printf(num=%dn,num); ,22,#include stdio.h void main() char ch; int num=0; ch=getchar( );,例:用while語句實(shí)現(xiàn)統(tǒng)計(jì)從鍵盤輸入的一行字符的個數(shù)(以回車鍵作為輸入結(jié)束標(biāo)記)。,while(ch!=n),判斷是否輸入結(jié)束, num+; ch=getchar(); ,printf(num=%dn,num); ,23,例:從鍵盤輸入一串字符(用#結(jié)束輸入),如果輸入為大寫字母,則轉(zhuǎn)換為小寫字母,所有小寫字母按p128的規(guī)則轉(zhuǎn)換成對應(yīng)的小寫字母,其
11、它字符不變。,#include void main( ) char ch; printf(Input data:n); do ch=getchar( ); if ( ch=A ,Input data: UfYrq 2 yLb 3?# whats 2 and 3?#,不希望輸出,用while解決,24,#include void main( ) char ch; printf(Input data:n); ch=getchar( ); while ( ch != # ) if ( ch=A ch=getchar( ); ,不輸出“#”,25,注意,在if、while語句中,表達(dá)式后面都沒有分號,
12、而在do-while語句的表達(dá)式后面則必須加分號。,do-while和while語句相互替換時,要注意修改循環(huán)控制條件 。,26,6.5 用for語句實(shí)現(xiàn)循環(huán),1.for的形式: for(初始表達(dá)式1;條件表達(dá)式2;循環(huán)表達(dá)式3) 循環(huán)體 ; ,表達(dá)式1:用于循環(huán)開始前為循環(huán)變量設(shè)置初始值。,表達(dá)式2:控制循環(huán)執(zhí)行的條件,決定循環(huán)次數(shù)。,表達(dá)式3:循環(huán)控制變量修改表達(dá)式。,循環(huán)體語句: 被重復(fù)執(zhí)行的語句。,說明: for語句中表達(dá)式1,表達(dá)式2 ,表達(dá)式3 類型任意,都可省略,但分號;不可省。 無限循環(huán): for(;) 三個表達(dá)式都可以是逗號表達(dá)式。 for語句可以轉(zhuǎn)換成while結(jié)構(gòu)。,表達(dá)
13、式1; while(表達(dá)式2) 循環(huán)體語句; 表達(dá)式3; ,27,表達(dá)式3,計(jì)算表達(dá)式1,循環(huán)體,零,非零,for的下一條語句,2.執(zhí)行過程,for ( i = 1; i = 100; i = i + 1 ) printf ( “*n” );,輸出100行10個星號“*” 語句是?,i+,28,它相當(dāng)于以下語句: i=1; while (i=100) sum=sum+i; i+; printf(%d,sum);,表達(dá)式1;,while(表達(dá)式2),表達(dá)式3;,29,例:#include void main( ) int i=0; for(i=0;i10;i+) putchar(a+i); ,運(yùn)
14、行結(jié)果:abcdefghij,例:#include void main( ) int i=0; for(;i10;i+) putchar(a+i); ,例:#include void main( ) int i=0; for(;i10;) putchar(a+(i+); ,例:#include void main( ) int i=0; for(;i10;putchar(a+i),i+) ; ,30,void main() int i,j,k; for(i=0,j=100;i=j;i+,j-) k=i+j; printf(%d+%d=%dn,i,j,k); ,#include void mai
15、n() char c; for(;(c=getchar()!=n;) printf(%c ,c); ,#include void main() int i,c; for(i=0;(c=getchar()!=n;i+=3) printf(%c ,i+c); ,31,對for語句,循環(huán)體為空語句的一般形式為: for(表達(dá)式1;表達(dá)式2;表達(dá)式3); 如:for(sum=0,i=1;i=100;sum+=i, i+);,要在顯示器上復(fù)制輸入的字符,輸入的字符為.時, 結(jié)束循環(huán)。 輸入abcdefg. 輸出abcdefg. while( putchar(getchar( ) )!=. );,.,32
16、,累加器賦初值,參考程序:,void main() long int k,s;,s=0;,for(k=1;k=1000;k+) s=s+k;,printf( s=%ld ,s); ,累加,.,33,累乘器賦初值,求n!=1 2 3 n,參考程序:,void main() double s=1;,int k;,for(k=1;k=100;k+) s=s*k;,printf( s=%lf ,s); ,累乘,思考,整數(shù)連乘結(jié)果一定是整數(shù),而本例中結(jié)果數(shù)值相當(dāng)大,用long型都無法存放,因此將存放累乘結(jié)果的變量s定義為double型。,例2:求累乘積。 如:123.100,屬于“累乘器”類型問題。,.
17、,34,#include math.h void main() int x,k; scanf( %d ,排除法:如果有因子,不再往下判斷是否是素?cái)?shù),循環(huán)變量終值法,for(k=2;k=sqrt(x);k+) if(x%k=0) break;,if(ksqrt(x) printf( %d is a prime ,x); else printf( %d is not a prime ,x); ,在判斷范圍內(nèi)無因子,程序正常終止,有因子,程序非正常終止,例3:判斷一個數(shù)是否為素?cái)?shù)?,一個數(shù)x在2,sqrt(x)范圍內(nèi)沒有因子,我們就稱其為素?cái)?shù)(質(zhì)數(shù)),.,35,#include math.h voi
18、d main() int x,k,f=1; scanf( %d ,排除法:如果有因子,不再往下判斷是否是素?cái)?shù),for(k=2;k=sqrt(x);k+) if(x%k=0) f=0;break; ,if(f=1) printf( %d is a prime ,x); else printf( %d is not a prime ,x); ,在判斷范圍內(nèi)無因子,程序正常終止,有因子,程序非正常終止,標(biāo)記變量法,36,#include stdio.h void main() /*a,b,c代表百位、十位、個位*/ int x,a,b,c,num=0; /*num存放滿足條件的數(shù)的個數(shù),注意num要
19、賦初值*/ for(x=100;x=999;x+) a=x/100;b=x/10%10;c=x%10; if(a!=b ,例4:用0-9這十個數(shù)字可以組成多少無重復(fù)的三位數(shù)?,編程方法: “枚舉法”,37,編程方法: “遞推法”,例5:裴波那契數(shù)列的第1、2項(xiàng)分別為1、1,以后各項(xiàng)的值均是其前兩項(xiàng)之和。求前30項(xiàng)菲波那契數(shù)。,所謂遞推法就是從初值出發(fā),歸納出新值與舊值間的關(guān)系,直到求出所需值為止。新值的求出依賴于舊值,不知道舊值,無法推導(dǎo)出新值。數(shù)學(xué)上遞推公式正是這一類問題。,38,f1-第一個數(shù) f2-第二個數(shù) f3-第三個數(shù) f1=1; f2=1; f3=f1+f2;,以后只要改變f1,f
20、2的值,即可求出下一個數(shù). f1=f2;f2=f3; f3=f1+f2;,遞推,39,void main() long f1=1, f2=1, f3; int k;,參考程序:,printf( %ldt%ldt , f1,f2);,for(k=3;k=30;k+) f3=f1+f2; printf( %ldt ,f3); f1=f2; f2=f3; ,注意f1、f2、f3、x 的類型,遞推,40,在循環(huán)體語句中又包含有另一個完整的循環(huán)結(jié)構(gòu)的形式,稱為循環(huán)的嵌套。如果內(nèi)循環(huán)體中又有嵌套的循環(huán)語句,則構(gòu)成多重循環(huán)。,6.6 循環(huán)的嵌套,嵌套在循環(huán)體內(nèi)的循環(huán)體稱為內(nèi)循環(huán),外面的循環(huán)稱為外循環(huán)。,wh
21、ile 、do-while、for三種循環(huán)都可以互相嵌套。,41,說明: 三種循環(huán)可互相嵌套,層數(shù)不限 外層循環(huán)可包含兩個以上內(nèi)循環(huán),但不能相互交叉 嵌套循環(huán)的執(zhí)行流程,(1) while() while() . ,(2) do do while( ); . while( );,(3) while() do while( ); . ,嵌套循環(huán)的跳轉(zhuǎn) 禁止: 從外層跳入內(nèi)層 跳入同層的另一循環(huán) 向上跳轉(zhuǎn),42,真,真,外循環(huán)初始條件,內(nèi)循環(huán)初始條件,內(nèi)循環(huán)體,外循環(huán)條件,假,內(nèi)循環(huán)條件,假,修改內(nèi)循環(huán)條件,修改外循環(huán)條件,循環(huán)結(jié)束,二重循環(huán)嵌套結(jié)構(gòu)執(zhí)行流程,43,例:循環(huán)嵌套,輸出九九表,#in
22、clude void main() int i,j; for(i=1;i10;i+) printf(%4d,i); printf(n-n); for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?%4dn:%4d,i*j); ,.,44,例:輸出圖形:,* * * *,編程分析:,采用雙重循環(huán),一行一行輸出。,每一行輸出步驟:一般3步。 1)光標(biāo)定位,3)每輸完一行光標(biāo)換行(n),2)輸出圖形。 例如本題:共4行,若行號用k表示,則每一行有2*k-1個*號。,.,45,#include stdio.h void main() int k1,k2; for(k1
23、=1;k1=4;k1+) putchar(t); for(k2=1;k2=k1;k2+) putchar(b);,for(k2=1;k2=k1*2-1;k2+) putchar(*);,putchar(n);, ,定位(還可以用空格的方法),輸出,int i, j; for(i=0; i6; i+) for(j=0; j5-i; j+) printf(“ ”); for(j=0; ji+1; j+) printf(“*”); printf(“n”); ,46,6.7幾種循環(huán)的比較 1)四種循環(huán)都可以用來處理同一個問題,一般可以互相代替。但一般不提倡用goto型循環(huán)。 2)while和do-wh
24、ile循環(huán),循環(huán)體中應(yīng)包括使循環(huán)趨于結(jié)束的語句。for語句功能最強(qiáng)。 3)用while和do-while循環(huán)時,循環(huán)變量初始化的操作應(yīng)在while和do-while語句之前完成,而for語句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。,47,1.break語句,(1) 語句形式: break;,(2)作用: 在循環(huán)語句和switch語句中,終止并跳出循環(huán)體或開關(guān)體。 break只能終止并跳出最近一層的結(jié)構(gòu)。 break不能用于循環(huán)語句和switch語句之外的任何其它語句之中。,6.8 break語句和continue語句,48,例:求300以內(nèi)能被17整除的最大的數(shù)。,#include stdio.
25、h void main() int x,k; for(x=300;x=1;x-) if(x%17=0) break; printf(x=%dn,x); ,找到滿足條件的最大數(shù),結(jié)束循環(huán),49,例:小寫字母轉(zhuǎn)換成大寫字母,直至輸入非字母字符,#include void main() int i,j; char c; while(1) c=getchar(); if(c=a ,50,例:輸出圓面積,面積大于100時停止,#define PI 3.14159 void main() int r; float area; for(r=1;r100) break; printf(r=%d,area=%.
26、2fn,r,area); ,51,(1)語句形式: continue;,(2)語句作用: 結(jié)束本次循環(huán),跳過循環(huán)體中尚未執(zhí)行的語句,進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷,2.continue 語句,(3)語句執(zhí)行流程: continue語句可以結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue語句之后的語句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。,僅用于循環(huán)語句中,52,53,例:求300以內(nèi)能被17整除的所有整數(shù)。,#include stdio.h void main() int x,k; for(x=1;x=300;x+) if(x%17!=0) continue; printf(%dt,x); ,54
27、,例:求輸入的十個整數(shù)中正數(shù)的個數(shù)及其平均值,#include void main() int i,num=0,a; float sum=0; for(i=0;i10;i+) scanf(%d, ,55,while(條件) 語句A; break; 語句 B; ,真,語句B,條件,語句A,break,假,結(jié)束循環(huán),3.break語句與continue語句的區(qū)別,至此位置,56,while(條件) 語句A; continue; 語句 B; ,真,語句B,條件,語句A,continue,假,結(jié)束循環(huán),至此位置,57,#include stdio.h void main() int a, b; for
28、(a=1,b=1; a=10) break; if(b%3=1) b+=3; continue; printf(%dn,a); ,例:分析以下程序的運(yùn)行結(jié)果。,程序運(yùn)行結(jié)果: 4,58,6.9 程序設(shè)計(jì)舉例,例:求,#include stdio.h void main() float s=0,f1=2,f2=1,f=1,t,n; /*累加器賦初值*/ for(n=1;n=10;n+) s=s+f*f1/f2; /*累加器當(dāng)前值=累加器原來的值+新的要加的數(shù)據(jù)*/ f=f*(-1);t=f2;f2=f1;f1=f1+t; /*為求下一個要加的數(shù)據(jù)做準(zhǔn)備*/ printf(s=%fn,s); ,59,#include void main() int s; float n,t,pi; t=1,pi=0;n=1.0;s=1; while(fabs(t)1e-6) pi=pi+t; n=n+2; s=-s; t=s/n; pi=pi*4; printf(pi=%10.6fn,pi); ,60,例:譯密碼,例如 Hello,world! 譯成密碼: Lipps,asvph!,61,#include void main() char c; while(c=getchar()!=n) if(c=a ,62,例:輸入任意一個整數(shù),將其逆序輸出,例如輸入1234,輸出4321。,#inc
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Norharmine-生命科學(xué)試劑-MCE
- 包裝制品訂購合同范本
- APL180-TFA-L-4F-TFA-生命科學(xué)試劑-MCE
- 3-4-Methylenedioxy-N-tert-butylcathinone-hydrochloride-生命科學(xué)試劑-MCE
- 果園抵押合同范本
- 電話營銷在醫(yī)療行業(yè)的實(shí)踐與思考
- 開店分紅合同范本
- 車輛加油合同范本
- 2025年陜鋼集團(tuán)招聘100人筆試參考題庫附帶答案詳解
- 2025至2030年中國脫水牛蒡數(shù)據(jù)監(jiān)測研究報告
- 【公開課】同一直線上二力的合成+課件+2024-2025學(xué)年+人教版(2024)初中物理八年級下冊+
- 人教鄂教版六年級下冊科學(xué)全冊知識點(diǎn)
- 鄭州市地圖含區(qū)縣可編輯可填充動畫演示矢量分層地圖課件模板
- 2024年湖南生物機(jī)電職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及答案解析
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計(jì)規(guī)范
- 《中華民族共同體概論》考試復(fù)習(xí)題庫(含答案)
- 2023年青島遠(yuǎn)洋船員職業(yè)學(xué)院高職單招(數(shù)學(xué))試題庫含答案解析
- 環(huán)保考核試卷18285(含答案)
- HG20592-2009法蘭(PL)法蘭蓋(BL)精加工尺寸
- 風(fēng)管、水管支架估算表
- scratch趣味編程社團(tuán)活動方案活動計(jì)劃
評論
0/150
提交評論