南昌工程學(xué)院C語言程序設(shè)計基礎(chǔ)課件第5講循環(huán)結(jié)構(gòu).ppt
《南昌工程學(xué)院C語言程序設(shè)計基礎(chǔ)課件第5講循環(huán)結(jié)構(gòu).ppt》由會員分享,可在線閱讀,更多相關(guān)《南昌工程學(xué)院C語言程序設(shè)計基礎(chǔ)課件第5講循環(huán)結(jié)構(gòu).ppt(58頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第四章 循環(huán)結(jié)構(gòu),在人們所需處理的運(yùn)算任務(wù)中,常常需要用到循環(huán)結(jié)構(gòu),所謂 循環(huán)是指對同一個程序段重復(fù)執(zhí)行若干次。被重復(fù)執(zhí)行的部分 (由若干語句組成)稱為循環(huán)體。循環(huán)結(jié)構(gòu)又稱重復(fù)結(jié)構(gòu)。,本章主要內(nèi)容 1 while 循環(huán)語句 2 do~while 循環(huán)語句 3 for 循環(huán)語句 4 循環(huán)嵌套及注意的問題,問題,輸出整數(shù)1-10,輸出整數(shù)1-100,輸出整數(shù)1-n,printf(“%d”,1); printf(“%d”,2); …… printf(“%d”,n);,i=1; printf(“%d”,i);i++; printf(“%d”,i); i++; …… printf(“%d”,i); i++;,i=1; while(i=10) { printf(“%d”,i); i++; },while 語句,語法:while(表達(dá)式) {循環(huán)體} 說明 (1)while是關(guān)鍵字。 (2)循環(huán)體是多條語句,用{}。,非0,while(表達(dá)式),表達(dá)式,循環(huán)體,,,,,,,0,,,,while 語句,非0,while(表達(dá)式),表達(dá)式,循環(huán)體,,,,,,,0,,i=1; while(i=10); { printf(“%d”,i); i++; },,循環(huán)條件,,,改變循環(huán)條件,思考:如果沒有i++,程序如何執(zhí)行?,10 求sum=∑i i=1,sum=0 sum?sum+1 sum ? sum+2 sum ? sum+3 … sum ? sum+10 sum=sum+?,1找循環(huán)不變式,2考慮問號,3循環(huán)條件,int sum=0,i=1; while(i=10) { sum=sum+i; i++; },例1 main() { int i=0; while(i=10) { printf(“*”); i++;} },例2 main() { int i=1,sum=0; while(i=100) { sum=sum+i; i++;} printf(“sum=%d”,sum); },例3一個班有學(xué)生50人,統(tǒng)計該班學(xué)生語文成績中高于80分的人數(shù) 。把統(tǒng)計結(jié)果在屏幕上輸出。,int m=1,n=0; float x; while(m=80) n++; /* 累加大于80 分的人數(shù)*/ m++; } printf(“大于80分的學(xué)生人數(shù)為%d個\n“,n);,分析:成績要通過鍵盤輸入,設(shè)為x,高于80分的人數(shù)為n,總?cè)藬?shù)為m。,從鍵盤輸入5個學(xué)生的語文、數(shù)學(xué)、英語3門成績,輸出每個學(xué)生的總分與平均成績。,從鍵盤輸入5個學(xué)生的語文、數(shù)學(xué)、英語3門成績,輸出每個學(xué)生的總分與平均成績。,int j=1; float a,b,c,sum,aver; while(j=5) { printf(“輸入第 %d 個學(xué)生三門成績\n”,j); scanf(“%f%f%f“, },1如何確定循環(huán)條件? 題目中有明確的提示!從鍵盤輸入5個學(xué)生的 2 如何確定循環(huán)體?重復(fù)執(zhí)行的語句! 從鍵盤輸入5個學(xué)生的語文、數(shù)學(xué)、英語3門成績,輸出每個學(xué)生的總分與平均成績。 等價于: (1)輸入1個學(xué)生的語文、數(shù)學(xué)、英語3門成績; (2)計算總分與平均分 (3)輸出總分與平均成績。,#include main() { int n,i=1,sum=1; printf(“please input n\n”) scanf(“%d”, },例4 以下程序從鍵盤輸入5,結(jié)果是多少?,do-while語句,語法: do{ 循環(huán)體 } while(表達(dá)式);,注意: 1先執(zhí)行循環(huán)體,再判斷循環(huán)條件,循環(huán)至少執(zhí)行一次。 2while()后的分號不能省略。,非0,while(表達(dá)式),循環(huán)體,,,,,0,,,,i=1; while(i=10) { printf(“%d”,i); i++; },do,while(i=10);,,例1: main() { int i=1; do { printf(“ * ”); i++; } while(i=10); },例2: main() { int i=1,s=0; do { s=s+i; i+=2; } while(i=100); printf(“s=%d”,s); },統(tǒng)計某班級中計算機(jī)課程中成績高于95分的學(xué)生人數(shù)。假定(10人),1 算法分析,將該班每人計算機(jī)課程成績輸入計算機(jī),每輸入一個成績,就與95進(jìn)行比較,如果大于95,計數(shù)器加1,直到輸完10個人成績?yōu)橹?。最后顯示出統(tǒng)計的人數(shù)。,2 數(shù)據(jù)結(jié)構(gòu),用fs存放輸入的數(shù)據(jù),用變量j記錄輸入數(shù)據(jù)的個數(shù),數(shù)據(jù)輸完成時j=10,用變i統(tǒng)計高于95分學(xué)生的人數(shù)。當(dāng)成績輸完后,輸出i 累加后的結(jié)果。,int i=0,j=1; float fs; while( j95) i++; j++; } printf( “95分人為%d“,i);,int i=0,j=1; float fs; do { printf(“輸入第 %d 個數(shù)”,j) scanf(“%f“,,while和do-while,while(表達(dá)式) {循環(huán)體},do {循環(huán)體} while(表達(dá)式) ;,非0,while(表達(dá)式),表達(dá)式,循環(huán)體,,,,,,0,,,,非0,while(表達(dá)式),循環(huán)體,,,,0,,,,,先判斷,后循環(huán),先循環(huán),后判斷,一般情況 兩者差不多-進(jìn)入循環(huán)結(jié)構(gòu)執(zhí)行若干次后結(jié)束循環(huán); 極端情況 (1)死循環(huán) (2) 無法進(jìn)入循環(huán) i=100,while(i10),for 循環(huán)語句(功能強(qiáng)),語法: for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3) { 循環(huán)體 },執(zhí)行過程:,1 先運(yùn)算表達(dá)式1,2 再運(yùn)算表達(dá)式2,真執(zhí)行循環(huán)體,3 再運(yùn)算表達(dá)式3,判斷循環(huán)條件,表達(dá)式1,循環(huán)體,表達(dá)式3,表達(dá)式2,,,,T,F,,,,,,若表達(dá)式2為假不執(zhí)行循環(huán)體,注意: (1)表達(dá)式1在不在循環(huán)里?執(zhí)行幾次? (2)先做循環(huán),再運(yùn)算表達(dá)式3! 若表達(dá)式2為假,表達(dá)式3如何運(yùn)算? (3)循環(huán)體包含那些?,,,while和for,表達(dá)式1,循環(huán)體,表達(dá)式3,表達(dá)式2,,,,T,F,,,,,,,for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3) { 循環(huán)體 },while(表達(dá)式) {循環(huán)體},非0,while(表達(dá)式),表達(dá)式,循環(huán)體,,,,0,,,,,如何用while寫for結(jié)構(gòu)?,while( ?) { ?},表達(dá)式1; while( 表達(dá)式2) { 循環(huán)體; 表達(dá)式3; },,結(jié)論:for語句書寫結(jié)構(gòu)更清晰,while 語句,while(表達(dá)式) {循環(huán)體},do~while 語句,do { 循環(huán)體 } while(表達(dá)式);,for 循環(huán)語句,for(表達(dá)式1;表達(dá)式2;表達(dá)式3) { 循環(huán)體},1.三種循環(huán)可用來處理同一問題,一般情況可互相代替 2.do while語句至少執(zhí)行一次循環(huán)。 3.while 與for可能一次也不執(zhí)行。,幾種循環(huán)的比較,for(表達(dá)式1; 表達(dá)式2;表達(dá)式3) { 循 環(huán) 體 },控制循環(huán)是否結(jié)束,改變循環(huán)條件,二、說明: 1、表達(dá)式1可以是逗號表達(dá)式,可省略,但其后的分號不能省; 2、表達(dá)式2也可省略,此時循環(huán)為無窮循環(huán); 3、表達(dá)式3也可省略。,sum=0; for(i=1;i=10;i++) sum=sum+i;,int sum=0,i=1; while(i=10) { sum=sum+i; i++; },sum=0; for(i=1;i=10;i++) { sum=sum+i; i++;}結(jié)果是什么?,例 4.5 統(tǒng)計某班級中計算機(jī)課程中考試成績高于80 分的人數(shù)(10人),用for 循環(huán)語句寫該程序。,int fs, j,i=0; for (j=1; j80) i++; } printf(“i=%d\n“,i);,例2:說明以下循環(huán)語句的循環(huán)次數(shù)。 for (i=0; i=0; i--); 答: (3) i=1; while (ij;i++,j--); 答:,n-1次,n+1次,n-1次,1次,0次,0次,1求數(shù)列 s=1+2+3…………. n,程序段: s=0; for(i=1;1=n;i++) s=s+i;,算法: 循環(huán)的條件:i=n 重復(fù)做的:s=s+t;t++(加法運(yùn)算) 循環(huán)的控制:i++等價t++,2求數(shù)列 s=1+1/2+1/3………….1/n,程序段: s=0; for(i=1;i=n;i++) s=s+1.0/i;,算法: 循環(huán)的條件:i=n 重復(fù)做的:s=s+t (t是什么?) 循環(huán)的控制:i++,t=1.0/i,s=s+1.0/i,int i,n; float s=0; printf(“please input n:“); scanf(“%d”,,練習(xí):求數(shù)列 s=1/12+1/22+1/32….1/n2的和,int n, i; float s; printf(“ input n:“); scanf(“%d”,,3求數(shù)列 s=1-1/2+1/3-1/4………….1/n,程序段: s=0;m=1 for(i=1;i=n;i++) { s=s+1.0/i*m; m=-m; },練習(xí) 求數(shù)列 s=1-1/3+1/5-1/7+1/9…1/(2n-1)的和,int n,i=1,m=1; float s=0; printf(“input n:“); scanf(“%d”,,分析:找出通項s=s+1.0/(2*i-1),{ s+=pow(-1,i+1)/(2*i-1));,4求數(shù)列 s=1-1/3+1/5…直到最后一項的絕對值<10-5,int i=1,m=1; float s=0,t=1; while (fabs(t)>=1E-5) {t=1.0/(2*i-1); s=s+m*t; m=-m; i++;} printf(“s=%f”,s);,練習(xí):求,的近似值,精確到,公式為:,1 算法分析,,=sqrt(s*6),double s=0; int i; for(i=1; 1.0/(i*i)=1e-10;i++) s=s+1.0/(i*i); printf(“%f\n“, sqrt(s*6));,程序,int i; float sum=0; for(i=0;i=100;i++) sum=sum+1.0/(1+i*5); printf(“%f“,sum);,6:下面程序是統(tǒng)計從鍵盤輸入的數(shù)字字符1-9的個數(shù),用換行結(jié)束循環(huán),請?zhí)羁铡? int n=0; char c; c=getchar(); while(1) { if(2) n++; c=getchar(); } printf(“n=%d”,n);,c!=‘\n’,c=‘1’&&c=‘9’,計算并輸出n(包括n)以內(nèi)能被5或9整除的所有自然數(shù)的倒數(shù)之和。,long int i,n,t=1; printf(“please input n:”); scanf(“%d”,,7 求 n!,long int i,n,t=1,s=0; printf(“please input n:”); scanf(“%d”,,練習(xí): s=1!+3! +5!,long int i,n,x,t=1; printf(“please input x and n:“); scanf(“%d%d“,,8 求 xn,計算并輸出給定整數(shù)n的所有因子(不包括1與自身)之和。規(guī)定n的值不大于1000。,break 和 continue 語句,int n=1,s=0; while(n=10) { s=s+n; break; n++; } printf(“%d”,s);,break使流程跳出本層循環(huán)體 continue跳過本次循環(huán)中余尚未執(zhí)行的語句,接著去執(zhí)行下一個循環(huán),int s=0,n=1; while(n20) { n++; continue; s=s+n; } printf(“%d”,s); },,退出循環(huán)體,,跳過循環(huán)體中未執(zhí)行的語句,break 和 continue 語句,例1 以下程序輸出結(jié)果 int s=0,n=1; while(n=10) { if(n==4) break; s=s+n; n++; } printf(“%d”,s);,例2 以下程序輸出結(jié)果 int n=1; while(n3) continue; n++; } printf(“%d”,n);,6 死循環(huán),無輸出!,int n=2; while(n10) { if(n3) continue; if(n= =5) break; n++; } printf(“%d”,n);,A 10 B 9 C 5 D 死循環(huán),int a=1,b=1; while(a=9) break; if(b%3==1) b+=3; a++; } printf(“%d”,a);,A2 B3 C4 D5,輸入m,判斷m是否是素數(shù),算法:除了1和m,不能被其他數(shù)整除 m %2 %3 %4 %%(m-1) 不是素數(shù) || =0 =0 =0 …… =0 是素數(shù) && !=0 !=0 !=0 …… !=0,程序: for(i=2;im;i++) if(m%i==0) break; if(i==m) printf(“是素數(shù)”); else printf(“不是素數(shù)”);,循環(huán)的嵌套 循環(huán)體內(nèi)再包含循環(huán)語句,,while(表達(dá)式) { 循環(huán)體 },內(nèi)循環(huán),注意 外循環(huán)條件滿足時進(jìn)入內(nèi)循環(huán); 只有當(dāng)內(nèi)循環(huán)循環(huán)完畢后,才會回到外循環(huán).,while(表達(dá)式) { 循環(huán)體 },程序,,int i; for(i=1;i=10;i++) printf(“*”);,輸出:**********,********** ********** ********** ********** ********** ********** ********** ********** ********** **********,如要輸出如下圖形:,* ** *** **** ***** ****** ******* ******** ********* **********,********** ********* ******** ******* ****** ***** **** *** ** *,* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *,計算并輸出3到n(大于2)之間所有素數(shù)的平方根之和,int n,m,k i; double s=0.0; scanf(“%d”,,#include main() { int t=0,n=1,s=0; while(n=7)) { _1_; s=s+_2_; n++; } printf(“s=%d\n”,s); },t=t*10+3,t,或t=1/3*(pow(10,n)-1),計算3+33+333+3333…3333333(7個3)的和,請?zhí)羁铡?習(xí)題4 計算:1+22+333+4444+……前7項(p87),int t=0,n=1,s=0; while(n=7)) { t=n*((pow(10,n)-1)/9); s=s+t; n++; },習(xí)題5 計算:1+12+123+1234+……前7項,下面程序的功能是完成用一元人民幣換成一分、兩分五分的所有兌換方案,請?zhí)羁铡?int i1,i2,i5; for(i5=0;i5=20;i5++) {for(i2=0;i2=50;i2++) { i1=—1—; if(—2—) printf(“%d%d%d”,i5,i2,i1);}} },100-i5*5-i2*2;,i1=0,下面程序是從三個紅球、五個白球、六個黑球取出八個球,且中必須有白球,輸出所有可能的方案。請?zhí)羁铡?int i,j,k,sum=0; for(i=0;i=3;i++) {for(—1—;j=5;j++) { k=8-i-j; if(—2—) {sum++; printf(“%d%d%d\n”,i,j,k);} }} printf(“%d”,sum);,j=1,k=0&&k=6,int n,a,b,c; for(n=100;n=999;n++) { a=n/100; b=n/10%10; c=n%10; if(a*a*a+b*b*b+c*c*c==n) printf(“%d”,n); },6.請找出這樣一些三位數(shù)整數(shù),其本身恰好等于其各位數(shù)的立方和,如153=13+53+33,下面程序是求1000以內(nèi)的完全數(shù)(一個數(shù)如果恰好 等于它的因子之和,則稱該數(shù)為完全數(shù),如:6=1+2+3, 再如:28=1+2+4+7+14)。,int a,i,m; for(a=1;a=1000;a++) { for (—1—;i=a/2;i++) if(a%i==0) —2—; if(m==a) printf(“%d\n”,a); },m=0,i=1,m=m+i,搜索(窮舉求解) 中國剩余定理:“有物不知幾何,三三數(shù)余一,五五數(shù)余二,七七數(shù)余三,問:物有幾何?”。編程求1000以內(nèi)所有解。,int m,count=0; for(m=1;m=1000;m++) if(m%3==1 },例3:“雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一,百錢買百雞,問翁母雛各幾何?” (引自張邱建算經(jīng),公元五世紀(jì)) 分析:設(shè)x,y,z分別表示雞翁,雞母,雞雛的數(shù)目,則有 x: 0~20 y: 0~33 z: 0~300,,x+y+z=100,5x+3y+z/3=100,上述方程屬于不定方程,解并不唯一,因此,只能用搜索法對x,y,z的所有組合情況,測試滿足條件的解。,int x,y,z; printf(“ Cock Hen chicken\n”); for(x=0;x=0 },搜索求解練習(xí) 有30個男.女.小孩同在一家小飯館進(jìn)餐,共花了50先令,其中每位男賓3先令,每位女賓2先令,每位小孩1先令,問男.女.小孩各多少?(馬克思數(shù)學(xué)手稿),int i,j,k; for(i=0;i=0 },#include main() { int i,j,k; for (i=1;i=28;i++) for(j=1;j=28;j++) for(k=1;k=28;k++) if(3*i+2*j+k==50 },- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 南昌 工程學(xué)院 語言程序設(shè)計 基礎(chǔ) 課件 循環(huán) 結(jié)構(gòu)
鏈接地址:http://m.jqnhouse.com/p-2023358.html