C語言循環(huán)結(jié)構(gòu)_第1頁
C語言循環(huán)結(jié)構(gòu)_第2頁
C語言循環(huán)結(jié)構(gòu)_第3頁
C語言循環(huán)結(jié)構(gòu)_第4頁
C語言循環(huán)結(jié)構(gòu)_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第六章整理課件

主要內(nèi)容6.1概述6.2goto語句以及用goto語句構(gòu)成循環(huán)6.3用while語句實(shí)現(xiàn)循環(huán)6.4用do-while語句實(shí)現(xiàn)循環(huán)6.5用for語句實(shí)現(xiàn)循環(huán)6.6循環(huán)的嵌套6.7幾種循環(huán)的比較6.8break語句continue和語句6.9程序舉例整理課件

6.1概述什么是循環(huán)?為什么要使用循環(huán)?問題1:問題2:求學(xué)生平均成績

整理課件循環(huán)整理課件生活中的例子:擊鼓傳花:

大家坐成一個(gè)圈,鼓聲響起的時(shí)候?qū)⒒ㄊ樞蚪坏较乱粋€(gè)人的手里,依次向下傳遞,當(dāng)鼓聲突然中斷時(shí)停止傳花,花束落在誰的手里便成為輸家4×100米接力賽跑:

第1個(gè)人跑完100米后將接力棒傳給第2個(gè)人,第2個(gè)人再跑100米,然后是第3個(gè)人,直到第4個(gè)人跑完最后一個(gè)100米共同點(diǎn):都要完成相同的任務(wù):量變的重復(fù)內(nèi)容都有結(jié)束條件:發(fā)生質(zhì)變的界限整理課件

6.2goto語句以及用goto語句構(gòu)成循環(huán)

goto語句——無條件轉(zhuǎn)向語句

goto語句標(biāo)號(hào);語句標(biāo)號(hào)用標(biāo)識(shí)符表示,例如:gotolabel_1;合法;goto123;不合法.整理課件【例6.1】用goto語句和if語句構(gòu)成循環(huán),計(jì)算sum=1+2+3+……+100

。main(){inti,sum=0;i=1;loop:if(i<=100){sum=sum+i;i++;

gotoloop;}printf("%d\n",sum);}整理課件

6.2goto語句以及用goto語句構(gòu)成循環(huán)濫用goto語句將使程序流程無規(guī)律、可讀性差.不建議使用goto語句。一般來說,可以有兩種用途:(1)與if語句一起構(gòu)成循環(huán)結(jié)構(gòu);(2)從循環(huán)體中跳轉(zhuǎn)到循環(huán)體外。

整理課件

6.3用while語句實(shí)現(xiàn)循環(huán)while語句用來實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。一般形式:

while(表達(dá)式)語句

執(zhí)行過程:計(jì)算表達(dá)式值,若該值為非0時(shí),則執(zhí)行while語句中的內(nèi)嵌語句。然后重復(fù)上述步驟,直到表達(dá)式值為假(為0),則執(zhí)行while語句的下一條語句。其特點(diǎn)是:先判斷表達(dá)式,后執(zhí)行語句。循環(huán)體語句整理課件

6.3用while語句實(shí)現(xiàn)循環(huán)注意:循環(huán)體如果包含一個(gè)以上的語句,應(yīng)該用花括弧括起來,以復(fù)合語句形式出現(xiàn)。在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句。整理課件1.計(jì)算sum=1+2+3+……+100整理課件第5章循環(huán)程序設(shè)計(jì)1.計(jì)算sum=1+2+3+……+100循環(huán)體循環(huán)控制條件循環(huán)控制變量循環(huán)的初始化#include<stdio.h>voidmain(){ inti=1,sum=0; while(i<=100) { sum=sum+i; i++; } printf(“Sum=%d\n”,sum);}整理課件第5章循環(huán)程序設(shè)計(jì)2.計(jì)算sum=2+4+6+……+100循環(huán)體循環(huán)控制條件循環(huán)控制變量循環(huán)的初始化#include<stdio.h>voidmain(){ inti=2,sum=0; while(i<=100) { sum=sum+i; i+=2; } printf(“Sum=%d\n”,sum);}整理課件2.計(jì)算sum=2+4+6+……+100循環(huán)體循環(huán)控制條件循環(huán)控制變量循環(huán)的初始化#include<stdio.h>voidmain(){ inti=2,sum=0; while(i<=100) { sum=sum+i; i+=2; } printf(“Sum=%d\n”,sum);}整理課件

6.4do-while語句

do-while語句的特點(diǎn):先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。一般形式:

do

循環(huán)體語句

while(表達(dá)式);執(zhí)行過程:先執(zhí)行一次指定的循環(huán)體語句,然后判別表達(dá)式,當(dāng)表達(dá)式的值為非零(“真”)時(shí),返回重新執(zhí)行循環(huán)體語句,如此反復(fù),直到表達(dá)式的值等于0為止,此時(shí)循環(huán)結(jié)束。整理課件

