C語言程序設(shè)計(jì)教程第5章.ppt_第1頁
C語言程序設(shè)計(jì)教程第5章.ppt_第2頁
C語言程序設(shè)計(jì)教程第5章.ppt_第3頁
C語言程序設(shè)計(jì)教程第5章.ppt_第4頁
C語言程序設(shè)計(jì)教程第5章.ppt_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1,第五章 循環(huán)結(jié)構(gòu),5.1 while語句 5.2 do-while語句 5.3 for 語句 5.4 break、continue和goto語句 5.5 循環(huán)的嵌套 5.6 復(fù)合結(jié)構(gòu)程序舉例,C語言程序設(shè)計(jì)教程,2,C語言有while 、 do - while 、和for語句三種循環(huán)結(jié)構(gòu)語句。 前兩個(gè)稱為條件循環(huán),即根據(jù)條件來決定是否繼續(xù)循環(huán); 后一個(gè)稱為計(jì)數(shù)循環(huán),即根據(jù)設(shè)定的執(zhí)行次數(shù)來執(zhí)行循環(huán)。,3,5.1 while語句,while 語句是通過判斷循環(huán)控制條件是否成立來決定是否繼續(xù)循環(huán)的語句。 一般形式:while (表達(dá)式) 語句表達(dá)式為循環(huán)控制條件,當(dāng)表達(dá)式的值為非零(滿足循環(huán)條件

2、),就執(zhí)行語句, 當(dāng)表達(dá)式的值為零,就退出循環(huán)。,4,while語句執(zhí)行流程,首先計(jì)算表達(dá)式,如果表達(dá)式的值為非零,執(zhí)行語句,重新計(jì)算表達(dá)式,如果表達(dá)式的值為0,則跳出循環(huán),如果表達(dá)式的值一開始就為0,則語句一次也會被不執(zhí)行。,5,while語句舉例,問題: 求n個(gè)學(xué)生的平均成績 算法: 1 輸入 n ; i = 1 , average=0; 2 輸入第 i 個(gè)學(xué)生的score; 3 average += score; i +; 4 當(dāng) i= n 重復(fù)做2; 5 average /= n ;,6,#include void main( ) int n, score, i = 1 ; float

