C程序設(shè)計課件3.2_第1頁
C程序設(shè)計課件3.2_第2頁
C程序設(shè)計課件3.2_第3頁
C程序設(shè)計課件3.2_第4頁
C程序設(shè)計課件3.2_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

循環(huán)結(jié)構(gòu)

在條件成立時,反復(fù)執(zhí)行某個程序段,這種程序結(jié)構(gòu)稱為循環(huán)結(jié)構(gòu),反復(fù)被執(zhí)行的程序段稱為循環(huán)體,這個條件稱為循環(huán)條件。循環(huán)語句循環(huán)結(jié)構(gòu)一般用循環(huán)語句來實現(xiàn)。C語言提供3種循環(huán)語句:while語句、do~while語句和for語句執(zhí)行過程(1)計算while后面圓括號中表達式的值,若其結(jié)果為非0,

轉(zhuǎn)(2);否則轉(zhuǎn)(3);(2)執(zhí)行循環(huán)體,轉(zhuǎn)(1);(3)退出循環(huán),執(zhí)行循環(huán)體下面的語句。特點:先判斷條件,后執(zhí)行循環(huán)體一、while語句一般形式

while(表達式)循環(huán)體其中,表達式是循環(huán)條件。非0表達式循環(huán)體0while語句流程圖voidmain(){inta,i,n=0,sum=0;printf("請輸入10個小于100的整數(shù):");

printf("n=%dsum=%d\n",n,sum);}while(

)

{

if(a%2==0)

{n++;sum+=a;}

i++;

}【例】從鍵盤上輸入10個小于100的整數(shù),輸出偶數(shù)的個數(shù)及偶數(shù)和。i=1;/*循環(huán)條件*//*修正循環(huán)變量*/程序1?/*循環(huán)變量賦初值*/#include"stdio.h"①循環(huán)體有可能一次也不執(zhí)行i<=10i<1②如果循環(huán)體不是空語句,不能在while后面的圓括號后加分號(;);×③循環(huán)體中要有使循環(huán)趨于結(jié)束的語句④當循環(huán)體是復(fù)合語句,必須用{}括起來scanf("%d",&a);一般形式

do循環(huán)體while(表達式);其中,表達式是循環(huán)條件。二、do-while語句執(zhí)行過程

(1)執(zhí)行循環(huán)體,轉(zhuǎn)(2);

(2)計算while后面圓括號中表達式的值,若其結(jié)果為非0,轉(zhuǎn)(1),否則轉(zhuǎn)(3);

(3)退出循環(huán),執(zhí)行循環(huán)體下面的語句。特點:先執(zhí)行循環(huán)體,后判斷條件do~while語句流程圖0表達式循環(huán)體非0#include"stdio.h"voidmain(){intn=0,sum;

sum=0;

do{

}while()printf("n=%dsum=%d\n",n,sum);}n++;sum+=n;sum<500/*循環(huán)變量賦初值*//*循環(huán)條件*//*修正循環(huán)變量*/程序2?【例】計算整數(shù)n的值,使1+2+3+…+n剛好大于或等于500。運行結(jié)果n=32sum=528

①do~while語句最后的分號(;)不可少②循環(huán)體中要有使循環(huán)趨于結(jié)束的語句③循環(huán)體至少執(zhí)行一次sum<0;×一般形式

for(表達式1;表達式2;表達式3)

循環(huán)體三、for語句執(zhí)行過程

(1)計算表達式1,轉(zhuǎn)2。

(2)計算表達式2,若其值為非0,轉(zhuǎn)(3);否則,轉(zhuǎn)5。

(3)執(zhí)行循環(huán)體,轉(zhuǎn)4。

(4)計算表達式3,轉(zhuǎn)2。

(5)退出循環(huán),執(zhí)行循環(huán)體下面的語句。非00表達式1表達式2循環(huán)體表達式3for語句流程圖特點:先判斷條件,后執(zhí)行循環(huán)體。非0#include"stdio.h"voidmain(){inti,sum;

printf("sum=%d\n",sum);}sum=0;

i=1;while(i<=100){sum+=i;

i++;}sum=0;

i=1;do{sum+=i;

i++;}while(i<=100);sum=0;

for(i=1;i<=100;i++)

sum+=i;while循環(huán)do~while循環(huán)【例】計算1~100之間的整數(shù)和。i=1:循環(huán)變量賦初值i<=100:循環(huán)條件

i++:修正循環(huán)變量程序3?for(sum=0,i=1;i<=100;sum+=i,i++);sum=0;for(i=1;i<=100;i++)sum+=i;(1)在for語句中,表達式1和表達式3經(jīng)常使用逗號表達式,用于簡化程序,提高程序運行效率,這也是逗號表達式的主要用途之一。循環(huán)體為空語句表達式1表達式3說明①表達式1省略

