




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第5章 循環(huán)結構程序設計,Follow me!,循環(huán)結構是程序中一種很重要的結構。 特點:在給定條件成立時,反復執(zhí)行某程序段,直到條件不成立為止。 給定的條件稱為循環(huán)條件,反復執(zhí)行的程序段稱為循環(huán)體。,前測試,后測試,語言提供的循環(huán)語句: 1Goto語句與if語句構成的循環(huán) 2while循環(huán) 3dowhile循環(huán) 4for循環(huán),1.語法:while(表達式)循環(huán)體語句 2.執(zhí)行過程:計算表達式的值,當值為真(非0)時, 執(zhí)行循環(huán)體語句。 也叫前測試循環(huán)或當型循環(huán)。,5.1 while循環(huán)語句,3. 注意 (1)如循環(huán)體中有多個語句,須用花括號括起。 (2)循環(huán)體中的語句須能使條件表達式由“真”
2、變“假”,否則循環(huán)為死循環(huán)。 (3)允許while語句的循環(huán)體又是while語句,即形成雙重循環(huán)。,練習: 選擇下列程序的運行結果: #include void main() int n=4; while (n- -) printf(“%d”,- -n); A)2 0B)3 1 C)3 2 1 D)2 1 0,#include void main() int i, sum; sum=0; i = 1; while (i=100) sum+=i; i+; printf(“n%d”, sum); ,計算1100之間數的累加和,循環(huán)條件,內復合語句構成循環(huán)體,【例5.1】,#include void
3、 main() int i, sum; sum=1; i = 1; while (i=6) sum*=i; i+; printf(“n%d”, sum); ,求6!,設置循環(huán)初始條件,#include void main() int i=1,n, sum=1; scanf(“%d”, ,注意sum的數據類型! float sum=1.0;,【例5.2】,求n!,1.語法: do 循環(huán)體語句 while(表達式); 2.執(zhí)行過程:先執(zhí)行循環(huán)體語句一次, 再判別表達式的值,若為真(非0)則繼續(xù)循環(huán),否則終止循環(huán)。 也叫后測試循環(huán)或直到型循環(huán)。,. do-while循環(huán)語句,3. 注意:在if語句、
4、while語句中, 表達式后面都不能加分號, 而在 do-while語句的表達式后面則必須加分號。,main() int i=2,sum=0; while(i=100) sum+=i; i=i+2; printf(“%dn”,sum); ,main() int i=2,sum=0; do sum+=i; i=i+2; while(i=100); printf(“%dn”,sum);,無論條件滿足否,都先執(zhí)行一次循環(huán)體,【例5.3】,求1100的偶數和,【例5.4】計算x的值,使1+4+7+10+13+x的和小于200,求出最大的x。 程序如下: #include stdio.h main()
5、int x=1,sum=1; do x=x+3; sum+=x; while(sum=200); printf(x=%d ,x-3); ,運行結果:x=34,注意:循環(huán)體中要有使 循環(huán)趨于結束的語句, 否則會導致死循環(huán)。,求任意個數的和 #include void main() int i, sum=0,n,x; i = 1; scanf(“%d”,求1100內能被5整除的整數的個數。 #include void main() int i, count=0; i = 1; while (i=100) if (i%5=0) count+; i+; printf(“n%d”, count); ,2
6、.執(zhí)行過程: (1)計算表達式1的值。 (2)計算表達式2的值,若值為真(非0),則執(zhí)行循環(huán)體一次, 否則跳出循環(huán)。 (3)計算表達式3的值,轉回第2步重復執(zhí)行。 在整個for循環(huán)過程中,表達式1只計算一次,表達式2和表達式3則可能計算多次。循環(huán)體可能多次執(zhí)行,也可能一次都不執(zhí)行。,. for循環(huán)語句,1.語法:for(表達式1;表達式2;表達式3)循環(huán)體語句,說明: (1)最簡單的應用形式: for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值) 例如:for(i=1;i=10;i+) sum=sum+i; (2)三個表達式均可缺省,但起分隔作用的兩個分號不可省略。 例如:for( ; ; ) i
7、=1;for(;i=10;i+) sum=sum+i; 或 for(i=1;i=10;) sum=sum+i;i+; 表達式1省略,應在for之前對循環(huán)變量賦初值 表達式2省略,則不判斷條件,循環(huán)無終止進行下去 表達式3省略,則應另設法保證循環(huán)的結束 (3)表達式1和表達式3可為逗號表達式 例如:for(i=1,j=10;i=j;i+,j-) k=i+j;,練習:閱讀程序,寫出運行結果。 #include void main() int i; for (i=4;i=10;i+) if (i%3=0) printf(“%d”,i); ,運行結果:69,練習:閱讀程序,選擇正確答案。 #inclu
8、de void main() int i=0,j=0,k=0,m=4; for (m=0;m4;m+) switch (m) case 0:i=m+; case 1:j=m+; case 2:k=m+; case 3:m+; printf(“n%d,%d,%d,%d”,i,j,k,m); A)0,0,2,4B)0,1,2,3 C)0,1,2,4D.)0,1,2,5,盡量不要循環(huán)體中改變循環(huán)變量的值!,求和s=1-1/2+1/3-1/4+1/n,n由鍵盤輸入。,void main( ) int i , t=1; double s=0; scanf(“%d”, ,級數各項正負號的解決方法: 設置變
9、量t,使其初值為1,然后反復執(zhí)行語句t=-t,則t的值在1和-1之間交替變化。,【例5.5】,#include void main() long int f1, f2; int i; f1=1; f2=1; for ( i=1; i=20; i+) printf(%12ld %12ld ,f1,f2); if (i%2=0) printf(n); f1=f2+f1; f2=f1+f2; ,說明: (1)i每取一個值打兩個數,220=40; (2)每打兩個數換行。,求Fibonacci數列的前40個數。 F1=1(n=1) F2=1(n=2) F3=1+1=2 F4=1+2=3 Fn=Fn-1+
10、Fn-2 (n=3),【例5.6】,. 循環(huán)的嵌套 一個循環(huán)體內又包含另一個完整的循環(huán)結構,叫循環(huán)的嵌套。不同語句構成的循環(huán)也可以相互嵌套。見書P88。 (1)while ( ) . while ( ) . ,(2)for (; ;) . while ( ) . ,for 語句的循環(huán)體還可為另一個循環(huán)語句。例如:,for(i=1;i=2;i+) for(j=1;j=2;j+) printf(“%3d”,i+j); printf(“n”); 輸出: 2 3 3 4,for(i=1;i=2;i+) for(j=1;j=2;j+) printf(“%3d”,i+j); printf(“n”); 輸出
11、: 2 3 3 4,【例5.7】全班有20個學生,每個學生考5門課程,要求分別統計出每個學生各門課的平均成績。,#include stdio.h main( int i,j,score,sum; float aver; j=1; while(j=20) sum=0; for(i=1;i=5;i+) printf(Enter No.%d the score %d:,j,i); /*提示:輸入j號學生的i門課成績*/ scanf(%d, ,【例5.8】在15中取出3個互不相同的整型數,輸出其和能被4整除的個數。,#include stdio.h void main() int i,j,k,n=0;
12、 for(i=1;i=5;i+) for(j=i+1;j=5;j+) for(k=j+1;k=5;k+) if(i!=j ,幾種循環(huán)的比較 1. 不提倡使用goto循環(huán)。 2.for循環(huán)比while、do-while循環(huán)功能更強。 3.while、do-while語句中,循環(huán)變量初始化應在循環(huán)語句之前完成。for循環(huán)可以在其中完成。 4.while、do-while和for循環(huán),可以用break語句跳出循環(huán),用continue語句結束本次循環(huán)。而goto和if構成的循環(huán)不能。,. 循環(huán)的退出 (break語句和continue語句) break語句:強制結束循環(huán),轉向循環(huán)語句下面的語句。 br
13、eak可以跳出switch結構,還可以跳出最近的一層循環(huán)。 for (r=1; r100) break; printf(“%f”, area); 注意:break語句只能用于循環(huán)語句和switch語句。,continue語句 對于for循環(huán),跳過循環(huán)體其余語句,轉向循環(huán)變量增量表達式的計算;對于while和do-while循環(huán),跳過循環(huán)體其余語句,轉向循環(huán)繼續(xù)條件的判定語句。 continue和break的區(qū)別:continue只結束本次循環(huán),而不是終止整個循環(huán);break是結束本層循環(huán),不再進行條件判斷。 while (表達式 1) . if (表達式 2) break; . ,while
14、(表達式1) . if (表達式 2) continue; . ,練習:閱讀程序,寫出運行結果。 #include main() int i; for (i=4;i=10;i+) if (i%3=0) continue; printf(“%d”,i); A)45B.)457810 C)69D)678910,【例5.9】在200以內的正整數中,找出既是15的倍數又是7的倍數的最大值。 程序如下: #include stdio.h main() int i; for(i=200;i=0;i-) if(i%15=0 ,運行結果:the result is i=105,注意:等于號“=”和 賦值號“=
15、”的區(qū)別。,【例5.10】找出100200之間第一個能被16整除的數 程序如下: #include stdio.h main() int i=100; while(i=200) if(i%16=0) /*判斷該數是否能被16整除*/ printf(%d ,i); break; else i+; ,運行結果:112,【例5.11】輸入5個學生的百分制成績,分別輸出其對應的等級(90100為A,8970為B,6960為C,低于60為D)。 程序如下: #include stdio.h void main() int a,i=1; char y; while(i=5) scanf(%d, ,運行結果
16、: 72 y=B,【例5.12 】輸入10個整數,輸出其中負數的個數及所有負數的和#include stdio.h main() int i,sum=0,num=0,x; printf(input 10 numbers:); for(i=0;i=0) continue; sum+=x; num+; if(num) printf(num=%d,sum=%d,num,sum); else printf(num is 0); ,程序運行結果: input 10numbers:-313-1-46-790-14 num=5,sum=-29,. 用goto語句構成的循環(huán),1. goto語句(無條件轉向語句
17、) 格式:goto 語句標號; 例: gotolabel1; 說明(1)goto語句使程序的執(zhí)行方向轉到語句標號所在的語句。 (2)語句標號的命名規(guī)則同變量 2.goto語句的用途 (1)與if構成循環(huán); (2)從循環(huán)體內跳出; 注意:使用goto語句跳轉不符合結構化的編程思想,應盡量限制使用。,#include void main() int x; scanf(“%d”, ,求和的一般方法: 設置存放和的變量sum,初始置0; 輸入要加的數x; Sum=sum+x; 是否繼續(xù)?是,轉;否,轉 打印sum 求積的一般方法: 設置存放和的變量sum,初始置1; 輸入要加的數x; Sum=sum*
18、x; 是否繼續(xù)?是,轉;否,轉 打印sum,例:用if和goto求 #include void main() int i,sum=0; i=1; loop:if(i=100) sum=sum+i; i+; goto loop; printf(“n%dn”,sum);,例1: 公式求pi的近似值,直到最后一項的絕對值小于10-6為止。 #include #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
19、; printf(pi=%10.6fn,pi); ,. 循環(huán)結構程序設計舉例,例2:求一批數中負數的個數。 #include void main() int i=1, num,count=0; printf(以數據10000結束錄入n); printf(“請輸入第%d數:”,i); scanf(“%d”, ,終止標志,例3:譯碼。字母轉換為其后第4個字母,非字母不變。 #include void main() char c; while (c=getchar()!=n) if (c=a ,按回車停止譯碼,如果是后四個字母,例4:求100200之間全部素數。 判斷m是否素數的規(guī)則是:m不能被2到
20、根號2之間所有整數整除。 #include #include void main() int m,k,i,n=0; for (m=101;m=200;m=m+2) k=sqrt(m);,for (i=2;i=k+1) printf(“%d”,m);n=n+1; if (n%10=0)printf(“n”); printf(“n”); ,例5:求10個數中的最大數。 #include void main() int i=1,x, max; scanf(“%d”, ,輸入第一個數,第一個數送max,依次輸入第二到第10個數,每輸入一個數,與max比較,使max中始終存放兩者中大的數,例6:百馬百瓦
21、問題。有100匹馬,馱100塊瓦,大馬馱3塊,小馬馱2塊,兩個馬駒馱1塊。問大馬、小馬、馬駒各多少?編程列出所有可能的馱瓦方案。 分析:設大馬、小馬、馬駒各為x、y、z只,根據題目要求,可以用下列方程表示: x+y+z100 3x+2y+z/2100 這是一個不定方程,未知數多于方程數,此題有若干個解。要解此不定方程應先固定一個變量的值,然后求其他兩個值。即對其余兩個變量的各可能值一一測定,看它是否滿足方程。顯然這是一個窮舉問題。利用窮舉法,只要將各種可能的組合一一測試,將符合條件的組合輸出即可。,程序如下: #include stdio.h main() int x,y,z; for(z=9
22、8; z=2;z=z-2) for(y=50; y=1; y-) for(x=0; x=33; x+) if(z+x+y=100 ,例7:小猴吃桃問題。有一天小猴摘下了若干個桃子,當即吃掉一半,還不過癮,又多吃了一個;第二天接著吃了剩下的桃子的一半后又多吃一個;以后每天都吃尚存桃子的一半零一個,到第10天早上要吃時只剩下一個了。問小猴第一天共摘下了多少個挑子? 分析:這是一個“遞推”問題,先從最后一天推出倒數第二天的桃子,再從倒數第二天的桃子推出倒數第三天的桃子 。 設第n天的桃子為x,它是n-1天的桃子數的一半減l個,即: xn=xn-1-1 那么n-1天的桃子數為: xn-1=(xn+1)2 (遞推公式) 已知第10天的桃子數x10為1,根據遞推公式可得第9天的桃子數x9為4,。,程序如下: #include stdio.h main() int i,x; x=1; /*第10天的桃子數*/ for(i=9; i=1;i-) x=(x+1)*2 ; printf( i=%2d,x=%dn,i,x); /*第i天的桃子數為x只*/ ,#include void main() int i, j; for (i=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024撫州幼兒師范高等??茖W校輔導員招聘筆試真題
- 2025年鐵路貨物運輸服務項目合作計劃書
- 2025年金華市級機關基層遴選公務員考試試題【答案】
- 2025年經典心理健康知識競賽考試練習題庫(250題)【答案】
- 2025年教師資格證考試常考知識點歸納總結【答案】
- 2025年吉林通化市東昌區(qū)事業(yè)單位招聘考試筆試試題【答案】
- 2025年精密陶瓷劈刀項目合作計劃書
- 2025年南通市少年宮選聘教師考試筆試試題【答案】
- 消費升級視域下體育用品制造業(yè)高質量發(fā)展的內在機理、現實困境及推進路徑
- 2025年電子計步器實驗分析儀器項目合作計劃書
- 中科曙光2025測評
- 貨場租賃協議
- 兒科換錯藥護理不良事件
- 英語四六級資料 全國大學英語四六級全部詞匯
- 創(chuàng)業(yè)支持體系提升評估與反饋機制的建立流程
- DB23-T 3919-2024 大跨鋼結構技術標準
- 河源市突發(fā)事件總體應急預案
- JJF(冀) 240-2024 點線規(guī)校準規(guī)范
- RoHS及REACH培訓材料課件
- 員工宿舍表格模板
- 校長一日工作流程
評論
0/150
提交評論