wxm第6章 循環(huán)控制_第1頁
wxm第6章 循環(huán)控制_第2頁
wxm第6章 循環(huán)控制_第3頁
wxm第6章 循環(huán)控制_第4頁
wxm第6章 循環(huán)控制_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、3、限定轉(zhuǎn)向語句、限定轉(zhuǎn)向語句(break; continue;);)2、多重循環(huán)、多重循環(huán)whilewhile(表達式表達式) do do forfor(表達式表達式;表達式表達式;表達式表達式) 循環(huán)體循環(huán)體 循環(huán)體循環(huán)體 循環(huán)體循環(huán)體 while while(表達式表達式);); 王馨梅王馨梅定數(shù)循環(huán)定數(shù)循環(huán): : 要先確定循環(huán)次數(shù),然后逐次執(zhí)行循環(huán)體要先確定循環(huán)次數(shù),然后逐次執(zhí)行循環(huán)體,完成規(guī)定的完成規(guī)定的次數(shù)后退出循環(huán)。次數(shù)后退出循環(huán)。(需要一個變量當(dāng)作(需要一個變量當(dāng)作“計數(shù)器計數(shù)器”,該變,該變量稱為循環(huán)變量。)量稱為循環(huán)變量。) 先先確定一個停止條件確定一個停止條件,達到這個條