for(;表達式2;表達式3)循環(huán)體for(i=1;i<=100;i++)sum+=i;i=1;for(;i<=100;i++)sum+=i;此時應(yīng)在for語句之前給有關(guān)變量賦初值

(2)在for語句中,在分號(;)必須保留的前提條件下,三個表達式的任何一個都可以省略。

②表達式3省略

for(表達式1;表達式2;)循環(huán)體此時應(yīng)在循環(huán)體中修正循環(huán)變量for(i=1;i<=100;){sum+=i;}for(i=1;i<=100;i++)sum+=i;i++;③表達式2省略

for(表達式1;;表達式3)循環(huán)體此時認為表達式2的值始終為真(值為1),循環(huán)體中必須有使循環(huán)結(jié)束的語句(break語句或goto語句),否則是死循環(huán)。for(i=1;i<=100;i++)sum+=i;for(i=1;;i++){if(i<=100)sum+=i;else;}break1④表達式1和表達式3同時省略

for(;表達式2;)循環(huán)體

此時應(yīng)在for語句之前給變量賦初值,在循環(huán)體中修正循環(huán)變量,等同于while語句。i=1;

{sum+=i;}for(i=1;i<=100;i++)sum+=i;while(i<=100)for(;i<=100;)i++;⑤表達式1和表達式2同時省略

for(;;表達式3)循環(huán)體

for(;;i++){

sum+=i;}此時應(yīng)在for語句之前給變量賦初值,在循環(huán)體中用break語句或goto語句退出循環(huán)。for(i=1;i<=100;i++)sum+=i;i=1;if(i>100)break;⑥表達式2和表達式3同時省略

for(表達式1;;)循環(huán)體

for(i=1;;){

sum+=i;

}此時應(yīng)在循環(huán)體中修正循環(huán)變量,在循環(huán)體中用break語句或goto語句退出循環(huán)。for(i=1;i<=100;i++)sum+=i;

i++;if(i>100)break;⑦三個表達式同時省略

for(;;)循環(huán)體

{sum+=i;

}此時應(yīng)在for語句之前給變量賦初值,在循環(huán)體中修正循環(huán)變量,在循環(huán)體中用break語句或goto語句退出循環(huán),相當于:while(1)循環(huán)體for(i=1;i<=100;i++)sum+=i;i=1;if(i>100)break;i++;for(;;)while(1)#include"stdio.h"Voidmain(){inti,j;

}for(i=1;i<=9;i++){

}printf("%d*%d=%-4d",j,i,j*i);for(j=1;j<=i;j++)一種循環(huán)語句的循環(huán)體中又有循環(huán)語句,稱為循環(huán)語句的嵌套。三種循環(huán)語句可以互相嵌套,并且可以嵌套多層?!纠枯敵鼍啪懦朔ū怼rintf("\n");/*j是被乘數(shù),i是乘數(shù)*/四、循環(huán)語句的嵌套/*換行*/程序4?1.break語句一般形式

break;功能(1)用于switch~case語句時,退出所在的switch~case語句,程序轉(zhuǎn)至switch~case語句下面的語句。五、break語句和continue語句#include"stdio.h"voidmain(){intx=1,a=0,b=0;switch(x){case0:b++;case1:a++;

case2:a++;b++;}printf("%d,%d\n",a,b);}break;(2)用于循環(huán)語句時,退出所在的循環(huán)體,程序轉(zhuǎn)至循環(huán)體下面的語句。

#include"stdio.h"voidmain(){inti,sum;sum=0;for(i=1;;i++){if(i>100)sum+=i;}

printf("sum=%d\n",sum);}break;#include"stdio.h"voidmain(){intm,i,k;

}【例】判斷輸入的正整數(shù)是否為素數(shù),如果是素數(shù),輸出Yes,否則輸出No。scanf("m=%d",&m);k=m-1;for(i=2;i<=k;i++)if(m%i==0)break;if(i>=m)printf("Yes");elseprintf("No");程序5?/*或k=m/2,或k=sqrt(m)*//*m保存讀入的正整數(shù)*/一般形式

continue;2.continue語句功能結(jié)束本次循環(huán),跳過循環(huán)體中尚未執(zhí)行的部分,進行下一次是否執(zhí)行循環(huán)體的判斷。(1)在while語句和do~while語句中,continue把程序控制轉(zhuǎn)到while后面的表達式處。(2)在for語句中,continue把程序控制轉(zhuǎn)到表達式3處。

while(表達式){…

continue;…}do{…

continue;…}while(表達式);for(表達式1;表達式2;表達式3){…

continue;…}#include"stdio.h"voidmain(){inti,n2=0,n4=0,n8=0;

