版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
程序的結(jié)構(gòu):
順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)第6章循環(huán)結(jié)構(gòu)OUTLINE
C語(yǔ)言的三種循環(huán)語(yǔ)句
while語(yǔ)句
do…while語(yǔ)句
for語(yǔ)句
與循環(huán)語(yǔ)句相關(guān)的程序控制語(yǔ)句即:
break、continue、goto語(yǔ)句本章學(xué)習(xí)注意事項(xiàng)
各循環(huán)語(yǔ)句的執(zhí)行過(guò)程循環(huán)的初始條件循環(huán)何時(shí)終止,如何控制?if與goto構(gòu)成的循環(huán)請(qǐng)先看下面一段程序:main(){ints=0,i=1;
loop:if(i<100){s=s+i;i=i+1;
goto
loop;}
printf(“s=%d\n”,s);}loop:語(yǔ)句標(biāo)號(hào)goto
loop:無(wú)條件轉(zhuǎn)向語(yǔ)句if與goto構(gòu)成了循環(huán)
格式:
goto
語(yǔ)句標(biāo)號(hào);
功能:將程序控制轉(zhuǎn)移到“語(yǔ)句標(biāo)號(hào)”標(biāo)識(shí)的語(yǔ)句執(zhí)行。
無(wú)條件轉(zhuǎn)向語(yǔ)句:goto語(yǔ)句標(biāo)號(hào):
用標(biāo)識(shí)符表示
用來(lái)標(biāo)識(shí)語(yǔ)句,它出現(xiàn)在語(yǔ)句的前面,用冒號(hào)(:)與語(yǔ)句分開(kāi),使用格式為:
語(yǔ)句標(biāo)號(hào):語(yǔ)句;p1:printf(“hello!”);
printf(“world!”);
….
gotop1;2a:printf(“thisisabook!”);
…
goto2a;
×
語(yǔ)句標(biāo)號(hào)僅對(duì)goto語(yǔ)句有意義,通常只給goto語(yǔ)句要轉(zhuǎn)去的語(yǔ)句加標(biāo)號(hào)。
格式:
語(yǔ)句標(biāo)號(hào):if(表達(dá)式)
{語(yǔ)句;
goto
語(yǔ)句標(biāo)號(hào);}
執(zhí)行過(guò)程:當(dāng)if中的表達(dá)式為真時(shí),執(zhí)行循環(huán)體,為假時(shí)跳出循環(huán),執(zhí)行循環(huán)體下面的語(yǔ)句。
用if和goto語(yǔ)句構(gòu)成循環(huán)循環(huán)體說(shuō)明:goto語(yǔ)句容易造成程序不清晰,不利于實(shí)現(xiàn)結(jié)構(gòu)化程序設(shè)計(jì),因此,最好不用在程序中使用它。while語(yǔ)句實(shí)現(xiàn)當(dāng)型循環(huán)
格式:
while(表達(dá)式)
{循環(huán)體;}
執(zhí)行過(guò)程:先求解表達(dá)式的值。判斷表達(dá)式的值,為真則執(zhí)行循環(huán)體。再判斷表達(dá)式的值,重復(fù)上述工作。當(dāng)表達(dá)式的
值為假時(shí)退出循環(huán)。
執(zhí)行過(guò)程用流程圖表示為:循環(huán)體表達(dá)式flasetrue
循環(huán)控制的實(shí)現(xiàn)。考察下列各例,總結(jié)控制循環(huán)執(zhí)行的方式。例6-1`、main(){
inti=1,sum=0;
while(i<=100){sum+=i;i++;}}i不僅參與運(yùn)算,還要控制循環(huán)。注意:循環(huán)體用{}括起來(lái);
初始值:i=1,sum=0;
循環(huán)條件:i<=100
循環(huán)控制:i++;循環(huán)控制方式之一:計(jì)數(shù)法這后面沒(méi)有分號(hào)將內(nèi)嵌語(yǔ)句用大括號(hào)括起來(lái)形成復(fù)合語(yǔ)句。#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’)表達(dá)更為簡(jiǎn)潔。循環(huán)控制方式之二:標(biāo)志法
只要滿(mǎn)足一定條件,需要多少次就運(yùn)行多少次。
初始值:無(wú);
循環(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()/*計(jì)算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)控制語(yǔ)句:例例:編程計(jì)算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)成無(wú)限循環(huán)(C)n=1 (D)n=-1課堂練習(xí):while語(yǔ)句答案:(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)成無(wú)限循環(huán)(C)n=1 (D)n=-1課堂練習(xí):while語(yǔ)句答案:(D)課堂練習(xí):while語(yǔ)句◆
3.下面程序執(zhí)行的結(jié)果是()。voidmain(){
intn=1;while(n=1)n=n-1;
printf(“n=%d\n”,n);}(A)n=0 (B)while構(gòu)成無(wú)限循環(huán)(C)n=1 (D)n=-1答案:(B)課堂練習(xí):while語(yǔ)句◆
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)成無(wú)限循環(huán)(C)n=1 (D)n=-1答案:(A)課堂練習(xí):while語(yǔ)句◆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)成無(wú)限循環(huán)(C)n=1 (D)n=-1答案:(B)◆6.寫(xiě)出下面程序運(yùn)行的結(jié)果。voidmain(){
intnum=18,bin=0;
while(num){bin=num%2;num=num/2;
printf(“%d”,bin);}}課堂練習(xí):while語(yǔ)句答案:01001◆7.寫(xiě)出下面程序運(yùn)行的結(jié)果。voidmain(){
intnum=123,sum=0;
while(num){sum=sum+num%10;num=num/10;}
printf(“sum=%d”,sum);}課堂練習(xí):while語(yǔ)句答案:sum=6dowhile循環(huán)直到型循環(huán)
格式:
do{循環(huán)體;}while(表達(dá)式);
執(zhí)行過(guò)程:先執(zhí)行循環(huán)體。再求解表達(dá)式的值,判斷,為真則執(zhí)行循環(huán)體,否則退出循環(huán)。
執(zhí)行過(guò)程用流程圖表示為:循環(huán)體語(yǔ)句表達(dá)式flasetrue例1_2main(){
inti=1,sum=0;do{sum+=i;i++;}while(i<=100);}采用的是什么循環(huán)結(jié)束控制方法?計(jì)數(shù)法
應(yīng)用例: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é)束控制方法?標(biāo)志法調(diào)試下列程序,并指出是實(shí)現(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:先判定表達(dá)式,后執(zhí)行循環(huán);
do…while:先執(zhí)行循環(huán),再判斷表達(dá)式;
即:do…while語(yǔ)句的循環(huán)體至少會(huì)被執(zhí)行一次。inti=0;while(i){…}inti=0;do{…}while(i);執(zhí)行0次執(zhí)行1次除循環(huán)體一次都不執(zhí)行的情況外,while與
do…while可以互相轉(zhuǎn)換。for語(yǔ)句步長(zhǎng)型循環(huán)
格式:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{循環(huán)體;}
執(zhí)行過(guò)程:執(zhí)行表達(dá)式1(初始化表達(dá)式);判斷表達(dá)式2,為真則執(zhí)行循環(huán)體,否則退出循環(huán);執(zhí)行表達(dá)式3(修正表達(dá)式);再判斷表達(dá)式2,…
重復(fù)上述過(guò)程,直到表達(dá)式2值為假。
執(zhí)行過(guò)程用流程圖表示為:求解表達(dá)式1表達(dá)式2flasetrue循環(huán)體語(yǔ)句求解表達(dá)式3for語(yǔ)句的下一語(yǔ)句for語(yǔ)句一般說(shuō)來(lái),for語(yǔ)句的格式可以理解為如下形式:for(初始化表達(dá)式;條件表達(dá)式;修正表達(dá)式)
{循環(huán)體語(yǔ)句}例如:求1——100的和
inti,sum=0;
for(i=1;i<=100;i++){sum=sum+i;}sum=sum+iTFi<=100i=1i++由for語(yǔ)句流程圖可以看出,可以有以下幾種省略形式:
表達(dá)式1省略,但不能省略分號(hào)。但給循環(huán)變量賦初值應(yīng)在for語(yǔ)句前完成。例如:
…
i=1;for(;i<=100;i++){…}
表達(dá)式3省略,但不能省略分號(hào)。但要將表達(dá)式3包含到循環(huán)體中。例如:
…for(i=1;i<=100;){…
i++;}
表達(dá)式1、3省略,但不能省略分號(hào)。但要將在for語(yǔ)句前賦初值,并將表達(dá)式3包含到循環(huán)體中。此時(shí)相當(dāng)于while循環(huán)。例如:
…
i=1;for(;i<=100;){…
i++;}
表達(dá)式2省略,但不能省略分號(hào)。但要在循環(huán)體中控制循環(huán)的結(jié)束。例如:
…
for(i=1;;i++){…
if(i>100)break;
…}
表達(dá)式1、2、3省略,但不能省略分號(hào)。但要在循環(huán)體中控制循環(huán)的結(jié)束。此時(shí),相當(dāng)于while(1)語(yǔ)句。例如:
…
i=1;for(;;){…
if(i>100)break;
i++;
…}
表達(dá)式1、3可以是一個(gè)簡(jiǎn)單的表達(dá)式,也可以是逗號(hào)表達(dá)式。如:
sum=0;for(i=1;i<100;i++)可以寫(xiě)為:
for(sum=0,i=1;i<100;i++)◆1.寫(xiě)出下面程序運(yùn)行的結(jié)果。voidmain(){charch;
for(ch=‘A’;ch<‘G’;ch=ch+1){
printf(“%c”,ch);}}課堂練習(xí):for語(yǔ)句答案:ABCDEF◆2.寫(xiě)出下面程序運(yùn)行的結(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);}}課堂練習(xí):for語(yǔ)句答案:AbBcC◆3.寫(xiě)出下面程序運(yùn)行的結(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);}課堂練習(xí):for語(yǔ)句答案:sum=2468◆4.寫(xiě)出下面程序運(yùn)行的結(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);}課堂練習(xí):for語(yǔ)句答案:sum=18◆5.寫(xiě)出下面程序運(yùn)行的結(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);}課堂練習(xí):for語(yǔ)句答案:sum=20break語(yǔ)句跳出循環(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語(yǔ)句
格式:
continue;
功能:結(jié)束本次循環(huán),接著進(jì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是否為素?cái)?shù)讀入mk=sqrt(m)I=2當(dāng)I<=km被I整除真假用break結(jié)束循環(huán)I=I+1I>=k+1真假輸出是素?cái)?shù)輸出不是素?cái)?shù)
和break語(yǔ)句對(duì)比:
breakcontinue環(huán)境可用在循環(huán)語(yǔ)句與switch語(yǔ)句只能用在循環(huán)語(yǔ)句功能跳出當(dāng)前整個(gè)循環(huán)語(yǔ)句與switch語(yǔ)句跳出本次循環(huán),繼續(xù)下一次循環(huán)均不能控制if…goto構(gòu)成的循環(huán)在多重循環(huán)中,break用于跳出本層循環(huán)。循環(huán)語(yǔ)句嵌套及應(yīng)用循環(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來(lái)實(shí)現(xiàn)呢?
例:請(qǐng)看下面一段程序。(循環(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”);}}無(wú)輸出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個(gè)*/
printf("");
for(k=1;k<=2*i-1;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年河南省天一大聯(lián)考高三上學(xué)期檢測(cè)(二)化學(xué)試題及答案
- 交通運(yùn)輸領(lǐng)域應(yīng)急救援信息化預(yù)案
- 煤礦職業(yè)健康管理與安全方案
- 青少年法治教育路徑優(yōu)化研究
- 新能源發(fā)電系統(tǒng)中儲(chǔ)能系統(tǒng)的應(yīng)用分析
- 處方點(diǎn)評(píng)自查報(bào)告
- 酒店客房出入管理制度
- 護(hù)理文書(shū)書(shū)寫(xiě)大賽活動(dòng)方案
- 2024-2025學(xué)年魯教版高二上學(xué)期期末地理試卷及答案指導(dǎo)
- 外貿(mào)求職信范文
- 骨骼肌肉系統(tǒng)影像診斷(160頁(yè))
- 鐵路信號(hào)基礎(chǔ)繼電器ppt課件
- 污水設(shè)計(jì)構(gòu)筑物的計(jì)算
- 武當(dāng)太極劍劍譜(49式)詳細(xì)介紹及招式名稱(chēng)匯總
- 風(fēng)量、溫度、噪聲測(cè)試記錄填寫(xiě)范例
- 特種作業(yè)人員臺(tái)賬.doc
- 國(guó)家開(kāi)放大學(xué)《管理英語(yǔ)1》邊學(xué)邊練參考答案
- (完整版)裝飾裝修工程監(jiān)理細(xì)則(詳解)最新(精華版)
- 電焊中級(jí)工(四級(jí))職業(yè)技能鑒定考試題庫(kù)
- 多巴胺的藥理作用及用法PPT參考幻燈片
- 鋼結(jié)構(gòu)網(wǎng)架翻新改造施工方案
評(píng)論
0/150
提交評(píng)論