2、件后,退出循環(huán)。,達到這個條件后,退出循環(huán)。(如果無停止條件,或者條件根本不可能達到,就成為死(如果無停止條件,或者條件根本不可能達到,就成為死循環(huán)。)循環(huán)。)考慮循環(huán)算法之前,必須先為這個循環(huán)問題定性考慮循環(huán)算法之前,必須先為這個循環(huán)問題定性:不定數(shù)循環(huán)不定數(shù)循環(huán): : 1*用用 goto 語句和語句和 if 語句構(gòu)造循環(huán)語句構(gòu)造循環(huán)(已淘汰?。ㄒ烟蕴。?2用用 while 語句語句 3用用 do-while 語句語句4用用 for 語句語句label: if(表達式(表達式) goto label;C中實現(xiàn)循環(huán)的四種方法中實現(xiàn)循環(huán)的四種方法while語句while(表達式)(表達式)

3、循環(huán)體循環(huán)體 /求和求和:1+2+3+10int i=1,sum=0;while ( i=10) sum=sum+i; i+; 常用算法常用算法必須掌握必須掌握 因為是定數(shù)循環(huán)問題,所以因為是定數(shù)循環(huán)問題,所以i不僅當(dāng)作被加數(shù),還承當(dāng)著循環(huán)計數(shù)器的功能。不僅當(dāng)作被加數(shù),還承當(dāng)著循環(huán)計數(shù)器的功能。編程經(jīng)驗編程經(jīng)驗(筆記):陷入死循環(huán)時(筆記):陷入死循環(huán)時ctrl+c 結(jié)束程序結(jié)束程序ctrl+s 暫停暫停 提示:10!=1*2*3*10,本質(zhì)是累乘求積。int i=2,all=1;while ( i=10) all=all*i; i+; 如果寫成如果寫成 i-; 則會陷入死循環(huán)。則會陷入死循環(huán)

4、。常用算法常用算法必須掌握必須掌握do-while 語句do 循環(huán)體循環(huán)體 while(表達式)(表達式); /*求累乘:從求累乘:從12乘到乘到18*/#include int main() int all=1, i=12; do all=all*i; i+; while(i=18) ; printf(“all=%dn,all); return 0; 學(xué)生練習(xí):順序輸出學(xué)生練習(xí):順序輸出ASCII碼表中所有字符。碼表中所有字符。循環(huán)體表達式真假while (表達式表達式) 循環(huán)體循環(huán)體語句語句循環(huán)體表達式真假do 循環(huán)體語句循環(huán)體語句while (表達式表達式) ; 比較比較 while 和

5、和 do-while的差異的差異二者差別:二者差別:do_while 的循環(huán)體必然會執(zhí)行一次的循環(huán)體必然會執(zhí)行一次scanf(“%d”,&i);sum=0;while (i=10) sum=sum+i; i+; scanf(“%d”,&i);sum=0;do sum=sum+i; i+; while (i=10);學(xué)生思考:如果輸入學(xué)生思考:如果輸入i=5,則循環(huán)結(jié)束時,則循環(huán)結(jié)束時,sum=? i=? 如果輸入如果輸入i=11,則循環(huán)結(jié)束時,則循環(huán)結(jié)束時,sum=?sum=5+6+7+8+9+10i=11sum=0i=11sum=11i=12 #include void ma

6、in() int num ; int sum=0; /*清零清零*/ printf(“輸入數(shù)據(jù)輸入數(shù)據(jù),-1表示結(jié)表示結(jié)束束:n); scanf(%d,&num); while ( num!=-1 ) sum=num+ sum ; scanf(%d,&num); printf(%dn, sum); 分析:進貨次數(shù)不定,不定數(shù)循環(huán)問題,必須約定停止條件。分析:進貨次數(shù)不定,不定數(shù)循環(huán)問題,必須約定停止條件。 #include void main() int num ; int sum=0; printf(輸入數(shù)據(jù),輸入數(shù)據(jù), -1表示結(jié)表示結(jié)束束:n); scanf(%d,&am

7、p;num); do sum=num+ sum ;scanf(%d,&num); while ( num!=-1); printf(%dn, sum); 例:例:計算某商場一個月的蘋果進貨量計算某商場一個月的蘋果進貨量表達式表達式1:循環(huán)變量賦初值:循環(huán)變量賦初值表達式表達式2:循環(huán)條件:循環(huán)條件表達式表達式3:循環(huán)變量增值:循環(huán)變量增值表達式1表達式2循環(huán)體表達式3假真for (表達式表達式 1; 表達式表達式 2; 表達式表達式 3) 循環(huán)體(形式上僅為一條語句)循環(huán)體(形式上僅為一條語句)for 語句記住記住執(zhí)行流程執(zhí)行流程表達式1表達式2循環(huán)體表達式3假真#includevoi

8、d main( ) int i,k; for(i=9;i9;i+) printf(循環(huán)一被執(zhí)行循環(huán)一被執(zhí)行n); printf(i=%dnn,i); for(k=15;k17;k+) printf(循環(huán)二被執(zhí)行循環(huán)二被執(zhí)行n); printf(k=%dn,k);101ii#includevoid main() int sum=0, i; for(i=1;i=10;i+) sum=sum+i; printf(sum=%dn,sum); i=1; while(i=10) sum=sum+i; i+; 例:求 提示:提示:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)(循環(huán)變量賦初值;循環(huán)條件;循

9、環(huán)變量增值)學(xué)生練習(xí)題:學(xué)生練習(xí)題: 打印大寫字母表打印大寫字母表 char c; for(c=A;c=Z;c+) printf(%c ,c);for(i=1;i=10;i+) sum=sum+i;i=1; for( ;i=10;i+) sum=sum+i;for(i=1;i=10; ) sum=sum+i; i+;for(i=1; ;i+) if(i=10) sum=sum+i; else break;推薦格式:推薦格式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)不推薦以下格式(雖然語法無錯,但不能充分體現(xiàn)出不推薦以下格式(雖然語法無錯,但不能

10、充分體現(xiàn)出C語言的簡潔風(fēng)格)語言的簡潔風(fēng)格)注意:循環(huán)變量的數(shù)據(jù)類型要謹(jǐn)慎選擇,否則數(shù)據(jù)溢出造成死循環(huán)。注意:循環(huán)變量的數(shù)據(jù)類型要謹(jǐn)慎選擇,否則數(shù)據(jù)溢出造成死循環(huán)。查錯:查錯: char c; / 字符變量取值范圍:字符變量取值范圍: -128127 for(c=0;c=1000;c+) /想打印想打印01000,能實現(xiàn)嗎?,能實現(xiàn)嗎? printf(“%d ,c);發(fā)生滾屏怎么辦:發(fā)生滾屏怎么辦:ctrl+c 結(jié)束程序結(jié)束程序 ctrl+s 暫停暫停011111111000000010000001127-128-12710000010-12611111111 -1(*僅了解):分析溢出機理僅

