版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、本章要求:,掌握循環(huán)控制語句for語句、while語句、dowhile語句以及他們的嵌套應(yīng)用; 掌握break語句、continue語句的應(yīng)用; 熟練掌握計數(shù)、累加、累乘等簡單算法 熟練掌握窮舉法、迭代法,第6章 循環(huán)控制,循環(huán)結(jié)構(gòu)的特點: 在給定條件成立時,反復(fù)執(zhí)行某程序段, 直到條件不成立為止。 注意兩個概念: 1、給定的條件稱為循環(huán)條件 2、反復(fù)執(zhí)行的程序段稱為循環(huán)體 在C語言中,實現(xiàn)循環(huán)結(jié)構(gòu)的語句主要有3種: for語句 while doWhile,第6章 循環(huán)控制,循環(huán)結(jié)構(gòu),引例:輸入10個數(shù),打印輸出其中最大的數(shù)。 算法設(shè)計如下:,(1)輸入1個數(shù),存入變量A中,將記錄數(shù)據(jù)個數(shù)的變
2、量N賦值為1,即N=1 (2)將A存入表示最大值的變量Max中,即Max=A (3)再輸入一個值給A,如果AMax 則 Max=A, 否則Max不變 (4)讓記錄數(shù)據(jù)個數(shù)的變量增加1,即N=N+1 (5)判斷N是否小于10,若成立則轉(zhuǎn)到第(3)步執(zhí)行,否則轉(zhuǎn)到第(6)步。 (6)打印輸出max,從10個數(shù)中選出最大的數(shù)的流程圖,循環(huán)結(jié)構(gòu),執(zhí)行過程:計算表達(dá)式的值,當(dāng)值為真(非0)時, 執(zhí)行循環(huán)體語句。,while(表達(dá)式) 語句; 表達(dá)式是循環(huán)條件,語句為循環(huán)體,表達(dá)式,語句,非0,0,6.3 while語句,從10個數(shù)中選出最大的數(shù),void main() int a,max,n=1; sc
3、anf(%d, ,循環(huán)結(jié)構(gòu),說明: 計算的值,若表達(dá)式的值為真(非0)時,則執(zhí)行循環(huán)體語句;不斷反復(fù),直到表達(dá)式的值為假(0),則不執(zhí)行循環(huán)體語句,而直接轉(zhuǎn)向循環(huán)體外的下一條語句。 是循環(huán)反復(fù)執(zhí)行的程序,稱為“循環(huán)體”,當(dāng)需要執(zhí)行多條語句時,應(yīng)使用“ ”括起來組成一個復(fù)合語句。 while語句是先判斷條件,后執(zhí)行循環(huán)體,為“當(dāng)型”循環(huán),因此若條件不成立,有可能一次也不執(zhí)行循環(huán)體。,循環(huán)結(jié)構(gòu),例:求:s=1+2+3+100(累加法),main() int s=0,n=1; while (n=100) s=s+n; n+; printf(S=%d,s); ,例: 求n!,n由鍵盤輸入(累乘法) v
4、oid main() int n,i,s; scanf(%d, ,循環(huán)結(jié)構(gòu),例6.6 利用公式 求的值,要求:直到最后一項的絕對值小于10-6為止。,循環(huán)結(jié)構(gòu),思考與討論: 1)程序中控制循環(huán)結(jié)束的變量t是多項式中的通項。 2)如果程序中將變量n定義為整數(shù),程序運行會出現(xiàn)什么情況?,#include void main() float pi,t,n; int sign=1; pi=0.0; n=1.0; t=1.0; while (fabs(t) = 1e-6) t=sign/n; pi+=t; n+=2; sign=-sign; pi=pi*4; printf(pi = %fn,pi); ,
5、循環(huán)結(jié)構(gòu),6.4 do.while語句,do 語句; while (表達(dá)式);,執(zhí)行過程:先執(zhí)行循環(huán)體語句一次,再判別表達(dá)式的值,若為真(非0)則繼續(xù)循環(huán),否則終止循環(huán)。,循環(huán)結(jié)構(gòu),例:求:s=1+2+3+100,void main() int s=0,n=1; do s=s+n; n+; while (n=100); printf(S=%d,s); ,例 計算 直到最后一項的絕對值小于1e-7時為止。,循環(huán)結(jié)構(gòu),#include void main() double s,t,x; int n; printf(please input x:); scanf(%lf, ,求最大公約數(shù)的N-S流程
6、圖,習(xí)題6.1 求兩個整數(shù)的最大公約數(shù)、最小公倍數(shù),循環(huán)結(jié)構(gòu),編程分析:求最大公約數(shù)的算法如下: 1)對于已知兩數(shù)m,n,使得mn。 2)m除以n得余數(shù)r。 3)若r=0,則n為求得的最大公約數(shù),算法結(jié)束;否則執(zhí)行4)。 4)mn,nr,再重復(fù)執(zhí)行2)。 (最小公倍數(shù)=兩個整數(shù)之積/最大公約數(shù))。,求兩個整數(shù)的最大公約數(shù)、最小公倍數(shù),循環(huán)結(jié)構(gòu),void main() int n,m,nm,r,t; printf(Enter m,n=?); scanf(%d%d, ,思考與討論: 1)如何將程序中的while語句改用do.while語句來實現(xiàn)? 2)如果將程序中的“nm=n*m;”語句刪除,將輸
7、出最大公約數(shù)的語句改寫成: printf(The min Gbshu=%dn, n*m/n); 程序的輸出結(jié)果是什么?,循環(huán)結(jié)構(gòu),使用while和do-while語句應(yīng)注意以下幾點:,1.在if語句,while語句中,表達(dá)式后面都不能加分號,而在 do-while語句的表達(dá)式后面則必須加分號。 2.當(dāng)循環(huán)體由多個語句組成時,也必須用括起來組成一個復(fù)合語句。 3. 如果循環(huán)至少要執(zhí)行一次, while和do-while語句可以相互替換。,循環(huán)結(jié)構(gòu),一、 for語句使用一般形式為: for(表達(dá)式1;表達(dá)式2;表達(dá)3) 語句;,表達(dá)式1(控制變量的初始化 ): 用來給循環(huán)變量賦初值,也允許在for
8、語句外給循環(huán)變量賦初值,此時可以省略該表達(dá)式。,表達(dá)式2(循環(huán)的條件)循環(huán)條件,一般為關(guān)系表達(dá)式或邏輯表達(dá)式。,表達(dá)式3(循環(huán)控制變量的更新 ) 用來修改循環(huán)變量的值,一般是賦值語句。,6.5 for循環(huán)語句,循環(huán)結(jié)構(gòu),for語句的執(zhí)行過程: 1.首先計算表達(dá)式1的值。 2.再計算表達(dá)式2的值,若值為真(非0)則執(zhí)行循環(huán)體一次,否則跳出循環(huán)。 3.然后再計算表達(dá)式3的值,轉(zhuǎn)回第2步重復(fù)執(zhí)行。,注意:在整個for循環(huán)過程中,表達(dá)式1只計算一次,表達(dá)式2和表達(dá)式3則可能計算多次。,循環(huán)結(jié)構(gòu),例:用for語句計算s=1+2+3+.+99+100,void main() int n,s=0; for(
9、n=1;n=100;n+) s=s+n; printf(s=%dn,s); ,main() int s=0,n=1; while (n=100) s=s+n; n+; printf(S=%d,s); ,循環(huán)結(jié)構(gòu),例: 求n!,n由鍵盤輸入(累乘法),void main() int n,i,s; scanf(%d, ,void main() int i,n,s=1; scanf(%d, ,循環(huán)結(jié)構(gòu),有關(guān)for語句的幾點說明: (1)for語句的一般形式中的“表達(dá)式1”可以省略,此時應(yīng)在for語句之前給循環(huán)變量賦初值。注意省略表達(dá)式1時,其后的分號不能省略。 例如:i=1; for(; i=n;
10、i+) t=t*i; 執(zhí)行時,跳過“求解表達(dá)式1”這一步,其他不變。,循環(huán)結(jié)構(gòu),有關(guān)for語句的幾點說明: 2)如果表達(dá)式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進行下去。也就是認(rèn)為表達(dá)式2 始終為真,在形式上構(gòu)成死循環(huán)。 例如: for(i=1; ; i+) t=t*i; 表達(dá)式1是一個賦值表達(dá)式,表達(dá)式2省略。它相當(dāng)于: i=1; while(1) t=t*i; i+; ,循環(huán)結(jié)構(gòu),有關(guān)for語句的幾點說明: 3)表達(dá)式3也可以省略,但此時程序設(shè)計者應(yīng)另外設(shè)法保證循環(huán)能正常結(jié)束,表達(dá)式3的功能放到循環(huán)體內(nèi)。例如: for(i=1;i=n;) t=t*i; i+; 4)可以省略表達(dá)式1和表達(dá)式
11、3,只有表達(dá)式2,即只給循環(huán)條件,如: for(;i=n;) while(i=n) t=t*i; 相當(dāng)于 t=t*i; i+; i+;,循環(huán)結(jié)構(gòu),有關(guān)for語句的幾點說明: 5)3個表達(dá)式都可省略,例如: for(;) 語句 相當(dāng)于 while(1)語句。 即不設(shè)初值,不判斷條件(認(rèn)為表達(dá)式2為真值),循環(huán)變量不增值。循環(huán)為“死循環(huán)”。 6)表達(dá)式1和表達(dá)式3可以是一個簡單的表達(dá)式,也可以是逗號表達(dá)式,即包含一個以上的簡單表達(dá)式,中間用逗號間隔。 例如: for(t=1, i=1;i=n ; t=t*i, i+);,循環(huán)結(jié)構(gòu),三種循環(huán)語句比較,三種循環(huán)語句比較,說明: 1)3種循環(huán)中for語句
12、功能最強大,使用最多,任何情況的循環(huán)都可使用for語句實現(xiàn)。for語句與while語句的等價代換形式如下: for(;) 語句; 2)當(dāng)循環(huán)體至少執(zhí)行一次時,用do.while語句與while語句等價。如果循環(huán)體可能一次也不執(zhí)行,則只能使用while語句或for語句。,表達(dá)式1; while (表達(dá)式2) ; 表達(dá)式3;,循環(huán)結(jié)構(gòu),6.6 循環(huán)的嵌套多重循環(huán)結(jié)構(gòu),一個循環(huán)內(nèi)完整地包含另一個循環(huán)結(jié)構(gòu),則稱為多重循環(huán) 嵌套一層稱為二重循環(huán),嵌套二層稱為三重循環(huán),(4) while( ) for( ) ,(1) while( ) while( ) ,do do while( ); while( );
13、,(3) for( ) for( ) ,循環(huán)結(jié)構(gòu),(7) while( ) do while( ); ,(5) for( ) while( ) ,(6) do for( ) while();,(8) for( ) do while( ); ,循環(huán)結(jié)構(gòu),void main() int i,j; for(i=1;i=3;i+) printf(i=%d ,i); for(j=1;j=3;j+) printf(j=%d ,j); printf(n); ,共執(zhí)行9次,共執(zhí)行3次,對于循環(huán)的嵌套,要注意以下事項: (1) 內(nèi)循環(huán)變量與外循環(huán)變量不能同名; (2) 外循環(huán)必須完全包含內(nèi)循環(huán);,循環(huán)結(jié)構(gòu),補充
14、例題:打印如下形式的九九乘法表.,main() int x,y; for(x=1;x=9;x+) for(y=1;y=9;y+) printf(%d*%d=%2d ,x,y,x*y); printf(n); ,循環(huán)結(jié)構(gòu),例:打印由數(shù)字組成的如下所示金字塔圖案 編程分析:打印圖案一般可由多重循環(huán)實現(xiàn),外循環(huán)用來控制打印的行數(shù),內(nèi)循環(huán)控制每行的空格數(shù)和字符個數(shù)。實現(xiàn)打印上金字塔圖案的程序如下: void main() int i,k,j; for(i=1;i=9;i+) /* 外循環(huán)控制打印行數(shù) */ for (k=1;k=10-i;k+) /* 每行起始打印位置 */ printf( ); fo
15、r (j=1;j=2*i-1;j+) /* 內(nèi)循環(huán)控制打印個數(shù)*/ printf(%c,48+i); printf(n); /* 換行 */ ,1 222 33333 4444444 555555555 66666666666 7777777777777 888888888888888 9999999999999999,思考與討論: 1)程序如果將程序中的數(shù)值“10”改 為“20”,程序的輸出結(jié)果有什么不同?如果改為“5”,輸出結(jié)果如何? 2)能否將語句“printf(%c,48+i);”改為“printf(%c,0+i);”?,其它控制語句,6.8.1 break語句,作用范圍:switch
16、 語句或循環(huán)語句 功能:跳出switch語句或跳出本層循環(huán), 轉(zhuǎn)去執(zhí)行后面的程序。,break語句的一般形式為: break;,注意: break語句用于循環(huán)體中,一般與if語句聯(lián)合使用,其它控制語句,例: 打印11000中能同時被3和5整除的前10個數(shù)。 #include void main() int k,n=0; for(k=1;k=1000;k+) if(k % 3 =0 ,其它控制語句,6.8.2 continue語句,作用范圍:只能用在循環(huán)體中 功能:結(jié)束本次循環(huán),轉(zhuǎn)入下一次循環(huán) 條件的判斷與執(zhí)行。,其一般格式是: continue;,注意:本語句只結(jié)束本層本次的循環(huán),并不跳出循環(huán)
17、。,其它控制語句,例:計算半徑為1到15的圓的面積,僅打印面積超過50的圓面積。 void main() int r; float area; for(r=1;r=15;r+) area=3.141593*r*r; if(area50.0) continue; printf( square=%fn,area); ,其它控制語句,main() int n; for(n=7;n=100;n+) if (n%7!=0) continue; printf(%d ,n); ,main() int n; for(n=7;n=100;n+) if (n%7=0) printf(%d ,n); ,使用cont
18、inue,不用continue,break:語句只能用在switch 語句或循環(huán)語句中, 其作用是跳出switch語句或跳出本層循環(huán),轉(zhuǎn)去執(zhí)行后面的程序。,continue:結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue 語句之后的語句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。應(yīng)注意的是, 本語句只結(jié)束本層本次的循環(huán),并不跳出循環(huán)。,break與continue的區(qū)別,其它控制語句,其它控制語句,goto語句(無條件轉(zhuǎn)移語句),一般格式: goto 語句標(biāo)號; 語句標(biāo)號符合標(biāo)識符書寫規(guī)則,起標(biāo)識語句的作用。 如: label: i+; goto label;,注意:語言不限制程序中使用標(biāo)號的次數(shù),但
19、不得重名。,其它控制語句,例 統(tǒng)計從鍵盤輸入一行字符的個數(shù) #include stdio.h void main() int n=0; printf(input a stringn); loop:if(getchar()!=n) n+; goto loop; printf(%dn,n); ,注意:在結(jié)構(gòu)化程序設(shè)計中一般不主張使用goto語句, 以免造成程序流程的混亂,使理解和調(diào)試程序都產(chǎn)生困難。,void main() int n=0; printf(inputa stringn); while (getchar()!=n) n+; printf(%dn,n); ,應(yīng)用程序舉例,#includ
20、e math.h void main() int m,i,k; scanf(%d, ,例6.8 判斷一個給定的整數(shù)是否為素數(shù),應(yīng)用程序舉例,#include math.h void main() int m,i,k; for(m=100;mk) printf(%dn,m); ,例6.9 求100200間的全部素數(shù),應(yīng)用程序舉例,窮舉法 基本思想:一一列舉各種可能的情況,并判斷哪一種可能是符合要求,void main() int x, y, z,n; printf( 5yun 1yun 0.5yunn); n=0; for(x=1; x=100;x+) for(y=1;y=100;y+) for(z=1;z=10
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銀行以資抵債財務(wù)制度
- 臨時項目財務(wù)制度
- 車輛公司財務(wù)制度范本
- 鐵路建設(shè)單位財務(wù)制度
- 建筑業(yè)項目部財務(wù)制度
- 公路工程汛期報告制度
- 公司員工出差報銷制度
- 人事管理制度及流程(3篇)
- 地暖安裝安全管理制度(3篇)
- 電網(wǎng)怎么施工方案(3篇)
- 壓瘡及失禁性皮炎護理
- 2025年辦公室行政人員招聘考試試題及答案
- 鐵路運輸安全管理體系建設(shè)方案
- 施工總承包技術(shù)標(biāo)述標(biāo)大綱
- 工程機械定義及類組劃分
- 2024臨床化學(xué)檢驗血液標(biāo)本的采集與處理
- 學(xué)堂在線 雨課堂 學(xué)堂云 高技術(shù)與現(xiàn)代局部戰(zhàn)爭 章節(jié)測試答案
- 軟件企業(yè)軟件版本控制規(guī)范
- 2025年《商務(wù)接待與談判》課程標(biāo)準(zhǔn)
- JG/T 374-2012建筑用開窗機
- CJ/T 161-2002水泥內(nèi)襯離心球墨鑄鐵管及管件
評論
0/150
提交評論