3、 average=0; printf (“ n Enter n:” ); scanf( “%d” , ,7,5.2 dowhile語句,dowhile 語句的一般形式是:do 語句 while (表達(dá)式) 特點(diǎn): 首先執(zhí)行語句,再通過判斷循環(huán)控制條件是否滿足來決定是否繼續(xù)循環(huán)。,8,dowhile語句執(zhí)行流程,首先執(zhí)行語句, 再計(jì)算表達(dá)式。,如果表達(dá)式的值為非零, 繼續(xù)下一次循環(huán),如果表達(dá)式的值為0,則跳出循環(huán),如果表達(dá)式的值一開始就為0,也會執(zhí)行一次語句。,9,#include void main( ) int n, score, i = 0; float average=0; do pri

4、ntf (“ n Enter score:” ); scanf( “%d” , ,10,注意:循環(huán)控制變量值在循環(huán)體內(nèi)必須有所改變。,例如: i=1; while (i=100) putchar(*); i+;,這個(gè)循環(huán)永遠(yuǎn)不會結(jié)束,因?yàn)檠h(huán)控制變量i沒有在循環(huán)體內(nèi)被改變,i+; 不屬于循環(huán)語句。,i+應(yīng)該在循環(huán)體內(nèi)改變:,i=1; while (i=100) putchar(*); i+; ,11,5.3 for循環(huán)語句,for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語句,這是C語言最有特點(diǎn)的循環(huán)語句。使用最為靈活方便 一般形式:,12,先計(jì)算表達(dá)式1,用于循環(huán)開始前設(shè)置變量初值。 接著計(jì)算

5、循環(huán)控制邏輯表達(dá)式2,控制循環(huán)條件,決定循環(huán)次數(shù)。 執(zhí)行循環(huán)體語句,這個(gè)語句也可以是其它循環(huán)。 表達(dá)式3:循環(huán)控制變量,修改表達(dá)式。,執(zhí)行流程,13,例: 求 1+2 +99,#include”stdio.h” main()int i,s=0; / *s清0 */ for(i=1;i100;i+) s=s+i; printf(“s=%d”,s);,14,循環(huán)語句的多種表示,for( i=0; i100; i+ ) s=s+i;,main()int i=1,s=0; do s=s+i; while (+i100) printf(“s=%d”,s);,main()int i,s=0; i=1; w

6、hile(i100) s=s+i; i+; printf(“s=%d”,s); ,15,for語句的表達(dá)式可以省略,如已先給變量賦過值。則可以省略表達(dá)式1。,for(;i100;i+),如果想在循環(huán)內(nèi)部改變變量的值,則可以省略表達(dá)式3。,for(i=0;i100;),如果都省略的話就相當(dāng)于while。,for(;i100;) while(i100),全部省略就是死循環(huán)。,for(;) (需要用break跳出),16,逗號表達(dá)式,逗號運(yùn)算符的主要應(yīng)用就在for語句中。 for語句中的表達(dá)式1和表達(dá)式3可以是逗號表達(dá)式,特別是有兩個(gè)循環(huán)變量參與對循環(huán)的控制時(shí)。表達(dá)式1和表達(dá)式3為逗號表達(dá)式,將使程

7、序顯得非常清晰。,例: for( i=1, j=10 ;i=j; i+, j-),17,for(i=a,j=b; i=j; i+,j-) 舉例,main() int I,j; for( i=1, j=10 ;i=j; i+, j-) printf(“i=%d,j=%dn”,i,j); ,18,循環(huán)語句流程圖,語句,表達(dá)式,while循環(huán) dowhile循環(huán) for循環(huán),19,循環(huán)語句流程圖的統(tǒng)一格式。,20,5.4 break、continue、goto語句,這一類語句的功能是改變程序的結(jié)構(gòu),使程序從其所在的位置轉(zhuǎn)向另一處。 這類語句是非結(jié)構(gòu)化語句,21,非結(jié)構(gòu)化語句之break,它的作用是把

8、流程轉(zhuǎn)向所在結(jié)構(gòu)之后。 在switch分支結(jié)構(gòu)中,使用break語句可以使流程跳出switch分支結(jié)構(gòu)。 同樣的,在循環(huán)結(jié)構(gòu)中,使用break語句使流程跳出當(dāng)前的循環(huán)層,轉(zhuǎn)向執(zhí)行該循環(huán)結(jié)構(gòu)后面的語句。,簡單的說就是跳出當(dāng)前所在的結(jié)構(gòu),main( ) int s=0,i=1: for (; ;) s = s+i; i+; if (i100) break; /* 如果 i100,則退出循環(huán)*/ printf(“s=%d”,s);本程序中,當(dāng)i100時(shí),強(qiáng)行終止for循環(huán),繼續(xù)執(zhí)行for語句下一條語句,22,非結(jié)構(gòu)化語句之continue,continue語句被稱為繼續(xù)語句。執(zhí)行continue語句

9、,使本次循環(huán)提前結(jié)束,即跳過循環(huán)體中continue語句下面的尚未執(zhí)行的循環(huán)體語句,但不結(jié)束整個(gè)循環(huán),繼續(xù)進(jìn)行下一次循環(huán)的條件判別,條件為真,繼續(xù)進(jìn)行執(zhí)行循環(huán)語句。該語句形式為: continue;,23,例5.4 顯示輸入的字符, 如果按的是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) conti