11、了解):分析溢出機理最大數(shù)是最大數(shù)是127,再加,再加1,就溢出了,就溢出了00000000 0例:例:輸出輸出133200之間所有的整數(shù)之間所有的整數(shù) (要求每(要求每7個數(shù)換一行)個數(shù)換一行)程序的運行結(jié)果應(yīng)該為:程序的運行結(jié)果應(yīng)該為:常用算法常用算法必須掌握必須掌握 #includevoid main( ) int j,m; for(j=133,m=1; j=200; j+,m+) printf(%dt,j); if(m%7=0) printf(n); 算法二:如果這兩個計數(shù)器關(guān)系固定,可合并成一個計數(shù)器算法二:如果這兩個計數(shù)器關(guān)系固定,可合并成一個計數(shù)器for(j=133;j=200;

12、j+) printf(%dt,j); if((j-132)%7=0) printf(n); 思考:節(jié)約了什么?浪費了什么?算法一:一個循環(huán)中設(shè)定兩個計數(shù)器算法一:一個循環(huán)中設(shè)定兩個計數(shù)器數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu):算法:是循環(huán)求和問題算法:是循環(huán)求和問題 屬于不定數(shù)循環(huán)問題,因此程序員需要與用戶屬于不定數(shù)循環(huán)問題,因此程序員需要與用戶約定循環(huán)停止的條件。約定循環(huán)停止的條件。 編程經(jīng)驗編程經(jīng)驗(抄筆記)(抄筆記):通常與用戶約定一個非法輸入數(shù)據(jù)作為通常與用戶約定一個非法輸入數(shù)據(jù)作為不定數(shù)循環(huán)結(jié)束標(biāo)志。不定數(shù)循環(huán)結(jié)束標(biāo)志。 思考:思考: 對于本題對于本題108, -1 , -53 哪個更好?哪個更好?綜例:

13、綜例:求任意某班的單科平均成績求任意某班的單科平均成績常用算法常用算法必須掌握必須掌握 #includevoid main() int grade; /單個學(xué)生的成績單個學(xué)生的成績int total=0; /全班總分全班總分int counter=0;/學(xué)生數(shù)學(xué)生數(shù) float average; /全班平均分全班平均分printf(“輸入成績輸入成績, -1表示結(jié)束:表示結(jié)束:);/與用戶約定循環(huán)停止條件與用戶約定循環(huán)停止條件scanf(%d,&grade); while(grade100 | grade100|grade-1)/檢查數(shù)據(jù)的有效性檢查數(shù)據(jù)的有效性 printf(“輸入有

14、誤輸入有誤,請重新輸入請重新輸入“); scanf(%d,&grade); 1、三種循環(huán)語句、三種循環(huán)語句3、限定轉(zhuǎn)向語句、限定轉(zhuǎn)向語句(break; continue;);) whilewhile(表達式)(表達式) forfor(表達式;表達式;表達式(表達式;表達式;表達式) 思考思考1:如果要在屏幕上輸出一行共:如果要在屏幕上輸出一行共10個個“頂頂”字?字?for (j=1;j=10;j+) printf (頂頂);思考思考2:如果要在屏幕上輸出這樣的:如果要在屏幕上輸出這樣的8行?行? for(i=1;i=8;i+) for (j=1;j=10;j+) printf (“頂

15、頂); printf (“n);6-5 6-5 循環(huán)的嵌套例例1:簡單圖案打?。汉唵螆D案打印 * * * * * * * * * * * * * * * * * * * * * * * *#includevoid main( ) int m,n; for (m=1;m=6;m+) /思考循環(huán)多少次?思考循環(huán)多少次? for (n=1;n=4;n+) /思考循環(huán)多少次?思考循環(huán)多少次? printf (*); printf(n); #include void main( ) int i, j; for (i=1;i=5;i+) for (j=1;j=i;j+) printf ( *); prin

16、tf(n); * * * * * * * * * * * * 例例1:簡單圖案打印簡單圖案打印2常用算法常用算法必須掌握必須掌握 這是定數(shù)循環(huán)問題,要依次判斷每一個三位數(shù)這是定數(shù)循環(huán)問題,要依次判斷每一個三位數(shù)i (100i999)是否為水仙花數(shù)是否為水仙花數(shù) ,所以設(shè)置,所以設(shè)置i為循環(huán)變量。為循環(huán)變量。算法算法1:提取出個位提取出個位數(shù)字?jǐn)?shù)字k1 、十位、十位數(shù)字?jǐn)?shù)字k2 、百位數(shù)字、百位數(shù)字k3,判斷:,判斷: i = =k1*k1*k1+k2*k2*k2+k3*k3*k3 綜例:綜例: 打印三位數(shù)中的打印三位數(shù)中的水仙花數(shù)水仙花數(shù) 如:如:153=33+53+13如何提取個十百位?如何