6.4用do-while語句實(shí)現(xiàn)循環(huán)while語句和用do-while語句的比較:二者是完全等價(jià)的。do-while語句有可能一次也不執(zhí)行循環(huán)體。整理課件循環(huán)的變化:sum=1+2+3+……+100#include<stdio.h>voidmain(){ inti=1,sum=0;

while(i<=100) {sum=sum+i;i++;} printf(“Sum=%d\n”,sum);}#include<stdio.h>voidmain(){ inti=1,sum=0;

do { sum=sum+i; i++; }

while(i<=100); printf(“Sum=%d\n”,sum);}整理課件順序打印1-10的階乘,即1!,2!,…,10!本題的關(guān)鍵是求階乘數(shù)學(xué)上,n!=1·2·3·…·(n-1)·n整理課件外循環(huán)內(nèi)循環(huán)對比程序:(更優(yōu))#include<stdio.h>voidmain(){ inti=1; floatf=1;

while(i<=10) {f=f*i; printf("%2d!=%.0f\n",i,f); i++; }}思考一下:8-10的階乘#include<stdio.h>voidmain(){ inti=1,j;

floatf; while(i<=10) { j=1; f=1; while(j<=i) { f=f*j; j++; } printf(“%2d!=%.0f\n”,i,f); i++; }}整理課件

6.5用for語句實(shí)現(xiàn)循環(huán)一般形式:

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句表達(dá)式1:初始化表達(dá)式,只執(zhí)行一次表達(dá)式2:循環(huán)控制表達(dá)式,控制循環(huán)的結(jié)束表達(dá)式3:增量表達(dá)式,使表達(dá)式2趨向于假整理課件

6.5用for語句實(shí)現(xiàn)循環(huán)for語句的執(zhí)行過程:

(1)先求解表達(dá)式1。

(2)求解表達(dá)式2,若其值為真(非0),則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面第(3)步。若為假(值為0),則結(jié)束循環(huán)轉(zhuǎn)到第(5)步。

(3)求解表達(dá)式3。

(4)轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。

(5)循環(huán)結(jié)束,執(zhí)行for語句下面的一個(gè)語句

整理課件任意輸入10個(gè)數(shù),求平均值#include<stdio.h>voidmain(){ inti; floatx,sum=0; printf("Enter10numbersonebyone:\n");

for(i=1;i<=10;i++) { scanf("%f",&x); sum+=x; } printf("Averageis%f\n",sum/10);}整理課件例:順序打印1-10的階乘,即1!,2!,3!,…,10!#include<stdio.h>voidmain(){ inti,j; floatf;

for(i=1;i<=10;i++) { f=1;

for(j=1;j<=i;j++) f=f*j; printf("%2d!=%.0f\n",i,f); }}#include<stdio.h>voidmain(){ inti=1,j; floatf; while(i<=10) { j=1; f=1; while(j<=i) { f=f*j; j++; } printf(“%2d!=%.0f\n”,i,f); i++; }}整理課件例:打印幾何圖形對于這類問題,每行中星號(hào)的個(gè)數(shù)、總行數(shù)等都應(yīng)該用循環(huán)結(jié)構(gòu)進(jìn)行控制,而不是直接輸出若干行字符串#include<stdio.h>voidmain(){ inti,j;

for(i=1;i<=4;i++) { for(j=0;j<i;j++)putchar(''); for(j=1;j<=4;j++)putchar('*'); putchar('\n'); }}****************整理課件for語句的變化形式可以省略for語句的“表達(dá)式1”或“表達(dá)式3”,也可以都省略(“退化為”while語句)例:將用鍵盤輸入的若干字符順序輸出到屏幕上#include<stdio.h>voidmain(){ charch; for(;(ch=getchar())!=‘\n’;) putchar(ch);}整理課件

6.6循環(huán)的嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu)稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。三種循環(huán)(while循環(huán)、do-while循環(huán)和for循環(huán))可以互相嵌套。整理課件

6.6循環(huán)的嵌套下面幾種都是合法的形式:(1)

while()(2)do(3)for(;;){…{…{while()dofor(;;){…}{…}{…}}while();}}while();

整理課件

6.6循環(huán)的嵌套(4)

while()(5)for(;;)(6)do{…{…{…do{…}while()for(;;){}while(){}…{…}…}}}while()

整理課件錯(cuò)誤的嵌套形式循環(huán)必須是完整的,不允許內(nèi)外循環(huán)交叉嵌套

f=1; while(i<10) { i=1; do { f=f*i; i++; } }while(i<10);混亂的控制條件內(nèi)外循環(huán)的循環(huán)控制條件通常是分開的,相對獨(dú)立的

