C語言循環(huán)控制_第1頁
C語言循環(huán)控制_第2頁
C語言循環(huán)控制_第3頁
C語言循環(huán)控制_第4頁
C語言循環(huán)控制_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

程序的結(jié)構(gòu):

順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)第6章循環(huán)結(jié)構(gòu)OUTLINE

C語言的三種循環(huán)語句

while語句

do…while語句

for語句

與循環(huán)語句相關(guān)的程序控制語句即:

break、continue、goto語句本章學習注意事項

各循環(huán)語句的執(zhí)行過程循環(huán)的初始條件循環(huán)何時終止,如何控制?if與goto構(gòu)成的循環(huán)請先看下面一段程序:main(){ints=0,i=1;

loop:if(i<100){s=s+i;i=i+1;

goto

loop;}

printf(“s=%d\n”,s);}loop:語句標號goto

loop:無條件轉(zhuǎn)向語句if與goto構(gòu)成了循環(huán)

格式:

goto

語句標號;

功能:將程序控制轉(zhuǎn)移到“語句標號”標識的語句執(zhí)行。

無條件轉(zhuǎn)向語句:goto語句標號:

用標識符表示

用來標識語句,它出現(xiàn)在語句的前面,用冒號(:)與語句分開,使用格式為:

語句標號:語句;p1:printf(“hello!”);

printf(“world!”);

….

gotop1;2a:printf(“thisisabook!”);

goto2a;

×

語句標號僅對goto語句有意義,通常只給goto語句要轉(zhuǎn)去的語句加標號。

格式:

語句標號:if(表達式)

{語句;

goto

語句標號;}

執(zhí)行過程:當if中的表達式為真時,執(zhí)行循環(huán)體,為假時跳出循環(huán),執(zhí)行循環(huán)體下面的語句。

用if和goto語句構(gòu)成循環(huán)循環(huán)體說明:goto語句容易造成程序不清晰,不利于實現(xiàn)結(jié)構(gòu)化程序設(shè)計,因此,最好不用在程序中使用它。while語句實現(xiàn)當型循環(huán)

格式:

while(表達式)

{循環(huán)體;}

執(zhí)行過程:先求解表達式的值。判斷表達式的值,為真則執(zhí)行循環(huán)體。再判斷表達式的值,重復上述工作。當表達式的

值為假時退出循環(huán)。

執(zhí)行過程用流程圖表示為:循環(huán)體表達式flasetrue