17、提取個十百位? 例如對于數(shù)字例如對于數(shù)字543: 個位個位k1=543%10 值為值為3 十位十位k2=543/10%10 值為值為4 百位百位k3=543/100 值為值為5定性:定性: #include void main( ) int i,k1,k2,k3; for (i=100;i1000;i+) k1=i%10; /*求求個個位位*/ k2=i/10%10; /*求十位求十位*/ k3=i/100; /*求百位求百位*/ if (i=k1*k1*k1+k2*k2*k2+k3*k3*k3) printf(%d=%d3+%d3+%d3n, i, k1 ,k2 ,k3 ); 思考:循環(huán)變量

18、思考:循環(huán)變量 100i999 共循環(huán)幾次?共循環(huán)幾次?算法算法2:三個數(shù)字的全排列組合三個數(shù)字的全排列組合 設(shè)該三位數(shù)的百位、十位、個位數(shù)字分別設(shè)該三位數(shù)的百位、十位、個位數(shù)字分別為為k3(取值取值19)、k2 (取值取值09) 、k1 (取值取值09)。滿足以下關(guān)系即為水仙花數(shù):滿足以下關(guān)系即為水仙花數(shù): k3*100+k2*10+k1 =k3*k3*k3+k2*k2*k2+k1*k1*k1思考:思考:三重三重定數(shù)循環(huán),設(shè)置循環(huán)變量定數(shù)循環(huán),設(shè)置循環(huán)變量k3(取值取值19)、k2 (取值取值09) 、k1 (取值取值09)#includevoid main( ) int k1,k2,k3,

19、i; for (k3=1;k3=9;k3+) /代表百位代表百位 for (k2=0;k2=9;k2+) /代表十位代表十位 for (k1=0;k1=9;k1+) /代表個位代表個位 i=k3*100+k2*10+k1; if (i=k3*k3*k3+k2*k2*k2+k1*k1*k1) printf(%d=%d3+%d3+%d3n, i,k3,k2,k1); 三三重重循循環(huán)環(huán) 1、三種循環(huán)語句、三種循環(huán)語句2、多重循環(huán)、多重循環(huán)while(表達式表達式1) if(表達式表達式2) break;在在while 、for 、do_while或或switch中中,使用使用break語句語句可使程

20、序可使程序立即退出該結(jié)構(gòu)立即退出該結(jié)構(gòu)在在while 、for 、do_while中中,使使用用continue語句,語句,跳過循環(huán)體跳過循環(huán)體中余下的語句中余下的語句,并繼續(xù)執(zhí)行下一并繼續(xù)執(zhí)行下一次循環(huán)次循環(huán)while(表達式表達式1) if(表達式表達式2) continue ;6-8 6-8 限定轉(zhuǎn)向語句限定轉(zhuǎn)向語句例:例:#includevoid main() int x; for(x=1; x=10; x+) if(x=5) break; /*在在 x=5 時終止循環(huán)時終止循環(huán)*/ printf(%d ,x ); 1) break 語句語句輸出 1 2 3 4 (程序結(jié)束時程序結(jié)束時