i=1;s=0; while(i<3) { s=s+f; i=1;f=1; while(i<5) { i+=2; f=f*i; } i++;}整理課件

6.7幾種循環(huán)的比較(1)四種循環(huán)都可以用來處理同一問題,一般情況下它們可以互相代替。但一般不提倡用goto型循環(huán)。(2)在while循環(huán)和do-while循環(huán)中,只在while后面的括號(hào)內(nèi)指定循環(huán)條件,因此為了使循環(huán)能正常結(jié)束,應(yīng)在循環(huán)體中包含使循環(huán)趨于結(jié)束的語句(如i++,或i=i+1等)。整理課件

6.7幾種循環(huán)的比較

for循環(huán)可以在表達(dá)式3中包含使循環(huán)趨于結(jié)束的操作,甚至可以將循環(huán)體中的操作全部放到表達(dá)式3中。因此for語句的功能更強(qiáng),凡用while循環(huán)能完成的,用for循環(huán)都能實(shí)現(xiàn)。

(3)用while和do-while循環(huán)時(shí),循環(huán)變量初始化的操作應(yīng)在while和do-while語句之前完成。而for語句可以在表達(dá)式1中實(shí)現(xiàn)循環(huán)變量的初始化。整理課件

6.7幾種循環(huán)的比較(4)while循環(huán)、do-while循環(huán)和for循環(huán),可以用break語句跳出循環(huán),用continue語句結(jié)束本次循環(huán)(break語句和continue語句見下節(jié))。而對用goto語句和if語句構(gòu)成的循環(huán),不能用break語句和continue語句進(jìn)行控制。

整理課件

6.8break語句和continue語句

6.8.1break語句

break語句可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提前結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句一般形式:

break;注意:break語句不能用于循環(huán)語句和switch語句之外的任何其他語句中。

整理課件

6.8break語句和continue語句

例:計(jì)算r=1到r=10時(shí)的圓面積,直到面積area大于100為止。

floatpi=3.14159;for(){area=pi*r*r;printf(″r=%f,area=%f\n″,r,area);}當(dāng)area>100時(shí),執(zhí)行break語句,提前結(jié)束循環(huán),即不再繼續(xù)執(zhí)行其余的幾次循環(huán)。r=1;r<=10;r++r=1;r<=10;r++if(area>100)break;整理課件

6.8break語句和continue語句

6.8.2continue語句

作用為結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定.一般形式:

continue;整理課件

6.8break語句和continue語句

continue語句和break語句的區(qū)別

continue語句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行。

while(表達(dá)式1)for

{…

if(表達(dá)式2)continue;

…}整理課件

6.8break語句和continue語句

continue和break的區(qū)別

break語句則是結(jié)束整個(gè)循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。

while(表達(dá)式1)for

{…if(表達(dá)式2)break;…}整理課件

6.9程序舉例

例6.6用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到某一項(xiàng)的絕對值小于為止。N-S圖表示算法

整理課件fabs(t()<=1e-6floats=1.0,pi=0;ints=1,n=1;while(){pi+=t;n+=2;s=-s;t=s/n;}pi*=4;整理課件

6.9程序舉例

例6.7

求Fibonacci數(shù)列前40個(gè)數(shù)。這個(gè)數(shù)列有如下特點(diǎn):第1,2兩個(gè)數(shù)為1,1。從第3個(gè)數(shù)開始,該數(shù)是其前面兩個(gè)數(shù)之和。即:F(1)=1(n=1)F(2)=1(n=2)F(n)=F(n-1)+F(n-2)

(n≥3)

算法如圖所示:整理課件

6.9程序舉例

例6.8

判斷m是否素?cái)?shù)。算法思想:讓m被2到除,如果m能被2~之中任何一個(gè)整數(shù)整除,則提前結(jié)束循環(huán),此時(shí)i必然小于或等于k(即);如果m不能被2~k(即)之間的任一整數(shù)整除,則在完成最后一次循環(huán)后,i還要加1,因此i=k+1,然后才終止循環(huán)。在循環(huán)之后判別i的值是否大于或等于k+1,若是,則表明未曾被2~k之間任一整數(shù)整除過,因此輸出“是素?cái)?shù)”。整理課件整理課件floatk;intm,i=2;scanf(“%d”,&m);while(i<=k){i++;}if()printf(“是素?cái)?shù)“);elseprintf(“不是素?cái)?shù)”);}k=sqrt(m);if(m%i==0)break;i>k+1整理課件

6.9程序舉例

例6.10

譯密碼。為使電文保密,往往按一定規(guī)律將其轉(zhuǎn)換成密碼,收報(bào)人再按約定的規(guī)律將其譯回原文。

思路:可以按以下規(guī)律將電文變成密碼:將字母A變成字母E,a變成e,即變成其后的第4個(gè)字母,W變成

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論