循環(huán)控制的實現(xiàn)??疾煜铝懈骼?,總結(jié)控制循環(huán)執(zhí)行的方式。例6-1`、main(){

inti=1,sum=0;

while(i<=100){sum+=i;i++;}}i不僅參與運算,還要控制循環(huán)。注意:循環(huán)體用{}括起來;

初始值:i=1,sum=0;

循環(huán)條件:i<=100

循環(huán)控制:i++;循環(huán)控制方式之一:計數(shù)法這后面沒有分號將內(nèi)嵌語句用大括號括起來形成復合語句。#include<stdio.h>main(){charc;

c=getchar();

while(c!=‘\n’){switch(c-’2’){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;}

c=getchar();}}例2while((c=getchar())!=‘\n’)表達更為簡潔。循環(huán)控制方式之二:標志法

只要滿足一定條件,需要多少次就運行多少次。

初始值:無;

循環(huán)條件:(c=getchar())!=‘\n’

循環(huán)控制:輸入的字符while((c=getchar())!=‘\n’)while(c=getchar()!=‘\n’)×#include<stdio.h>main(){charc;

while((c=getchar())!=‘\n’){switch(c-’2’){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;}}}Example6.1-Programmain()/*計算y=xn*/{

intcount,n; floatx,y;

printf("Enterthevaluesofxandn:");

scanf("%f%d",&x,&n); y=1.0; count=1; /*Initialization*/ /*LoopBegins*/ while(count<=n) /*Testing*/ { y=y*x; count++; /*Incrementing*/ } /*EndofLoop*/

printf("\nx=%f;n=%d;xtopowern=%f\n",x,n,y);}while循環(huán)控制語句:例例:編程計算1+2+22+23+...+264voidmain(){doublesum=0,p=1;

inti=1;

while(i<=64){sum+=p;p*=2;i++;}printf(“%.7le\n”,sum);

getch();}◆

1.下面程序執(zhí)行的結(jié)果是()。voidmain(){

intn=0;while(n=0)n=n-1;

printf(“n=%d\n”,n);}(A)n=0 (B)while構(gòu)成無限循環(huán)(C)n=1 (D)n=-1課堂練習:while語句答案:(A)◆

2.下面程序執(zhí)行的結(jié)果是()。voidmain(){

intn=0;while(n==0)n=n-1;

printf(“n=%d\n”,n);}(A)n=0 (B)while構(gòu)成無限循環(huán)(C)n=1 (D)n=-1課堂練習:while語句答案:(D)課堂練習:while語句◆

3.下面程序執(zhí)行的結(jié)果是()。voidmain(){

intn=1;while(n=1)n=n-1;

printf(“n=%d\n”,n);}(A)n=0 (B)while構(gòu)成無限循環(huán)(C)n=1 (D)n=-1答案:(B)課堂練習:while語句◆

4.下面程序執(zhí)行的結(jié)果是()。voidmain(){

intn=1;while(n=n-1)n=n-1;

printf(“n=%d\n”,n);}(A)n=0 (B)while構(gòu)成無限循環(huán)(C)n=1 (D)n=-1答案:(A)課堂練習:while語句◆5.下面程序執(zhí)行的結(jié)果是()。voidmain(){

intn=2;while(n=n-1)n=n-1;

printf(“n=%d\n”,n);}(A)n=0 (B)while構(gòu)成無限循環(huán)(C)n=1 (D)n=-1答案:(B)◆6.寫出下面程序運行的結(jié)果。voidmain(){

intnum=18,bin=0;

while(num){bin=num%2;num=num/2;

printf(“%d”,bin);}}課堂練習:while語句答案:01001◆7.寫出下面程序運行的結(jié)果。voidmain(){

intnum=123,sum=0;

while(num){sum=sum+num%10;num=num/10;}

printf(“sum=%d”,sum);}課堂練習:while語句答案:sum=6dowhile循環(huán)直到型循環(huán)

格式:

do{循環(huán)體;}while(表達式);

執(zhí)行過程:先執(zhí)行循環(huán)體。再求解表達式的值,判斷,為真則執(zhí)行循環(huán)體,否則退出循環(huán)。

執(zhí)行過程用流程圖表示為:循環(huán)體語句表達式flasetrue例1_2main(){

inti=1,sum=0;do{sum+=i;i++;}while(i<=100);}采用的是什么循環(huán)結(jié)束控制方法?計數(shù)法

應用例:main(){int

i,flag;i=0;flag=0;do{i++;if(i%3==2&&i%5==3&&i%7==2)flag=1;}while(flag!=1);

printf(“i=%d\n”,i);}

采用的是什么循環(huán)結(jié)束控制方法?標志法調(diào)試下列程序,并指出是實現(xiàn)的什么功能。main(){intk,num;k=1;num=26;do{k*=num%10;num/=10;}while(num);printf("k=%d\n",k);}

while與do..while:

while:先判定表達式,后執(zhí)行循環(huán);

do…while:先執(zhí)行循環(huán),再判斷表達式;

即:do…while語句的循環(huán)體至少會被執(zhí)行一次。inti=0;while(i){…}inti=0;do{…}while(i);執(zhí)行0次執(zhí)行1次除循環(huán)體一次都不執(zhí)行的情況外,while與

do…while可以互相轉(zhuǎn)換。for語句步長型循環(huán)

格式:

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

{循環(huán)體;}

執(zhí)行過程:執(zhí)行表達式1(初始化表達式);判斷表達式2,為真則執(zhí)行循環(huán)體,否則退出循環(huán);執(zhí)行表達式3(修正表達式);再判斷表達式2,…

重復上述過程,直到表達式2值為假。

執(zhí)行過程用流程圖表示為:求解表達式1表達式2flasetrue循環(huán)體語句求解表達式3for語句的下一語句for語句一般說來,for語句的格式可以理解為如下形式:for(初始化表達式;條件表達式;修正表達式)

{循環(huán)體語句}例如:求1——100的和

inti,sum=0;

for(i=1;i<=100;i++){sum=sum+i;}sum=sum+iTFi<=100i=1i++由for語句流程圖可以看出,可以有以下幾種省略形式:

表達式1省略,但不能省略分號。但給循環(huán)變量賦初值應在for語句前完成。例如:

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

表達式3省略,但不能省略分號。但要將表達式3包含到循環(huán)體中。例如:

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

i++;}

表達式1、3省略,但不能省略分號。但要將在for語句前賦初值,并將表達式3包含到循環(huán)體中。此時相當于while循環(huán)。例如:

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

i++;}

表達式2省略,但不能省略分號。但要在循環(huán)體中控制循環(huán)的結(jié)束。例如:

for(i=1;;i++){…

if(i>100)break;

…}

表達式1、2、3省略,但不能省略分號。但要在循環(huán)體中控制循環(huán)的結(jié)束。此時,相當于while(1)語句。例如:

i=1;for(;;){…

if(i>100)break;

i++;

…}

表達式1、3可以是一個簡單的表達式,也可以是逗號表達式。如:

sum=0;for(i=1;i<100;i++)可以寫為:

for(sum=0,i=1;i<100;i++)◆1.寫出下面程序運行的結(jié)果。voidmain(){charch;

for(ch=‘A’;ch<‘G’;ch=ch+1){

printf(“%c”,ch);}}課堂練習:for語句答案:ABCDEF◆2.寫出下面程序運行的結(jié)果。voidmain(){charch=‘a(chǎn)’;intn;

for(n=1;n<=5;n=n+1){if(n%2==0)ch=ch+33;elsech=ch–32;

printf(“%c”,ch);}}課堂練習:for語句答案:AbBcC◆3.寫出下面程序運行的結(jié)果。voidmain(){

inta=2,i,sum=0,temp=0;for(i=1;i<=4;i=i+1){temp=temp*10+a;sum=sum+temp;}

printf(“sum=%d”,sum);}課堂練習:for語句答案:sum=2468◆4.寫出下面程序運行的結(jié)果。voidmain(){

inti,f1=1,f2=1,f3,sum=0;for(i=1;i<=4;i=i+1){f3=f1+f2;sum=sum+f3;f1=f2;f2=f3;}

printf(“sum=%d”,sum);}課堂練習:for語句答案:sum=18◆5.寫出下面程序運行的結(jié)果。voidmain(){

inti,f1=1,f2=1,sum=0;for(i=1;i<=3;i=i+1){sum=sum+f1+f2;f1=f1+f2;f2=f2+f1;}

printf(“sum=%d”,sum);}課堂練習:for語句答案:sum=20break語句跳出循環(huán)體或switch結(jié)構(gòu)注意:只跳出本層次循環(huán)Example6.5Theprogramreadsalistofpositivevaluesandcalculatestheiraverage.main(){

intm; floatx,sum,average;

printf("Thisprogramcomputestheaverageofasetof numbers\n");

printf("Entervaluesoneafteranother\n");

printf("EnteraNEGATIVEnumberattheend.\n\n"); sum=0;

for(m=1;m<=1000;++m) {

scanf("%f",&x);

if(x<0)

break; sum+=x; } average=sum/(float)(m-1);

printf("\n");

printf("Numberofvalues=%d\n",m-1);

printf("Sum =%f\n",sum);

printf("Average =%f\n",average);}continue語句

格式:

continue;

功能:結(jié)束本次循環(huán),接著進行下一次循環(huán)。Example6.7Theprogramevaluatesthesquarerootofaseriesofnumberandprintstheresults.Theprocessstopswhenthenumber9999istypedin.#include<math.h>main(){

intcount,negative; doublenumber,sqroot;

printf("Enter9999toSTOP\n"); count=0; negative=0;

while(count<=100) {

printf("Enteranumber:");

scanf("%lf",&number);

if(number==9999)

break; /*EXITFROMTHELOOP*/

if(number<0) {

printf("Numberisnegative\n\n"); negative++;

continue; /*SKIPRESTOFTHELOOP*/ }

sqroot=sqrt(number);

printf("Number=%lf\nSquareroot=%lf\n\n",number,sqroot); count++; }

printf("Numberofitemsdone=%d\n",count);

printf("\n\nNegativeitems=%d\n",negative);

printf("ENDOFDATA\n");}break、continue例1main(){

inti;

for(i=1;;i++){if(i==5)break;

printf(“%d”,i*i);}

printf(“*”);}結(jié)果:14916*break、continue例2main(){

intn;

for(n=100;n<=200;n++){if(n%3==0)continue;

printf(“%d”,n);}}輸出100—200間所有不能被3整除的數(shù)break、continue例3#include<stdio.h>main(){int

a,b;

for(a=1,b=1;a<=100;a++){if(b>=20)break;if(b%3==1){b+=3;continue;}b-=5;}

printf(“%d\n”,a);}A)7B)8C)9D)10答案:Bbreak、continue例4main(){intk=0;charc=‘A’;do{switch(c++){case‘A’:k++;break;case‘B’:k--;case‘C’:k+=2;break;case‘D’:k=k%2;continue;case‘E’:k=k*10;break;default:k=k/3;}k++;}while(c<‘G’);

printf(“k=%d\n”,k);}k=3B)k=4C)k=2D)k=0答案:Bbreak、continue例5main(){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(“x=%d\n”,x);}x=4B)x=8C)x=6D)x=12答案:B

#include<math.h>

#include<stdio.h>

main(){intm,k,i;

scanf(“%d”,&m);k=(int)sqrt(m);for(i=2;i<=k;i++)if(m%i==0)

break;

if(i>=k+1)

printf("%disaprimenumber!\n",m);

else

printf("%disnotaprimenumber!\n",m);

}例:判斷m是否為素數(shù)讀入mk=sqrt(m)I=2當I<=km被I整除真假用break結(jié)束循環(huán)I=I+1I>=k+1真假輸出是素數(shù)輸出不是素數(shù)

和break語句對比:

breakcontinue環(huán)境可用在循環(huán)語句與switch語句只能用在循環(huán)語句功能跳出當前整個循環(huán)語句與switch語句跳出本次循環(huán),繼續(xù)下一次循環(huán)均不能控制if…goto構(gòu)成的循環(huán)在多重循環(huán)中,break用于跳出本層循環(huán)。循環(huán)語句嵌套及應用循環(huán)嵌套:例1#include<stdio.h>main(){int

i,j,x=0,y=0;

for(i=0;i<2;i++){x++;for(j=0;j<=3;j++){if(j%2)x=x+2;y++;}x++;}

printf(“x=%d,y=%d”,x,y);}外層循環(huán)內(nèi)層循環(huán)結(jié)果:x=12,y=8Program6_2Aprogramtoprintthemultiplicationtablefrom1×1to12×10asshownbelowisgiven:

12345678910246810121416182036912151821242730481216202428323640510152025303540455061218243036424854607142128354249566370816243240485664728091827364554637281901020304050607080901001122334455667788991101224364860728496108120#defineCOLMAX10#defineROWMAX12main(){

introw,column,y; row=1;

printf("MULTIPLICATIONTABLE\n");

printf("------------------------------------------\n"); do /*........OUTERLOOPBEGINGS..........*/ { column=1; do /*..........INNERLOOPBEGINS..........*/ { y=row*column; printf("%4d",y); column=column+1; }

while(column<=COLMAX);/*INNERLOOPENDS*/

printf("\n"); row=row+1; }

while(row<=ROWMAX);/*...OUTERLOOPSENDS...*/

printf("------------------------------------------\n");}6_2B#defineCOLMAX10#defineROWMAX12main(){

introw,column,y;row=1;

printf("MULTIPLICATIONTABLE\n");

printf("------------------------------------------\n");

while(row<=ROWMAX)/*........OUTERLOOPBEGINGS..........*/{column=1;

while(column<=COLMAX){y=row*column;printf("%4d",y);column=column+1;}/*INNERLOOPENDS*/

printf("\n");row=row+1;}printf("------------------------------------------\n");}用for來實現(xiàn)呢?

例:請看下面一段程序。(循環(huán)的嵌套)main(){int

i,j;

for(i=5;i;i--){for(j=0;j<4;j++)

printf(“*”);

printf(“\n”);}}main(){int

i,j;

for(i=5;i;i--){for(j=0;j<i;j++)

printf(“*”);

printf(“\n”);}}****

****

****

****

*********

****

***

**

*思考:main(){int

i,j;

for(i=5;i;i--){for(j=0;j<4;j++)

{if(j%2==0)break;

printf(“*”);}

printf(“\n”);}}無輸出main(){int

i,j;

for(i=5;i;i--){for(j=0;j<4;j++)

{if(j%2==0)continue;

printf(“*”);}

printf(“\n”);}}**

**

**

**

*******************************************例.

輸出下列圖形#include<stdio.h>voidmain(){inti,j,k;

for(i=1;i<=5;i++)/*菱形圖的第一至第五行*/{ for(j=1;j<=5-i;j++)/*空格數(shù)5-i個*/

printf("");

for(k=1;k<=2*i-1;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論