




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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),問(wèn)題的提出:對(duì)于這樣的一類(lèi)問(wèn)題: 問(wèn)題1. 從鍵盤(pán)輸入10個(gè)學(xué)生的成績(jī),求總成績(jī)。 問(wèn)題2. 求100以?xún)?nèi)的素?cái)?shù) 問(wèn)題3. 求20!,用前面所學(xué)知識(shí)來(lái)解決這些問(wèn)題是非常麻煩的 對(duì)問(wèn)題1的一種辦法:設(shè)一個(gè)變量,每次輸入一個(gè)學(xué)生成績(jī),累加后再輸入下一個(gè)學(xué)生成績(jī),如下: scanf(“%f”, . 這樣重復(fù)10次,然后輸出s的值。,循環(huán)結(jié)構(gòu) 特點(diǎn): 在給定條件(循環(huán)條件)成立時(shí),反復(fù)執(zhí)行某程序段(又稱(chēng)循環(huán)體),直到條件不成立為止。,5.1 循環(huán)結(jié)構(gòu) 概述 C語(yǔ)言可實(shí)現(xiàn)循環(huán)的語(yǔ)句: while 語(yǔ)句 do while 語(yǔ)句 for 語(yǔ)句,標(biāo)號(hào):語(yǔ)句; . goto 語(yǔ)句標(biāo)號(hào);,5.1
2、 while循環(huán)結(jié)構(gòu) 一般形式:,while(表達(dá)式) 循環(huán)體語(yǔ)句;,執(zhí)行流程:,特點(diǎn):先判斷表達(dá)式,后執(zhí)行循環(huán)體 說(shuō)明: 循環(huán)體有可能一次也不執(zhí)行 循環(huán)體可為任意類(lèi)型語(yǔ)句 下列情況,退出while循環(huán) 條件表達(dá)式不成立(為零) 循環(huán)體內(nèi)遇break,return,goto 無(wú)限循環(huán): while(1) 循環(huán)體;,例 用while循環(huán)求,/*ch5_2.c*/ #include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum); ,應(yīng)注意: 1、計(jì)數(shù)器和累加器的初值; 2、一次循環(huán)后,循環(huán)控制變量的變化情況。
3、 3、跳出循環(huán)時(shí)循環(huán)控制變量的值應(yīng)為多少?,例 顯示110的平方,#include main() int i=1; while(i=10) printf(%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,注意:循環(huán)控制變量值在循環(huán)體內(nèi)必須有所改變。,例如:請(qǐng)問(wèn)下例中循環(huán)結(jié)束時(shí)i值為多少? i=1; while (i=100) putchar(*); i+;,這個(gè)循環(huán)永遠(yuǎn)不會(huì)結(jié)束,因?yàn)檠h(huán)控制變量i沒(méi)有在循環(huán)體內(nèi)被改變,i+; 不屬于循環(huán)語(yǔ)句。,
4、i+應(yīng)該在循環(huán)體內(nèi)改變:, ,do 循環(huán)體語(yǔ)句; while(表達(dá)式);,執(zhí)行流程:,5.2 dowhile循環(huán)結(jié)構(gòu) 一般形式:,特點(diǎn):先執(zhí)行循環(huán)體,后判斷表達(dá)式 說(shuō)明: 至少執(zhí)行一次循環(huán)體 dowhile可轉(zhuǎn)化成while結(jié)構(gòu),例 用dowhile循環(huán)求,#include main() int i,sum=0; i=1; do sum+=i; i+; while(i=100); printf(%d,sum); ,例 while和dowhile比較,/*ch5_4.c*/ #include main() int i=1, grade,sum=0; do printf(“input grade:
5、”); scanf(%d, ,#include main() int i=1,sum=0,grade; while(i=10) printf(“input grade:”); scanf(%d, ,輸入10個(gè)成績(jī),求總成績(jī),一般形式:,for(循環(huán)變量賦初值;終止條件;循環(huán)變量增(減)值) 循環(huán)體語(yǔ)句; ,for (表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語(yǔ)句; ,5.3 for循環(huán)結(jié)構(gòu),執(zhí)行流程:,說(shuō)明: for語(yǔ)句中expr1, expr2 ,expr3 類(lèi)型任意,都可省略,但分號(hào);不可省 無(wú)限循環(huán): for(;) for語(yǔ)句可以轉(zhuǎn)換成while結(jié)構(gòu),expr1; while(expr2)
6、循環(huán)體語(yǔ)句; expr3; ,例:#include main( ) int i; for(i=0;i10;i+) putchar(a+i); ,輸出結(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)表達(dá)式,逗號(hào)運(yùn)算符的主要應(yīng)用就在for語(yǔ)句中。 for語(yǔ)句中的表達(dá)式1和表達(dá)式3可
7、以是逗號(hào)表達(dá)式,特別是有兩個(gè)循環(huán)變量參與對(duì)循環(huán)的控制時(shí)。表達(dá)式1和表達(dá)式3為逗號(hào)表達(dá)式,將使程序顯得非常清晰。,main() int i,j,k=0; for(i=1,j=100;ij;i+,j-) k=k+i+j; printf(%dn,k); ,例 雙循環(huán)變量求,5.5 循環(huán)結(jié)構(gòu)的嵌套,外循環(huán): 內(nèi)循環(huán):,循環(huán)的嵌套 三種循環(huán)可互相嵌套,層數(shù)不限 外層循環(huán)可包含兩個(gè)以上內(nèi)循環(huán),但不能相互交叉 嵌套循環(huán)的執(zhí)行流程,(1) while() while() . ,(2) do do while( ); . while( );,(3) while() do while( ); . ,(4) for
8、( ; ;) do while(); while() . ,嵌套循環(huán)的跳轉(zhuǎn) 禁止: 從外層跳入內(nèi)層 跳入同層的另一循環(huán) 向上跳轉(zhuǎn),編寫(xiě)程序輸出如下圖形。* * * * * * * * * * * *,#include main() int i, j; for(i=1; i=5; i+) for(j=1; j=i; j+) printf(*); printf(n); ,例 判斷m是否素?cái)?shù),#include #include main() int m,i,k; scanf(%d, ,例 求300360之間素?cái)?shù)的個(gè)數(shù),#include #include main() int m,n,i,j,k; n
9、=0; for(m=301;m360;m+) k=(int)sqrt(m); i=2; while(m%i!=0 ,5.5 輔助控制語(yǔ)句 break語(yǔ)句 功能:在循環(huán)語(yǔ)句和switch語(yǔ)句中,常和if語(yǔ)句一起使用,當(dāng)滿(mǎn)足條件時(shí)終止程序并跳出循環(huán)體或開(kāi)關(guān)體 說(shuō)明: break只能終止并跳出最近一層的結(jié)構(gòu) break不能用于循環(huán)語(yǔ)句和switch語(yǔ)句之外的任何其它語(yǔ)句之中,例 break舉例:輸出之間的數(shù), 當(dāng)數(shù)為時(shí)停止輸出,main() int n; for(n=1;n=10;n+) if(n=6) break; printf(%4d,n); ,例 小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母,直至輸入非字母字符,#
10、include main() char c; while(1) c=getchar(); if(c=a ,continue語(yǔ)句 功能:跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句,結(jié)束本次循環(huán),進(jìn)行下一次循環(huán)體。 僅用于循環(huán)語(yǔ)句中,舉例:輸出之間的數(shù),當(dāng)數(shù)為時(shí)不輸出,main() int n; for(n=1;n=10;n+) if(n=6) continue; printf(%4d,n); ,例 判斷m是否素?cái)?shù),#include #include main() int m,i,k; scanf(%d, ,例 求300360之間素?cái)?shù)的個(gè)數(shù),#include #include main() int m,n,i,j
11、,k; n=0; for(m=301;m360;m+) k=(int)sqrt(m); i=2; while(m%i!=0 ,例 求300360,600-680之間素?cái)?shù)的個(gè)數(shù),#include #include main() int m,n,i,k; n=0; for(m=301;m360 ,例 求輸入的十個(gè)整數(shù)中正數(shù)的個(gè)數(shù)及其平均值,#include main() int i,num=0,a; float sum=0; for(i=0;i10;i+) scanf(%d, ,5.6 第5章實(shí)例解析,4 輸入三個(gè)實(shí)數(shù),判斷是否能構(gòu)成三角形,如能,說(shuō)明是何種三角形,等邊,等腰,直角,#includ
12、e main() double d,x,y,z ; scanf(%lf,%lf,%lf, if(x+y=z|z+y=x|x+z=y|x=0|y=0|z=0) printf(“不能構(gòu)成三角形”); else if(x=y scanf(%f%f%f, ,輸入:a=1,b=3,c=2 輸出:x1=-1.00 x2=-2.00,每次循環(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ì)奇數(shù)項(xiàng)求和,可以用if語(yǔ)句和continue語(yǔ)句組合來(lái)進(jìn)行選擇性地累加。,#inc
13、lude 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); ,#include main( ) long sum=0,x,y,r,t=1; printf(input the x:); scanf(%ld, ,例.輸入一個(gè)二進(jìn)制數(shù),輸出其對(duì)應(yīng)的十進(jìn)制數(shù),main( ) int i=1,n; float t,x=1,y=2,m,sum=0; while(i=30) m=y/x; sum=sum+m; t=y;
14、y=y+x; x=t; i+; printf(“n%ld”,sum); ,例.P82 2/1,3/2,5/3,8/5,/21/13.求該數(shù)列的前30項(xiàng)之和,例 (f0r)梯形法求數(shù)值積分,0,y,x,a,a+h,a+ih,a+(i+1)h,b,f(x),#include #include main() float a=0,b=3.14159,s,h,f=0; int i,n; scanf(%d, ,#include #define pi 3.14 main() float a=0,b=pi,s,h; int n,i; printf(Input n:); scanf(%d, ,循環(huán)舉例:1.顯示
15、輸入的字符, 如果按的是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; /*按的是Enter:鍵,跳過(guò)字符輸出語(yǔ)句*/ putch(ch); /*顯示輸入的字符*/ ,例 求Fibonacci數(shù)列:1,1,2,3,5,8 ,的前40個(gè)數(shù)保存在一維數(shù)組中,main( ) l
16、ong int f1, f2 ; int i ; f1=1 ; f2=1 ; for( i=1; i20 ; i+ ) printf(“%12ld%12ld” ,f1, f2 ) ; if( i%2=0) printf( “n” ) ; f1 = f1 + f2 ; f2 = f2 + f1 ; ,循環(huán)嵌套舉例,循環(huán)嵌套舉例,問(wèn)題:輸出圖形 * * * *,分析: 一共4行, 每行的 *數(shù)目與行號(hào)相同 算法: 行用 i 表示 , 當(dāng) i =4 do 輸出 i 個(gè) * 換行 ,Main() int i,j; for ( i=1; i5; i+) printf(n); for (j=1; j=i;
17、 j+ ) putchar(*); ,例.求1000以?xún)?nèi)最大的完數(shù)。完數(shù)就是其真因子的和等于其本身的數(shù)。 分析:用變量a從1000到1循環(huán),如果a等于其真因子的和,則循環(huán)結(jié)束。判斷a是否等于其真因子的和:用變量s求a的真因子的和,s初值為0,用變量I從1到a-1循環(huán),如果a%I=0,則s=s+i。得出s值后,若a=s,則a為所求。,main( ) int a,i,s; for(a=1000;a=1;a-) s=0; for(i=1;ia;i+) if(a%i=0) s=s+i; if(a=s) break; printf(“n%d”,a); ,打印3至1000之間的全部素?cái)?shù),并求所有素?cái)?shù)的個(gè)數(shù)。,5.7 本章小結(jié),本章重點(diǎn)介紹了C語(yǔ)言的三種循環(huán)結(jié)構(gòu):while、do-while、for循環(huán)結(jié)構(gòu)。在處理同一問(wèn)題時(shí),一般情況下三者可以互相替換。三種循環(huán)結(jié)構(gòu)還可以互相嵌套,即構(gòu)成多層循環(huán)。對(duì)于while和do-while循環(huán)結(jié)構(gòu),循環(huán)控制變量初始化的操作應(yīng)在while和do-while語(yǔ)句之前完成,只在while后面指定循環(huán)條件,切記在循環(huán)體內(nèi)要包含使循環(huán)趨于結(jié)束的語(yǔ)句;for循環(huán)結(jié)構(gòu)可以在表達(dá)式1中初始化循環(huán)控制變量,表達(dá)式2指定循環(huán)條件,表達(dá)式3中包含使循環(huán)趨于結(jié)束的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 金華金開(kāi)招商招才服務(wù)集團(tuán)有限公司招聘勞動(dòng)合同制工作人員筆試筆試歷年參考題庫(kù)附帶答案詳解
- 2025浙江寧波杭州灣新區(qū)開(kāi)發(fā)建設(shè)有限公司公開(kāi)招聘8人筆試歷年參考題庫(kù)附帶答案詳解
- 廣東省湛江市徐聞縣2024~2025學(xué)年七年級(jí)下學(xué)期期末生物試題(含答案)
- 經(jīng)濟(jì)法基礎(chǔ)考點(diǎn)試題及答案
- 核醫(yī)學(xué)教學(xué)課件
- 2021-2026年中國(guó)孕婦食品行業(yè)市場(chǎng)全景調(diào)研及投資規(guī)劃建議報(bào)告
- 2025年鉆孔應(yīng)變儀項(xiàng)目申請(qǐng)報(bào)告
- 2025年離心鑄造設(shè)備市場(chǎng)分析現(xiàn)狀
- 乙炔重大危險(xiǎn)源評(píng)估報(bào)告
- 2025年存包柜項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 2025年公路養(yǎng)護(hù)工人職業(yè)技術(shù)知識(shí)考試題與答案
- 陽(yáng)光房制作安裝合同協(xié)議書(shū)范本8篇
- 2025年供應(yīng)鏈管理與優(yōu)化專(zhuān)業(yè)考試試題及答案
- 租借醫(yī)生執(zhí)業(yè)證合同協(xié)議
- GB/T 45449-2025再生粉末高溫合金原料
- 工程投資人合同協(xié)議
- 包席合同協(xié)議
- 資產(chǎn)評(píng)估風(fēng)險(xiǎn)管理制度
- 眼視光創(chuàng)業(yè)計(jì)劃書(shū)
- 大學(xué)英語(yǔ)四六級(jí)詞匯表
- 呼吸訓(xùn)練康復(fù)課件
評(píng)論
0/150
提交評(píng)論