21、x=5) 2) continue 語句語句例:例:#includevoid main() int x; for(x=1; x=10; x+) if(x=5) continue; printf(%d ,x); 假x= =5?X=10?真真假continue輸出輸出 1 2 3 4 6 7 8 9 10(程序結(jié)束時(程序結(jié)束時 x=11)注意注意break和和continue語句的區(qū)別語句的區(qū)別綜例綜例1(書(書6.8) 任意輸入一個正整數(shù)任意輸入一個正整數(shù)m,判斷其是否為素數(shù),判斷其是否為素數(shù)若此循環(huán)正常結(jié)束則若此循環(huán)正常結(jié)束則m是素數(shù)。是素數(shù)。for(i=2;isqrt(m) )思路:循環(huán)試除

22、,一旦能整除,立即結(jié)束循環(huán)思路:循環(huán)試除,一旦能整除,立即結(jié)束循環(huán)本章綜合訓(xùn)練題本章綜合訓(xùn)練題 #include #includevoid main( ) int m,i,k; scanf(%d,&m); k=(int)sqrt(m); for(i=2;i=a&c=A&c=w&c=W&c=Z) c=c-22; 綜例綜例2(書(書128頁頁6.10) 輸入一行字符,加密后輸出。輸入一行字符,加密后輸出。(先理解該加密規(guī)則:見書(先理解該加密規(guī)則:見書128頁圖頁圖) 運行結(jié)果:運行結(jié)果: China! Glmre! 常用算法常用算法建議掌握建議掌握 算法二

23、:(書上給出的算法)算法二:(書上給出的算法)#includevoid main()char c; while( (c=getchar() != n )/結(jié)束約定習(xí)慣上為結(jié)束約定習(xí)慣上為“回回車車” if(c=a&c=A&cZ&cz) c=c-26; printf(%c,c); printf(n); 運行結(jié)果:運行結(jié)果: China! Glmre! 僅了解僅了解:按按Enter鍵后操作系統(tǒng)鍵后操作系統(tǒng)才將這一批數(shù)據(jù)才將這一批數(shù)據(jù)一起一起送到內(nèi)存緩沖區(qū)中去,交由程序處理。送到內(nèi)存緩沖區(qū)中去,交由程序處理。* *(僅了解)(僅了解):如果不用如果不用“n”n”做循環(huán)結(jié)束約定

24、,會怎樣?做循環(huán)結(jié)束約定,會怎樣?編程編程: :將用戶輸入內(nèi)容原樣輸出一遍將用戶輸入內(nèi)容原樣輸出一遍whilewhile( ( (c=c=getchargetchar()())!=!=k k ) ) printf(printf(%c,%c,c,c););運行情況:運行情況:abcdkopqabcdkopq ( (輸入輸入) )a,b,c,da,b,c,d, , ( (輸出輸出) )因為按因為按Enter鍵后操作系統(tǒng)才將這一批數(shù)據(jù)一起鍵后操作系統(tǒng)才將這一批數(shù)據(jù)一起送到內(nèi)存緩沖區(qū)中去,交由程序處理。送到內(nèi)存緩沖區(qū)中去,交由程序處理。1、常見輸出格式錯誤常見輸出格式錯誤: 例: float b=9.

25、7; printf(%d,b); /*常見錯誤*/應(yīng)改為:printf(%d,(int)b );2、常見警告:常見警告:float k;k=1.3; /* warning*/系統(tǒng)將浮點型常量都按雙精度處理。該賦值運算會損失系統(tǒng)將浮點型常量都按雙精度處理。該賦值運算會損失精度,所以語法精度,所以語法warning。建議以下三種修改方式:建議以下三種修改方式:double k;k=1.3;float k;k=1.3f;float k;k=(float)1.3;回顧我們實驗課上常見問題回顧我們實驗課上常見問題3、常見的邏輯錯誤、常見的邏輯錯誤 思考1: if(x=0); printf(”x等于0”); 思考2: while(x0); printf(”x小于0”); 回顧我們實驗課上常見問題回顧我們實驗課上常見問題難點:難點:1 1、復(fù)雜循環(huán)問題,如何用多重循環(huán)實現(xiàn)。、復(fù)雜循環(huán)問題,如何用多重循環(huán)實現(xiàn)。2 2、如何合理使用限定轉(zhuǎn)向語句:、如何合理使用限定轉(zhuǎn)向語句:break; cont

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論