




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第5章章 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)1. 5.1 5.5 2學(xué)時(shí)2. 5.6 2學(xué)時(shí)問(wèn)題的提出:對(duì)于這樣的一類問(wèn)題:?jiǎn)栴}1. 從鍵盤(pán)輸入10個(gè)學(xué)生的成績(jī),求總成績(jī)。問(wèn)題2. 求100以內(nèi)的素?cái)?shù)問(wèn)題3. 求1!+2!+3!+10! 用前面所學(xué)知識(shí)來(lái)解決這些問(wèn)題是非常麻煩的對(duì)于問(wèn)題1的一個(gè)笨辦法:設(shè)一個(gè)變量,每次輸入一個(gè)學(xué)生成績(jī),累加后再輸入下一個(gè)學(xué)生成績(jī),如下: scanf(“%f”,&a); s=s+a; scanf(“%f”,&a); s=s+a; . 這樣重復(fù)10次,然后輸出s的值。 是否可用一種語(yǔ)句,使這兩句話能自動(dòng)的重復(fù)執(zhí)行10次,以簡(jiǎn)化書(shū)寫(xiě)的麻煩呢? 這就是循環(huán)語(yǔ)句的任務(wù)。5
2、.1 goto循環(huán)結(jié)構(gòu)概述C語(yǔ)言可實(shí)現(xiàn)循環(huán)的語(yǔ)句:l用goto 和 if 構(gòu)成循環(huán)lwhile 語(yǔ)句ldo while 語(yǔ)句lfor 語(yǔ)句goto語(yǔ)句及用goto構(gòu)成循環(huán)vgoto語(yǔ)句一般格式: goto 語(yǔ)句標(biāo)號(hào); .標(biāo)號(hào):語(yǔ)句; v功能:無(wú)條件轉(zhuǎn)移語(yǔ)句v說(shuō)明:l不能用整數(shù)作標(biāo)號(hào)l只能出現(xiàn)在goto所在函數(shù)內(nèi),且唯一l只能加在可執(zhí)行語(yǔ)句前面l限制使用goto語(yǔ)句例 用if 和goto語(yǔ)句構(gòu)成循環(huán),求1001nn/*ch5_1.c*/#include main() int i,sum=0; i=1;loop: if(i=100) sum+=i; i+; goto loop; printf(%d
3、,sum);sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體5.2 while循環(huán)結(jié)構(gòu)v一般形式:while(表達(dá)式) 循環(huán)體語(yǔ)句;v執(zhí)行流程:expr循環(huán)體假(0)真(非0)whilev特點(diǎn):先判斷表達(dá)式,后執(zhí)行循環(huán)體v說(shuō)明:l循環(huán)體有可能一次也不執(zhí)行l(wèi)循環(huán)體可為任意類型語(yǔ)句l下列情況,退出while循環(huán)u條件表達(dá)式不成立(為零)u循環(huán)體內(nèi)遇break,return,gotol無(wú)限循環(huán): while(1) 循環(huán)體;例 用while循環(huán)求 1001nn/*ch5_2.c*/#include main()
4、 int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum);循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體【例】問(wèn)題【例】問(wèn)題1的解決方法的解決方法1:采用:采用while循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)main() int count=1,total=0,grade; while(count=10) printf(input the grade:); scanf(%d,&grade); total=total+grade; count+; printf(%dn,total);應(yīng)注意:應(yīng)注意:1、計(jì)數(shù)器和累加器的、計(jì)數(shù)器和累加器的初值;初值;
5、2、一次循環(huán)后,循環(huán)、一次循環(huán)后,循環(huán)控制變量的變化情況??刂谱兞康淖兓闆r。3、跳出循環(huán)時(shí)循環(huán)控、跳出循環(huán)時(shí)循環(huán)控制變量的值應(yīng)為多少?制變量的值應(yīng)為多少?如果如果count初值為初值為10,20時(shí)呢?時(shí)呢?111098765432count10987654321次數(shù)次數(shù)每次循環(huán)后,控制變量每次循環(huán)后,控制變量count的變化情況的變化情況例 顯示110的平方/*ch5_21.c*/#include main() int i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; 運(yùn)行結(jié)果:1*1=12*2=43*3=94*4=165*5=256*6=367
6、*7=498*8=649*9=8110*10=100注意:循環(huán)控制變量值在循環(huán)體內(nèi)必須有所改變。 例如:請(qǐng)問(wèn)下例中循環(huán)結(jié)束時(shí)i值為多少?i=1;while (i=100) putchar(*); i+; i+應(yīng)該在循環(huán)體內(nèi)改變:do 循環(huán)體語(yǔ)句; while(表達(dá)式);v執(zhí)行流程:do循環(huán)體expr假(0)真(非0)while5.3 dowhile循環(huán)結(jié)構(gòu)v一般形式:v特點(diǎn):先執(zhí)行循環(huán)體,后判斷表達(dá)式v說(shuō)明:l至少執(zhí)行一次循環(huán)體ldowhile可轉(zhuǎn)化成while結(jié)構(gòu)expr循環(huán)體假(0)真(非0)循環(huán)體While循環(huán)例 用dowhile循環(huán)求 1001nn/*ch5_3.c*/#include
7、 main() int i,sum=0; i=1; do sum+=i;i+; while(i=100); printf(%d,sum);【例】問(wèn)題【例】問(wèn)題1的解決方法的解決方法2:采用:采用do-while循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)【源程序】main() int count=1,total=0,grade; do printf(input the grade:); scanf(%d,&grade); total=total+grade; count+; while(count=10); printf(%dn,total);應(yīng)注意:應(yīng)注意:1、一次循環(huán)后,循環(huán)控制、一次循環(huán)后,循環(huán)控制變量的變
8、化情況。變量的變化情況。2、跳出循環(huán)時(shí)循環(huán)控制變、跳出循環(huán)時(shí)循環(huán)控制變量的值應(yīng)為多少?如果量的值應(yīng)為多少?如果count初值為初值為10,20時(shí)呢?時(shí)呢?111098765432count10987654321次數(shù)次數(shù)每次循環(huán)后,控制變量的變化情況每次循環(huán)后,控制變量的變化情況例 while和dowhile比較/*ch5_4.c*/#include main() int i,sum=0; scanf(%d,&i); do sum+=i;i+; while(i=10); printf(%d,sum);main() int i,sum=0; scanf(%d,&i); while(
9、i=10) sum+=i;i+; printf(%d,sum);1、跳出循環(huán)時(shí)循環(huán)控制變量的值應(yīng)為多少?如果輸入值為1,10,20時(shí)呢?2、輸出結(jié)果呢?1.while結(jié)構(gòu)與do-while循環(huán)結(jié)構(gòu)相類似.2.但要注意區(qū)別:v前者:先判斷表達(dá)式,再執(zhí)行語(yǔ)句。至少要執(zhí)行0次v后者:先執(zhí)行語(yǔ)句,再判斷表達(dá)式。至少要執(zhí)行1次。3.也就是說(shuō)用兩種循環(huán)結(jié)構(gòu)處理同一問(wèn)題時(shí),若二者的循環(huán)體部分是一樣的,當(dāng)while后面表達(dá)式的第一次的值為“真(非0)”時(shí),兩種循環(huán)結(jié)構(gòu)得到的結(jié)果相同,否則二者的結(jié)果不相同。While 與與 do while 循環(huán)結(jié)構(gòu)的比較循環(huán)結(jié)構(gòu)的比較5.4 for循環(huán)結(jié)構(gòu)v一般形式:for(
10、expr1 ; expr2 ; expr3) 循環(huán)體語(yǔ)句;v執(zhí)行流程:vfor(循環(huán)變量賦初值;循環(huán)條件;改變循環(huán)變量)表達(dá)式表達(dá)式1表達(dá)式表達(dá)式2循環(huán)體循環(huán)體表達(dá)式表達(dá)式3TFvfor語(yǔ)句一般應(yīng)用形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)循環(huán)體語(yǔ)句;v說(shuō)明:lfor語(yǔ)句中expr1, expr2 ,expr3 類型任意,都可省略,但分號(hào);不可省l無(wú)限循環(huán): for(;)lfor語(yǔ)句可以轉(zhuǎn)換成while結(jié)構(gòu)expr1;while(expr2)循環(huán)體語(yǔ)句;expr3;例 用for循環(huán)求 1001nn#include main() int i,sum=0; for(i=1;i=100;
11、i+) sum+=i; printf(%d,sum);例:#include main( ) int i=0; for(i=0;i10;i+) putchar(a+i); 運(yùn)行結(jié)果:abcdefghij例:#include main( ) int i=0; for(;i10;i+) putchar(a+i); 例:#include main( ) int i=0; for(;i10;) putchar(a+(i+); 例:#include main( ) int i=0; for(;i10;putchar(a+i),i+) ; 逗號(hào)運(yùn)算符的主要應(yīng)用在for語(yǔ)句中的表達(dá)式1或表達(dá)式3建議為了增強(qiáng)程
12、序的可讀性,盡量不省略for結(jié)構(gòu)中的表達(dá)式。main() int i,j,k; for(i=0,j=100;i=j;i+,j-) k=i+j; printf(%d+%d=%dn,i,j,k); #includemain() char c; for(;(c=getchar()!=n;) printf(%c ,c);#include main() int i,c; for(i=0;(c=getchar()!=n;i+=3)printf(%c ,i+c);main() int count,total=0,grade; for(count=1;count=10;count+) printf(input
13、 the grade:); scanf(%d,&grade); total=total+grade; printf(%dn,total);111098765432count10987654321次數(shù)次數(shù)每次循環(huán)后,控制變量的變化情況每次循環(huán)后,控制變量的變化情況【例】問(wèn)題1的解決方法3:采用for循環(huán)結(jié)構(gòu) 5.5 輔助控制語(yǔ)句break語(yǔ)句v功能:在循環(huán)語(yǔ)句和switch語(yǔ)句中,終止并跳出循環(huán)體或開(kāi)關(guān)體v說(shuō)明:lbreak只能終止并跳出最近一層的結(jié)構(gòu)lbreak不能用于循環(huán)語(yǔ)句和switch語(yǔ)句之外的任何其它語(yǔ)句之中exprbreak;假(0)真(非0)whiledobreak;.ex
14、pr假(0)真(非0)whileexpr2break;.假(0)真(非0)forexpr1expr3switchexpr語(yǔ)句組1break;語(yǔ)句組2break;語(yǔ)句組nbreak;語(yǔ)句組break;.const 1const 2const ndefaultcase 例 break舉例:輸出圓面積,面積大于100時(shí)停止#define PI 3.14159main() int r; float area; for(r=1;r100) break; printf(r=%d,area=%.2fn,r,area); 例 break舉例:小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母,直至輸入非字母字符#include main
15、() int i,j; char c; while(1) c=getchar(); if(c=a & c=z) putchar(c-a+A); else break; 例 判斷m是否素?cái)?shù)讀入mk=mi=2當(dāng)ikm被i整除真假用break結(jié)束循環(huán)i=i+1ik+1真假輸出:m”是素?cái)?shù)”輸出:m”不是素?cái)?shù)”#include #include main() int m,i,k; scanf(%d,&m); k=sqrt(m); for(i=2;i=k+1) printf(%d is a prime numbern,m); else printf(%d is not a prime n
16、umbern,m);continue語(yǔ)句v功能:結(jié)束本次循環(huán),跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句,進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷v僅用于循環(huán)語(yǔ)句中exprcontinue;假(0)真(非0)while真(非0)docontinue;.expr假(0)whileexpr2continue;.假(0)真(非0)forexpr1expr3例 求輸入的十個(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;num+;sum+=a; printf(%d
17、 plus integers sum :%6.0fn,num,sum); printf(Mean value:%6.2fn,sum/num);5.6 第第4-5章實(shí)例解析章實(shí)例解析【例】顯示輸入的字符, 如果按的是Esc鍵, 則退出循環(huán); 如果按的是Enter鍵, 則不做任何處理,繼續(xù)輸入下一個(gè)字符。#include “conio.h” main( ) char ch; for (; ;) ch=getch(); /*不帶回顯的字符輸入函數(shù) */ if (ch=27) /* Esc鍵的ACSII碼為27*/ break; /*退出循環(huán)*/ if (ch=13) continue; /*按的是E
18、nter:鍵,跳過(guò)字符輸出語(yǔ)句*/ putch(ch); /*顯示輸入的字符*/ getch( ); /*讓程序停一下,拍任意鍵繼續(xù),可以不要*/main()int a,b,c,d,t;printf(input a,b,c,d:n);scanf(%d,%d,%d,%d,&a,&b,&c,&d);if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(ad)t=a;a=d;d=t;if(bc)t=b;b=c;c=t;if(bd)t=b;b=d;d=t;if(c0) if (grademax) max=grade; if(grademin) m
19、in=grade; printf(input the next grade:); scanf(%d, &grade); printf(max=%d min=%dn,max,min);課堂任務(wù):課堂任務(wù):1.用用dowhile改寫(xiě)改寫(xiě)【源程序】/用dowhile改寫(xiě),并用了breakmain() int grade,max=-1,min=1000; /為何這樣取初值? do printf(input the next grade:); scanf(%d, &grade); if (grademax) max=grade; if (grademin) min=grade; whil
20、e(1); printf(max=%d min=%dn,max,min);main() int n; long t=1,sum=0;/注意累乘器及累加器的初值 for(n=1;n100;n+) t=t*n; if(n%2=0) continue; sum=sum+t; printf(sum=%ldn,sum);次數(shù)次數(shù)1239899t1!2!3!98!99!sum1!-+3!-+99!n23499100每次循環(huán)后,重要變量的變化情況【例】計(jì)算1!+ 3!+ 5!+ + 99!。 分析:該題實(shí)質(zhì)上是一個(gè)累加求和的問(wèn)題,而且已知其循環(huán)的次數(shù)因此可以用for語(yǔ)句來(lái)實(shí)現(xiàn);對(duì)于累加應(yīng)有選擇地進(jìn)行,即只對(duì)
21、奇數(shù)項(xiàng)求和,可以用if語(yǔ)句和continue語(yǔ)句組合來(lái)進(jìn)行選擇性地累加?!驹闯绦颉縨ain() int n=1;n while(n=10) if(n=6) continue; printf(%4d,n); n+; 請(qǐng)問(wèn)請(qǐng)問(wèn): 跳出循環(huán)時(shí)循環(huán)控制跳出循環(huán)時(shí)循環(huán)控制變量的值應(yīng)為多少?運(yùn)行變量的值應(yīng)為多少?運(yùn)行結(jié)果呢?該程序有何問(wèn)題?結(jié)果呢?該程序有何問(wèn)題?如果有該如何改正?如果有該如何改正?無(wú)限循環(huán)無(wú)限循環(huán);運(yùn)行結(jié)果:運(yùn)行結(jié)果:1 2 3 4 5555554321n987654321次數(shù)次數(shù)每次循環(huán)后,重要變量的變化情況每次循環(huán)后,重要變量的變化情況例例. 閱讀程序并回答問(wèn)題閱讀程序并回答問(wèn)題ma
22、in( ) long int I,s=0; for( I=10;I=150;I+) if(I%3=0|I%7=0) s=s+I*I; printf(“n%ld”,s);例. 10,150之間,能被3或7整除的數(shù)的平方和。 分析:用變量s求和,s初值為0。用變量I從10到150循環(huán),如果I能被3或7整除(I%3=0|I%7=0),則s=s+I*I00 01 02 03 04 0510 11 12 13 14 1520 21 22 23 24 2530 31 32 33 34 3540 41 42 43 44 4550 51 52 53 54 55請(qǐng)寫(xiě)出輸出結(jié)果:請(qǐng)寫(xiě)出輸出結(jié)果:例例 執(zhí)行語(yǔ)句段:
23、執(zhí)行語(yǔ)句段:for(i=0;i6;i+) for(j=0;j6;j+) printf(“%3d%d”,i,j); putchar(n);外循環(huán)外循環(huán)內(nèi)循環(huán)內(nèi)循環(huán)算法:從i= 3 開(kāi)始做分別用2,3,4,i 除i,(可參考數(shù)論知識(shí))如果i被某個(gè)數(shù)整除 , i是合數(shù)。i+; 測(cè)試下一個(gè)i;例 編程求出3至1000內(nèi)的全部的質(zhì)數(shù)。#include main( ) int i, j ,count=0,flag; /* 用flag作標(biāo)志 */for(i=3; i=1000; i+)flag = 0; /* 設(shè)標(biāo)志為0 */ for(j=2; j=sqrt(i); j+) if (i % j = =0)
24、/* 測(cè)試 j 能夠整數(shù) i*/ flag = 1;break /* 能,則不是素?cái)?shù),標(biāo)志為1 */ /* i 測(cè)試完畢 */ if(flag = = 0) /* i是素?cái)?shù),則輸出 */ printf(“%4d, ”, i ); count+; if (count % 8 = = 0) printf(“n” ); /*每行輸出8個(gè)*/ /* 測(cè)試下一個(gè) i */main( ) long int f1=1,f2=1,f3,n; for( n=3;n=1;a-) s=0; for(I=1;Ia;I+) if(a%I=0) s=s+I; if(a=s) break; printf(“n%d”,a);例:求 1/99+2/98+1main( ) float s=0.0; int i,j; for(i=1,j=99; i=j; i+,j- -) s = s + (float)i/j; printf(“result is:%f”,s);次數(shù)次數(shù)1234 48
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 全球?qū)櫸锸袌?chǎng)洞察之泰國(guó)篇:本土與出口市場(chǎng)雙擴(kuò)張中國(guó)品牌布局正啟航402mb
- 彌漫性食管痙攣的臨床護(hù)理
- 2025年門(mén)診部年度工作總結(jié)模版
- 角弓反張的臨床護(hù)理
- 暑期招生美術(shù)培訓(xùn)方案大綱
- 圓錐曲線公式總結(jié)模版
- 高血壓防治與管理要點(diǎn)
- 四川省成都市溫江區(qū)第二區(qū)2025年數(shù)學(xué)七下期末質(zhì)量跟蹤監(jiān)視模擬試題含解析
- 護(hù)膚培訓(xùn)年終工作總結(jié)與展望
- 抗菌藥物培訓(xùn)考核試題及答案
- MT 181-1988煤礦井下用塑料管安全性能檢驗(yàn)規(guī)范
- GB/T 193-2003普通螺紋直徑與螺距系列
- 因納特工商管理綜合實(shí)訓(xùn)軟件V4.00
- 四議兩公開(kāi)工作法課件
- 國(guó)有企業(yè)干部選拔任用條例
- 2022年保山數(shù)字產(chǎn)業(yè)發(fā)展有限責(zé)任公司招聘筆試題庫(kù)及答案解析
- 通用造價(jià)35kV~750kV線路(國(guó)網(wǎng))課件
- Unit 1 Lesson 1 Lifestyles 課件 高中英語(yǔ)新北師大版必修第一冊(cè)(2022-2023學(xué)年)
- 村級(jí)組織權(quán)力清單、責(zé)任清單和負(fù)面清單x
- DB33∕T 715-2018 公路泡沫瀝青冷再生路面設(shè)計(jì)與施工技術(shù)規(guī)范
- 高一化學(xué)第二學(xué)期期末考試試題
評(píng)論
0/150
提交評(píng)論