for(i=1;i<=100;i++){

n2++;

n4++;

n8++;

}printf("n2=%dn4=%dn8=%d\n",n2,n4,n8);}if(i%2)continue;/*轉(zhuǎn)至i++處*//*轉(zhuǎn)至i++處*//*轉(zhuǎn)至i++處*/程序6?【例】計算1~100之間分別能夠被2、4、8整除的整數(shù)個數(shù)。if(i%4)continue;if(i%8)continue;①break語句只能用于循環(huán)體和switch~case語句中;continue語句只能用于循環(huán)體中。說明②用于循環(huán)體時,break語句終止整個循環(huán);continue語句只是結(jié)束本次循環(huán)。while(表達式){…

break;…}…while(表達式){…

continue;…}…③在循環(huán)嵌套的情況下,break語句僅僅退出包含它的最內(nèi)層的循環(huán)語句的循環(huán)體。④在switch~case語句嵌套的情況下,break語句

僅僅退出包含它的最內(nèi)層的switch~case語句。while(表達式){…

do{…break;…}while(表達式);…break;…}…switch(表達式){…

switch(表達式){…break;…}…break;…}…一般形式

goto語句標號;其中,語句標號是一個標識符,在goto語句所在的函數(shù)中必須存在,并且其后必須跟一個冒號(:),冒號的后面可以為空,也可以是任何語句。六、goto語句(無條件轉(zhuǎn)移語句)用途一是與if語句一起實現(xiàn)循環(huán);二是從循環(huán)嵌套的內(nèi)層循環(huán)跳到外層循環(huán)外。功能無條件地將程序控制轉(zhuǎn)至語句標號處。#include"stdio.h"voidmain(){inta,sum=0;

loop1:

/*語句標號*/scanf("%d",&a);sum+=a>0?a:-a;if(a!=0)gotoloop1;

printf("sum=%d",sum);}程序7?【例】輸入一組數(shù),以0結(jié)束,求該組數(shù)據(jù)的絕對值之和。①使用goto語句只能實現(xiàn)在同一個函數(shù)內(nèi)跳轉(zhuǎn),可以向前跳轉(zhuǎn),也可以向后跳轉(zhuǎn),但不能實現(xiàn)從一個函數(shù)跳轉(zhuǎn)到其他函數(shù)。說明fun1(){…

L1:…

gotoL1;…}fun1(){…

gotoL1;…

L1:…}fun1(){…

gotoL1;…}fun2(){…

L1:…}×③goto語句使程序流程無規(guī)律,可讀性差,不符合結(jié)構(gòu)化原則,一般不宜采用,只有在不得已時才使用。②只能從循環(huán)嵌套的內(nèi)循環(huán)跳轉(zhuǎn)到外循環(huán),不能從外循環(huán)跳轉(zhuǎn)到內(nèi)循環(huán)。while(表達式){…

do{…

gotoL1;…

}while(表達式);…

L1:…}while(表達式){…

do{…

L1:…

}while(表達式);…

gotoL1;…}×2.若有定義:intx,y;,則循環(huán)語句for(x=0,y=0;(y!=123)||(x<4);x++);的循環(huán)次數(shù)為()。

不確定次

無限次

4次

3次1.C語言中,while和do-while循環(huán)的主要區(qū)別是()。

①while的循環(huán)條件比do-while的循環(huán)條件嚴格

②do-while的循環(huán)體可以是復(fù)合語句

③do-while的循環(huán)體至少無條件執(zhí)行一次

④do-while允許從外部轉(zhuǎn)到循環(huán)體內(nèi)練習題一、單項選擇題③②3.下列程序運行后的輸出結(jié)果是()。#include<stdio.h>

voidmain(){inti,n=0;for(i=2;i<5;i++){do{if(i%3)continue;n++;}while(!i);n++;}printf("n=%d\n",n);}①n=5②n=2③n=3④n=44.下列程序運行后的輸出結(jié)果是()。

#include<stdio.h>voidmain(){intm=14,n=63;while(m!=n)

{while(m>n)m=m-n;while(m<n)n=n-m;}printf("%d\n",m);}①7②63③14④0④①2.以下程序的功能是計算s=1+12+123+1234+12345。#include<stdio.h>

voidmain(){intt=0,

,i;

for(i=1;i<=5;i++)

{t=i+

;s=s+t;}printf("s=%d\n",s);

}1.下面程序的功能是輸出100以內(nèi)能被3整除且個位數(shù)為6的所有正整數(shù)。#include<stdio.h>voidmain(){inti,j;for(i=0;

;i++)

{j=i*10+6;if(

)continue;printf("%d",j);}}二、填空題i<10j%3s=0t*101.下列程序的運行結(jié)果是()

#include<stdio.h>voidmain(){intn=2,k=0;

while(n<5)k=n++;printf("%d,%d\n",k,n);}三、閱讀程序,寫出運行結(jié)果2.下列程序的運行結(jié)果是()

#include<stdio.h>voidmain(){inti,j,s=0;

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論