版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第六章 循環(huán)控制,概述,goto語句以及用goto語句構(gòu)成循環(huán),while 語句,do while 語句,for 語句,循環(huán)嵌套,幾種循環(huán)的比較,break 與continue語句,程序舉例,本章要點(diǎn): 建立循環(huán)程序設(shè)計的基本概念和邏輯思維 掌握C語言循環(huán)程序設(shè)計的方法,學(xué)完這章需要解決的問題,公元錢五世紀(jì),我國古代數(shù)學(xué)家張丘建在算經(jīng)一書中提出了“百雞問題”:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何? (baiji.c) 打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。 例如: (shuixianhua.c),1.
2、引入循環(huán)控制語句的作用 當(dāng)滿足一定條件時,重復(fù)執(zhí)行一段程序。 2. 設(shè)置循環(huán)需要考慮的問題 循環(huán)初值;循環(huán)條件的設(shè)置;循環(huán)體應(yīng)包括 的語句;循環(huán)條件的修改。 3. C語言中可用以下語句實現(xiàn)循環(huán) 循環(huán)結(jié)構(gòu)主要有: (1)用goto語句和if語句構(gòu)成循環(huán); (2)用while語句; (3)用do-while語句; (4)用for語句。,6.1 概述,用if語句和goto語句構(gòu)成循環(huán),,6.2 goto語句以及用goto語句構(gòu)成循環(huán),一般形式: goto 標(biāo)號; 標(biāo)號:語句 其中:標(biāo)號用標(biāo)識符表示。 注意:不能用整數(shù)來作標(biāo)號。 用途:1.與if語句一起構(gòu)成循環(huán)結(jié)構(gòu)。 2.從循環(huán)體中跳到循環(huán)體外(常指
3、最深層)。 3.改變程序自上而下的執(zhí)行順序。 缺點(diǎn):濫用goto語句,可使程序無規(guī)律、可讀性差。,例 6.1,用 if 語句和 goto 語句構(gòu)成循環(huán) main( ) int i , sum=0; i=1; loop: if(i=100) sum=sum+i; i+; goto loop; printf(“%d”,sum); ,實例,例 6.2,用while 循環(huán)求sum=1+2+ +100 。,一般格式: while (表達(dá)式) 語句 特點(diǎn): 先判斷,后執(zhí)行。 表達(dá)式為非 0 值時,執(zhí)行語句,反之則不執(zhí)行。 屬 “當(dāng)型” 循環(huán)結(jié)構(gòu)。,NS 流圖,傳統(tǒng)流程圖,用 while 循環(huán)計算 sum=
4、1+2+ +100 main ( ) int i , sum = 0 ; i = 1 ; while ( i = 100 ) sum = sum + i ; i + + ; printf ( “%d” , sum ) ; ,實例,6.3 while 語句,示例,反例,說明: (1) 循環(huán)體可以是一條語句或是復(fù)合語句。 后者應(yīng)有 號。 (2) 在循環(huán)體中應(yīng)有使循環(huán)趨于結(jié)束的語句。 如上述程 序中的 i+ 。 (3) 注意表達(dá)式可以是各種類型的表達(dá)式或數(shù) 值類型。 如: while(1)、while( 2) 、 while(a) 等。 (4) 留心“邊界值”,注意循環(huán)次數(shù)。 (5) 注意 whil
5、e(表達(dá)式)后不要加分號。,留心“邊界值” 注意循環(huán)次數(shù) main ( ) int n = 0 ; while ( n+ = 1 ) printf (“%dn ” , n ) ; printf (“ %d n ” , n ) ; 運(yùn)行結(jié)果: 1 2 3,實例,注意 while(表達(dá)式)后不要加分號 main ( ) int i ,sum = 0 ; i = 1 ; while ( i = 100 ) ; sum = sum + i ; i+ ; printf ( “%d” , sum ); 程序?qū)⑦M(jìn)入“死” 循環(huán),無法得到 正確結(jié)果。,實例,一般格式: do 語句 while ( 表達(dá)式 )
6、; 特點(diǎn): 先執(zhí)行,后判斷。 屬典型的 “直到型” 循環(huán)結(jié)構(gòu)。,用do while循環(huán)求sum=1+2+ +100,NS 流圖,例 6.3,用 do while 循環(huán) 求sum=1+2+ +100 main ( ) int i , sum = 0 ; i = 1; do sum = sum + i ; i + + ; while ( i = 100 ) ; printf ( “ %d ” , sum ) ; ,實例,6.4 do while 語句,說明: 一般情況下,用 while 和 do while 處理同一問題時若二者的循環(huán)體一樣,則它們的結(jié)果一樣。 但如while后面的表達(dá)式一開始就為
7、0時,兩種循環(huán)體的結(jié)果是不同的。,(1)while循環(huán)示例,(2)do while循環(huán)示例,while循環(huán)結(jié)果,while循環(huán)結(jié)果 若輸入 1 則結(jié)果為 55 若輸入 11 則結(jié)果為 0,比較,do while循環(huán)結(jié)果,do while循環(huán)結(jié)果 若輸入 1 則結(jié)果為 55 若輸入 11 則結(jié)果為 11,比較,while循環(huán)示例 main ( ) int sum=0,i ; scanf(“%d”, ,實例,用 do while循環(huán) 求sum=1+2+ +100 main ( ) int i , sum = 0 ; i = 1; do sum = sum + i ; i + + ; while (
8、 i = 100 ) ; printf ( “ %d ” , sum ) ; ,實例,例:以下while 循環(huán)執(zhí)行的 次,輸出結(jié)果為 main ( ) int k = 2 ; while ( k ) printf ( “%d , ”, k ) , k ; printf ( “ n” ) ; A)無限次 B)0 次 C)1次 D)2 次 E)程序有錯,答案:D 輸出為: 2 , 1 ,求解表達(dá)式 1,求解表達(dá)式 3,表達(dá)式 2,語句,for 語句下 的其它語句,真,假,6.5 for 語句 一般格式: for (表達(dá)式1 ; 表達(dá)式2 ; 表達(dá)式3 ) 語句 ,最簡單格式: for ( 循環(huán)變量
9、賦初值 ; 循環(huán)條件 ; 循環(huán)變量增值 ) 語句,例6.4 用for 循環(huán)實現(xiàn)求1100 的累加和。 main ( ) int i , sum = 0 ; for(i = 1; i = 100; i+) sum = sum + i ; printf(“%d”, sum ); ,(3) 可把循環(huán)體中完成的內(nèi)容放在表達(dá)式中來完 成,但應(yīng)注意 “ ; ”,(2) for 語句中的表達(dá)式可以部分或全部省略, 但 “ ; ” 不能省略。,說明: for 語句中的表達(dá)式可以是任何有效的 C語言表達(dá)式。,for 語句中的表達(dá)式 main( ) int i,sum; for( i=0,sum=0; i=100
10、; i+) sum+=i ; printf(“%d”,sum); ,例如,示例,for 語句中的表達(dá)式 省略表達(dá)式1 main( ) int i,sum; i=0; sum=0; for( ; i = 100; i+) sum += i; printf(“%d”,sum); ,示例,for 語句中的表達(dá)式 省略表達(dá)式2 main( ) int i,sum; sum=0; for(i=0; ; i+) if (i 100) break; sum += i; printf(“%d”,sum); ,示例,for 語句中的表達(dá)式 省略表達(dá)式3 main( ) int i,sum; sum=0; for
11、(i=0; i = 100; ) sum += i; i+; printf(“%d”,sum); ,示例,for 語句中省略表達(dá)式1和3 main( ) int i,sum; sum=0; i=0; for (; i = 100; ) sum += i; i+; printf(“%d”,sum); ,示例,for 語句中省略表達(dá)式1、2和3 main( ) int i,sum; sum=0; i=0; for (; ; ) if ( i 100) break; sum += i; i+; printf(“%d”,sum); ,示例,用while實現(xiàn) main( ) int i,sum; sum
12、=0; i=0; while( i = 100) sum += i; i+; printf(“%d”,sum); ,示例,可把循環(huán)體中完成的內(nèi)容 放在表達(dá)式中來完成 但應(yīng)注意 “ ; ” 如: for ( i = 0 ; c != n ; i + = c ) c = getchar ( ) ; printf ( “%d” , c ) ; for (i= 0;(c = getchar( )!= n ;i+=c) ; printf ( “%c” , c ) ;,示例,省e1,省e2,省e3,省e1和e3,省e1 e2 e3,用while循環(huán)實現(xiàn),循環(huán)體置于表達(dá)式中,例: 下列 for 循環(huán)最多執(zhí)行
13、 次。 main ( ) int i , x ; for ( i = 0, x = 0; i 9 或x = 876 時結(jié)束循環(huán)。 若一直未輸入876 ,則 i 自加當(dāng) i 9 時結(jié)束。 答案為: B,6.6 循環(huán)的嵌套 1. while ( ) 2. do while ( ) do . . while ( ) ; . . while ( ) ; 3. for ( ; ; ) 4. while ( ) . . for ( ; ; ) do while ( ) ; ,5. for ( ; ; ) 6. do . . while ( ) for ( ; ; ) . . while ( ) ; 對循環(huán)
14、嵌套要注意內(nèi)外循環(huán)變量的變化規(guī)律: 在循環(huán)嵌套中,外循環(huán)變量每變化一次,則內(nèi)循 環(huán)變量將從其初值變化至終值。,main ( ) int i , j , x = 0 ; for ( i = 0; i 2;i+ ) x + + ; for ( j=0; j=3; j+) x+ ; x+; printf ( “ %d n ”, x ); ,6.7 幾種循環(huán)的比較,分析,當(dāng)外循環(huán)變量 i 為 0 時,內(nèi)循環(huán)變量 j 將從 0 變化到 3。 當(dāng)外循環(huán)變量 i 為 1 時,內(nèi)循環(huán)變量 j 又將從 0 變化到 3。 故:x 共計累加 12 次。,實例,6.8 break 和 continue 語句 一、 b
15、reak 語句 格式: break ; 用途: 1. 在switch語句中用來使流程跳出switch構(gòu), 繼續(xù)執(zhí)行 switch 語句后面的其它語句。 2. 用在循環(huán)體內(nèi),使所在循環(huán)立即終止。即跳出 循環(huán)體,繼續(xù)執(zhí)行循環(huán)體后面的其它語句。,注意: break 語句不能用于循環(huán)和switch語句之外 的任何其它語句中。,示例,break的使用 例如: for(r=1; r 100 ) break ; printf(“ %f ”, area ); ,重點(diǎn),程序找錯,break找錯 if ( a b ) max = a ; break ; a+ ; else max = b ; break ; b+
16、 ; ,示 例,二、 continue 語句 格式: continue ; 作用: 用來結(jié)束本次循環(huán)。即跳過循環(huán)體中尚未執(zhí) 行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的 判斷。 注意: break 和 continue 的區(qū)別。 while ( 表達(dá)式1 ) while(表達(dá)式1) if(表達(dá)式2) break; if (表達(dá)式2)continue; 另外:在 for 循環(huán)中,遇到 continue 語句后, 先計算 for 循環(huán)表達(dá)式3的值, 再執(zhí)行表達(dá)式2, 根據(jù)其結(jié)果來決定是否繼續(xù)執(zhí)行 for 循環(huán)。,例 6.5 把100 200之間的不能被3整除的數(shù)輸出 main ( ) int n ; f
17、or ( n = 100 ; n = 200 ; n + + ) if ( n % 3 = =0) continue ; printf(“ %d ”, n); ,if ( n % 3 != 0 ) printf( “%d”, n ) ;,補(bǔ)充例題1 : main ( ) int i , j , x = 0 ; for ( i = 0 ; i 2 ; i+ ) x + + ; for ( j = 0 ; j = 3 ; j+ ) if ( j % 2 ) continue ; x+ ; x+ ; printf ( “ %d n ” , x ) ; A) 4 B) 8 C) 6 D) 12,答案:
18、B,2. 以下程序段中 不是無限循環(huán)。 A) i = 100 ; B) for ( ; ; ) ; while ( 1 ) i = i %100 ; i+ ; if ( i 100 ) break ; C) k = 0 ; D) s = 32764 ; do while (s+%2|s%2 ) k+ ; s + + ; k+ ; while ( k 0 ) ;,答案:C,分析,分析 A) 中i%100的值總在0 99。 (i = i %100;i + +)等價于 i = i %100 + 1。 因此, if 的條件總為“真” break 語句不可能執(zhí)行。 C) 中隨著 k 值的增大,總要溢出,
19、使k值為負(fù)或零。 D) 中不論s為何值,表達(dá)式 s+ % 2 和 s % 2 中總有一個為非 0 。,實例,3. 以下程序運(yùn)行結(jié)果是 。 main( ) int i , b , k = 0 ; for ( i = 1 ; i = 0 ) k+ ; printf ( “ %d , %d ” , k , b ) ; A) 3 , 1 B) 8 , 1 C) 3 , 0 D) 8 , 2,答案:D,b 的值為: 1 , 0 , 1 , 0 , 1,例6.6 求 的近似值。 /4 = 1 1/3 + 1/5 1/7 . 算法: S1: sign = 1 S2: sum = 1 S3: deno = 3
20、 S4: sign = ( 1) sign S5: term = sign ( 1/deno ) S6: sum = sum + term S7: deno = deno + 2 S8: 若 deno 1e 6 返回 S4,否則算法結(jié)束。,6.9 程序舉例,#include “ math.h ” 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 ; printf ( “pi =%10
21、.6f ,pi ) ; 運(yùn)行結(jié)果: pi = 3.141397,分析: (1) pi = 1 n = 3 s = 1 t = 1/3 (2) pi = 1 1/3 n = 5 s = 1 t = 1/5 (3) pi = 11/3+1/5 .,6.9 程序舉例,例6.7 求 Fibonacci(斐波納契)數(shù)列(前40個數(shù)) F1 = 1 ( n = 1 ) F2 = 1 ( n = 2 ) Fn = Fn 1 + Fn 2 ( n 3 ) 源程序: main ( ) long int f1 , f2 ; int i ; f1 = 1 ; f2 = 1 ; for ( i = 1 ; i = 20 ; i+ )
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工個人總結(jié)怎么寫2021
- 指導(dǎo)培養(yǎng)教師工作計劃
- 2022年高中工作計劃
- 2025年柔性自動化裝備項目合作計劃書
- 自行車車形容2篇
- 2025年耐高溫濾料合作協(xié)議書
- 入職競業(yè)協(xié)議書(2篇)
- 2025年高純石英纖維正交三向織物項目發(fā)展計劃
- 2025年青霉素類抗菌藥物合作協(xié)議書
- 地下車庫租賃協(xié)議
- 三年級上冊數(shù)學(xué)課件北師大版專項復(fù)習(xí) 操作題、圖形題專項
- 黃土高原水土流失說課
- 河北省石家莊市藥品零售藥店企業(yè)藥房名單目錄
- 《來自地球的力》名師教案
- 食堂虧損分析報告范文5篇
- 錨桿錨索鉆機(jī)操作規(guī)程
- 《錄音技術(shù)與藝術(shù)》課程教學(xué)大綱
- 部編版七年級語文上下冊教材解讀分析精編ppt
- InternationalSettlementsLecture3InternationalClearingSystems
- (完整版)景觀園林工程施工規(guī)范和技術(shù)要求
- (完整版)六年級轉(zhuǎn)述句練習(xí)題
評論
0/150
提交評論