10、nue; /*按的是Enter:鍵,跳過字符輸出語句*/ putch(ch); /*顯示輸入的字符*/ getch( ); /*讓程序停一下,拍任意鍵繼續(xù)*/ ,getch與getchar基本功能相同,差別是getch直接從鍵盤獲取鍵值,不等待用戶按回車,只要用戶按一個(gè)鍵,getch就立刻返回,getch返回值是用戶輸入的ASCII碼,出錯(cuò)返回-1。,24,非結(jié)構(gòu)化語句之goto,goto被稱為無條件轉(zhuǎn)移語句。由兩部分組成 goto 標(biāo)號; 和 標(biāo)號: 語句,它最大的好處就是可以一下子跳出多重循環(huán),而break卻不能做到這點(diǎn)。,25,#include “stdio.h” main( ) flo

11、at score , average=0; int n=0; scanf(“%f”, i6;i+) for(j=0;j6;j+) printf(“%3d %3d”,i,j); putchar(n);,28,循環(huán)嵌套舉例,問題:輸出圖形 * * * * * *,29,分析: 一共6行, 每行的 *數(shù)目與行號相同 算法: 行用 i 表示 , 當(dāng) i 7 do 輸出 i 個(gè) * 換行 ,int i,j; for ( i=1; i7; i+) printf(n); for (j=1; j=i; j+ ) putchar(*); ,30,循環(huán)嵌套舉例,問題:輸出圖形 * * * *,31,循環(huán)嵌套,分析

12、: 一共4行, 第i行輸出的空格數(shù)為: (7-i+1)/2 第i行輸出 i*個(gè)*, 算法: 當(dāng) i = 7 do 輸出 (7-i+1)/2個(gè)空格 ; 輸出i 個(gè) * 換行 ; i+=2 ; ,32,main() int i,j; for ( i=1; i=7; i+=2) printf(“n”); for (j=1;j=(7-i+1)/2 ; j+) putchar( ); /*輸出 (7-i+1)/2個(gè)空格*/ for (j=1;j=i;j+ ) putchar(*); /* 輸出i 個(gè) * */ getch(); ,33,復(fù)合程序結(jié)構(gòu),C語言允許循環(huán)語句與分支結(jié)構(gòu)語句聯(lián)用,即在循環(huán)體包含一

13、個(gè)完整的分支結(jié)構(gòu),這樣的程序結(jié)構(gòu)被稱為復(fù)合程序結(jié)構(gòu)。復(fù)合程序結(jié)構(gòu)同樣必須做到嵌套層次清楚,決不允許出現(xiàn)嵌套層次之間相互交叉的情況。,34,例:給多個(gè)學(xué)生的成績評級。 #include #include main() int i, score; scanf(%d , /*輸入下一個(gè)學(xué)生的成績*/ while 結(jié)構(gòu)中嵌套了一個(gè)多分支選擇結(jié)構(gòu)。,35,5.6 復(fù)合程序結(jié)構(gòu)舉例,例1 目標(biāo):找出3至1000內(nèi)的全部的質(zhì)數(shù)。 算法:從i= 1 開始做 分別用2,3,4,i-1 除i(用2,3,sqrt(i)除i)。 如果i被某個(gè)數(shù)整除 , i不是素?cái)?shù)。 i+; 測試下一個(gè)i;,36,#include m

14、ain( ) int i, j ,count,flag; /* 用flag作標(biāo)志 */ count=0; for(i=3; i=1000; i+) flag = 0; /* 設(shè)標(biāo)志為0 */ for(j=2; j=sqrt(i); j+) if (i % j = =0) /* 用 j 測試 i */ flag = 1; /* 不是素?cái)?shù),設(shè)標(biāo)志為1 */ /* i 測試完畢 */ if(flag = = 0) /* i是素?cái)?shù) */ printf(“%4d, ”, i ); count+; if (count % 8 = = 0) printf(“n” ); /* 每輸出8個(gè)素?cái)?shù)就換行 */ /* 測試下一個(gè) i */,37,例2:用公式/4=1-1/3+1/5-1/7+,求得近似值,直到最后一項(xiàng)的絕對值小于10-6為止。 #include math.h

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論