下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
5.1while語句5.2do-while語句5.3for語句5.4循環(huán)的嵌套5.5break、continue和goto語句5.6程序舉例第5講循環(huán)結構程序設計2C語言有while、do-while、for三種循環(huán)結構語句。前兩個稱為條件循環(huán),即根據(jù)條件來決定是否繼續(xù)循環(huán);后一個稱為計數(shù)循環(huán),即根據(jù)設定的執(zhí)行次數(shù)來執(zhí)行循環(huán)。5.1while語句及其循環(huán)結構while語句和格式及執(zhí)行過程:格式:while(表達式)
語句執(zhí)行過程:先計算表達式之值,若為非0(即條件成立),執(zhí)行后面的語句(稱之為循環(huán)體)之后,再計算表達式之值進行判斷,如此多次重復執(zhí)行循環(huán)體;若表達式之值為0(即條件不成立),跳出循環(huán)體語句,繼續(xù)向下執(zhí)行。while語句的流程圖表達式語句(循環(huán)體)Y(非0)N(0)while(表達式)語句例1求1—100之間所有整數(shù)的和i<=100sum+=i;/*累加*/i+=1;/*計數(shù)器加1*/Y(非0)N(0)i=1;sum=0;printf("i=%d,sum=%d\n",i,sum);求1—100之間整數(shù)和的程序main(){inti=1,sum=0;while(i<=100){sum+=i;i+=1;}printf("i=%d,sum=%d\n",i,sum);}這是一個while語句想一想,語句sum+=i;和語句i+=1;能否改變位置?為什么?想一想,如果在while語句之前對變量sum賦初值為1,是否可以?程序的哪些地方應作相應的改動?求1—100之間整數(shù)和的程序運行過程main(){inti=1,sum=0;while(i<=100){sum+=i;i+=1;}printf("i=%d,sum=%d\n",i,sum);}這是一個while語句程序執(zhí)行的過程和結果如下:i=101,sum=5050注意:循環(huán)結束后,變量i的值一定大于100。想想這樣的一段循環(huán)語句的執(zhí)行結果:i=1;while(i<=100)putchar(‘*’);i++;這個循環(huán)永遠不會結束,因為循環(huán)控制變量i沒有在循環(huán)體內(nèi)被改變,i++;不屬于循環(huán)體。應該改為:i=1;while(i<=100){putchar(‘*’);i++;}
循環(huán)語句中一定要注意表達式的值是否能在循環(huán)執(zhí)行過程中被改變,以免造成死循環(huán)。5.2do-while語句及其循環(huán)結構do—while語句和格式及執(zhí)行過程:格式:do語句while(表達式);執(zhí)行過程:先執(zhí)行語句(稱之為循環(huán)體),
然后計算表達式之值,若為非0(即條件成立),再執(zhí)行語句(循環(huán)體)后計算表達式之值,如此多次重復執(zhí)行循環(huán)體并判斷條件;若表達式之值為0(即條件不成立),結束循環(huán),繼續(xù)向下執(zhí)行。do—while語句的流程圖表達式語句(循環(huán)體)Y(非0)N(0)注意:while循環(huán)語句與do-while循環(huán)語句的區(qū)別。這是一個do-while語句用do-while語句求100以內(nèi)正整數(shù)的和main(){inti=1,sum=0;do{sum+=i;i+=1;}while(i<=100);printf("i=%d,sum=%d\n",i,sum);}i=101,sum=5050從鍵盤上輸入10個整數(shù),求總和及平均值main(){intx,sum=0,i=1;floataver;while(i<=10){scanf("%d",&x);sum+=x;i++;}aver=sum/10.0;printf("sum=%d,aver=%.2f\n",sum,aver);}5.3for語句格式:for(表達式1;表達式2;表達式3)
語句執(zhí)行:(1)先求解表達式1的值。
(2)再求解表達式2的值,若值為非0(條件成立),則執(zhí)行語句(循環(huán)體)后執(zhí)行下面的(3);若表達式2的值為0(條件不成立),則轉向(5)。
(3)求解表達式3的值。
(4)轉回執(zhí)行(2)。
(5)執(zhí)行for語句后面的語句。for語句執(zhí)行流程圖表達式2語句(循環(huán)體)Y(非0)N(0)表達式1表達式3for(表達式1;表達式2;表達式3)
語句求1~100之間的整數(shù)之和(for語句)main(){inti,sum;for(i=1,sum=0;i<=100;i++)sum+=i;printf("i=%d,sum=%d\n",i,sum);}i=101,sum=5050求1~100之間的整數(shù)之和(for語句)main(){inti,sum;
for(;i<=100;i++)sum+=i;printf("i=%d,sum=%d\n",i,sum);}i=101,sum=5050表達式1可缺省,放在循環(huán)之前,但for語句中的第一個分號不能省略i=1;sum=0;求1~100之間的整數(shù)之和(for語句)main(){inti,sum;
for(;i<=100;)sum+=i;printf("i=%d,sum=%d\n",i,sum);}i=101,sum=5050表達式3可缺省,放在循環(huán)體之中,但for語句中的第二個分號不能省略i=1;sum=0;i++;求1~100之間的整數(shù)之和(for語句)main(){inti,sum;
for(i=1,sum=0;i<=100;sum+=i,i++)
printf("i=%d,sum=%d\n",i,sum);}i=101,sum=5050循環(huán)體中的內(nèi)容可以放在表達式3中,但要在花括號的后面加一個空語句;for語句的一般格式在for語句中,一般表達式1用來為變量賦初值;表達式2一般用來設置循環(huán)結束條件;表達式3一般用于循環(huán)變量增值。故for語句的一般格式為:for(變量賦初值;執(zhí)行循環(huán)體的條件;循環(huán)變量增值)
語句例:求1/100+2/99+…+1分析:用變量i從1開始循環(huán),每次增加1;用變量j從100開始循環(huán),每次減少1。累加i/j的值到s中。當i>j時結束循環(huán)(即i<=j時繼續(xù)循環(huán))。最后輸出s。#include<stdio.h>main(){inti,j;floats=0;for(i=1,j=100;i<=j;i++,j--)s=s+(float)i/j;printf(“\ns=%f”,s);}例:任意輸入一個自然數(shù),把它反序輸出。(如:原數(shù)為123,輸出321)。分析:此題不確定循環(huán)執(zhí)行的次數(shù),也不涉及一個規(guī)律變化的變量,一般用while或do-while來編寫。又由于第一次就要判斷輸入的是否是自然數(shù),通常用while來實現(xiàn)。算法步驟如下:1.定義整型變量a用于存儲輸入的自然數(shù),定義t初值為0用于存放a的反序數(shù),定義i用于依次存放求出的a的每一位的數(shù)值。2.輸入一個自然數(shù)賦值給變量a3.若a>0,執(zhí)行第4步,否則執(zhí)行第7步4.i=a%105.t=t*10+i6.a=a/10,并返回第3步7.輸出t程序:#include<stdio.h>main(){longa,i,t=0;scanf(“%ld”,&a);while(a>0){i=a%10;t=t*10+i;a=a/10;}printf(“\n%ld”,t);}1、有以下程序main(){inti;for(i=1;i<=40;i++){if(i++%5==0)if(++i%8==0)printf("%d",i);}printf("\n");}執(zhí)行后的輸出結果是A)5B)24C)32D)402006-92、若變量已正確定義,有以下程序段i=0;doprintf("%d,",i);
while(i++);printf("%d\n",i);其輸出結果是A)0,0B)0,1C)1,1D)程序進入無限循環(huán)3、有以下程序
#include<stdio.h>
main()
{int
y=9;
for(;y>0;y--)
if(y%3==0)
printf("%d",--y);
}程序的運行結果是A)741
B)963
C)852
D)8754212007-92007-94、以下程序的輸出結果是()#include<stdio.h>main(){
intn=12345,
d;
while(n!=0){d=n%10;printf("%d",d);n/=10;}}5、有以下程序段,且變量已正確定義和賦值for(s=1.0,k=1;k<=n;k++)s=s+1.0/(k*(k+1));printf("s=%f\n\n",s);請?zhí)羁?使下面程序段的功能與之完全相同s=1.0;k=1;while(________){s=s+1.0/(k*(k+1));_______;}printf("s=%f\n\n",s);2007-9543212007-9k<=nk++6、以下程序的輸出結果是()#include<stdio.h>main(){inti;
for(i='a';i<'f';i++,i++)printf("%c",i-'a'+'A');
printf("\n");}2007-9ACE7、有以下程序#include<stdio.h>main(
){intx=8;
for(
;
x>0;
x--){if(x%3){
printf("%d,"
,
x--);continue;}
printf("%d.",--x);}}
程序運行的結果是
A)7,4,2,B)8,7,5,2,C)9,7,6,4,
D)8,5,4,2,2008-48、以下不構成無限循環(huán)的語句或語句組是A)n=0;B)n=0;do{++n;}while(n<=0);while(1){n++;}C)n=10;
D)for(n=0,i=1;
;i++)n+=i;while(n);{n--;}15、若有定義:int
k;,以下程序段的輸出結果是(##2##4)
for(k=2;k<6;k++,k++)
printf("##%d",k);2008-49、有以下程序
#include
<stdio.h>
main()
{
int
i=5;
do
{if(i%3==1)
if(i%5==2)
{
printf("*%d",i);
break;
}
i++;
}while(i!=0);
printf("\n");
}程序的運行結果是A)*7
B)*3*5
C)*5
D)*2*62008-910、設變量已正確定義,以下不能統(tǒng)計出一行中輸入字符個數(shù)(不包含回車符)的程序段是A)n=0;while((ch=getchar())!='\n')n++;B)n=0;while(getchar()!='\n')n++;C)for(n=0;getchar()!='\n';n++);D)n=0;for(ch=getchar();ch!='\n';n++);2009-311、有以下程序#include
<stdio.h>main(){
char
c1,c2;
scanf("%c",&c1);
while(c1<65||c1>90)
scanf("%c",&c1);
c2=c1+32;
printf("%c,%c\n",c1,c2);}程序運行輸入65回車后,能否輸出結果,結束運行(請回答能或不能)【】2009-3不能12、以下程序運行后的輸出結果是【】#include<stdio.h>main(){
int
k=1,s=0;
do{
if((k%2)!=0)
continue;
s+=k;k++;
}while(k>10);
printf("s=%d\n",s);}
2009-3s=013、下列程序運行時,若輸入labcedf2df<回車>輸出為【
】#include<stdio.h>main(){
chara=0,ch;while((ch=getch())!='\n'){if(a%2!=0
&&
(ch>='a'&&ch<='z'))ch=ch-'a'+'A';
a++;putchar(ch);}printf("\n");}
2009-31AbCeDf2dF14、有以下程序#include<stdio.h>main(){
int
c=0,k;
for(k=1;k<3;k++)
switch(k)
{
default:c+=k;
case
2:c++;break;
case
4:c+=2;break;
}
printf("%d\n",c);}程序運行后的輸出結果是A)3B)5C)7D)92009-915、有以下程序#include<stdio.h>main(){
int
n=2,k=0;
while(k++&&n++>2);
printf("%d
%d\n",k,n);}程序運行后的輸出結果是A)0
2B)1
3C)5
7D)1
22009-916、以下程序運行后的輸出結果是【】#include
<stdio.h>main(){
int
a=1,b=7;
do{
b=b/2;a+=b;
}
while
(b>1);
printf("%d\n",a);}2009-9517、有一下程序#include
<stdio.h>main(){
int
f,f1,f2,i;
f1=0;f2=1;
printf("%d
%d
",f1,f2);
for(i=3;i<=5;i++)
{
f=f1+f2;
printf("%d",f);
f1=f2;
f2=f;
}
printf("\n");}程序運行后的輸出結果是【01123】
2009-91、有以下程序#include<stdio.h>
main(){inta=l;b=2;
for(;a<8;a++){b+=a;a+=2;}
printf("%d,%d\n",a,b);
}程序運行后的輸出結果是
A)9,18
B)8,11
C)7,11
D)10,14
2010年3月1、有以下程序
#include<stdio.h>
main(){inta=1,b=2;
while(a<6){b+=a;a+=2;b%=10;}
printf("%d,%d\n",a,b);
}程序運行后的輸出結果是
A)5,11
B)7,1
C)7,11
D)6,12010年9月2、有以下程序
#include<stdio.h>
main()
{inty=10;
while(y--);
printf("y=%d\n",y);}程序執(zhí)行后的輸出結果是
A)y=0
B)y=-1
C)y=1
D)while構成無限循環(huán)2010年9月1、有以下程序main(){ints;scanf("%d",&s);while(s>0){switch(s){case1:printf("%d",s+5);case2:printf("%d",s+4);break;case3:printf("%d",s+3);default:printf("%d",s+1);break;}scanf("%d",&s);}}運行時,若輸入123450<回車>,則輸出結果是A)6566456B)66656C)66666D)66666562011年3月2、有以下程序段inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case1:case3:printf("%d\n",n);break;case2:case4:printf("%d\n",n);continue;case0:exit(0);}printf("%d\n",n);}以下關于程序段執(zhí)行情況的敘述,正確的是A)for循環(huán)語句固定執(zhí)行8次B)當產(chǎn)生的隨機數(shù)n為4時結束循環(huán)操作C)當產(chǎn)生的隨機數(shù)n為1和2時不做任何操作D)當產(chǎn)生的隨機數(shù)n為0時結束程序運行2011年3月3、若i和k都是int類型變量,有以下for語句for(i=0,k=-1;k=1;k++)printf("*****\n");下面關于語句執(zhí)行情況的敘述中正確的是A)循環(huán)體執(zhí)行兩次B)循環(huán)體執(zhí)行一次C)循環(huán)體一次也不執(zhí)行D)構成無限循環(huán)2011年3月4、有以下程序#include<stdio.h>main(){charb,c;inti;b='a';c='A';for(i=0;i<6;i++){if(i%2)putchar(i+b);elseputchar(i+c);}printf("\n");}程序運行后的輸出結果是A)ABCDEFB)AbCdEfC)aBcDeFD)abcdef2011年3月4、有以下程序段#include<stdio.h>main(){…while(getchar()!='\n');…}以下敘述中正確的是A)此while語句將無限循環(huán)B)getchar()不可以出現(xiàn)在while語句的條件表達式中C)當執(zhí)行此while語句時,只有按回車鍵程序才能繼續(xù)執(zhí)行D)當執(zhí)行此while語句時,按任意鍵程序就能繼續(xù)執(zhí)行2011年3月5、有以下函數(shù)voidprt(charch,intn){inti;for(i=1;i<=n;i++)printf(i%6!=0?"%c“:"%c\n",ch);}執(zhí)行調(diào)用語句prt('*',24);后,函數(shù)共輸出了【】行*號。2011年3月41、有以下程序main(){inta=7;
while(a--);
printf("%d\n",a);}程序運行后的輸出結果是()。A)-1B)0C)1D)72、以下程序運行后的輸出結果是【】。main(){inti,j;
for(i=6;i>3;i--)j=i;
printf("%d%d\n",i,j);}2011年9月A343、以下程序運行后的輸出結果是【】。
main(){chara;
for(a=0;a<15;a+=5){putchar(a+'A');}printf("\n");
}2011年9月AFK5.4循環(huán)嵌套一個循環(huán)體中又包含了另一個完整的循環(huán)結構,叫做循環(huán)的嵌套。三種循環(huán)結構可以互相嵌套。循環(huán)嵌套的執(zhí)行過程是:外循環(huán)執(zhí)行一次,內(nèi)循環(huán)執(zhí)行一個全過程。循環(huán)嵌套舉例:輸出一個圖形main(){inti,j;for(i=1;i<=4;i++){for(j=1;j<=3;j++)printf("*");printf("\n");}}************/*外循環(huán)控制輸出圖形的行數(shù)*//*內(nèi)循環(huán)控制每行輸出的數(shù)量*/循環(huán)嵌套語句第一個語句是循環(huán)語句,實現(xiàn)輸出3個*號第二個語句是簡單語句,輸出一個換行符main(){printf("***\n");printf("***\n");printf("***\n");printf("***\n");}main(){inti,j;for(i=1;i<=4;i++)printf("***\n");}循環(huán)嵌套舉例:輸出一個圖形main(){inti,j;for(i=1;i<=4;i++){for(j=1;j<=i;j++)printf("*");printf("\n");}}**********/*外循環(huán)控制輸出圖形的行數(shù)*//*內(nèi)循環(huán)控制每行輸出的數(shù)量*/循環(huán)嵌套語句第一個語句是循環(huán)語句,實現(xiàn)輸出若干個*號第二個語句是簡單語句,輸出一個換行符5.5
break語句和continue語句break語句格式:break;功能:提前結束循環(huán),從循環(huán)體中無條件跳轉到循環(huán)語句后面執(zhí)行??捎糜趕witch語句和循環(huán)結構中。continue語句格式:continue;結束本次循環(huán),即在本次循環(huán)中,不再執(zhí)行循環(huán)體中continue后面的語句。只能用于循環(huán)結構。break語句的使用#definePI3.14159main(){intr;floatarea;for(r=1;r<=10;r++){area=r*r*PI;if(area>100)break;printf("r=%d\tarea=%.2f\n",r,area);}}計算半徑為1~10的圓面積,面積大于100時停止。r:1area:3.14r:2area:12.57r:3area:28.27r:4area:50.27r:5area:78.54r:6area:113.10定義一個符號常量PI觀察r和area的值r=1area=3.14r=2area=12.57r=3area=28.27r=4area=50.27r=5area=78.54帶有break;語句的for循環(huán)就有兩個出口即r>10或者area>100。continue語句的使用輸出1~7之間所有不能被3整除的整數(shù)。main(){intn;for(n=1;n<=7;n++){if(n%3==0)continue;printf("%5d",n);}}n:1觀察n的值n:2n:3n:4n:5n:6n:7n:8124575.6循環(huán)結構程序舉例:
連續(xù)級數(shù)求和判斷一個數(shù)是否為素數(shù)求出100~200之間的所有素數(shù)求π的近似值求π的近似值,直到最后一項絕對值小于10-6π111——=1-——+——-——……4357求π的近似值算法流程圖pi=pi+t;n+=2;s=-s;t=s/n;|t|>=10-6定義變量pi(和),n(分母),s(符號),t(項值)0→pi,1→n,1→s,1→tYNpi=pi*4;輸出n和pi的值求π的近似值,直到最后一項絕對值小于10-6π111——=1-——+——-——…4357求π的近似值程序main(){ints=1;longn=1;floatpi=0,t=1;/*s存放符號,n存放分母*/while(
fabs(t)1e-6){pi=pi+t;
n=n+2;s=-s;
t=(float)s/n;}/*實現(xiàn)s的+1和-1交替出現(xiàn)*/pi=pi*4;printf("pi=%f\n",pi);}/*累加*/>=/*分母加2*/pi=3.141594/*pi存放和,t存放項值*//*計算下一個項值*/掌握在循環(huán)體中實現(xiàn)正負相間的技巧判斷整數(shù)m是否為素數(shù)素數(shù)即為質數(shù),如果一個整數(shù)只能被1或者它本身整除,這個數(shù)就稱為是素數(shù)。判斷素數(shù)的算法是:
讓m被2~m-1之間所有的整數(shù)整除,如果m能被2~m-1之中的任何一個整數(shù)整除,則提前結束循環(huán),此時m一定不是素數(shù);如果在2~m-1之間不存在能被m整除的整數(shù),則終止循環(huán),此時循環(huán)變量的值一定大于或者等于m。判斷整數(shù)m是否為素數(shù)算法流程圖定義變量m(被判斷數(shù)),i(循環(huán)變量)輸入m的值N
i<mi=2;NYYm%i==0結束
i>=m輸出m是素數(shù)YN輸出m不是素數(shù)break;i++;for循環(huán)不是素數(shù)是素數(shù)判斷整數(shù)m是否為素數(shù)程序main(){intm,i;scanf("%d",&m);for(i=2;i<m;i++)if(m%i==0)break;for語句有兩個出口,i>=m和break;if(i>=m)printf("\n%d是素數(shù)\n",m);elseprintf("\n%d不是素數(shù)\n",m);}循環(huán)結束后根據(jù)i的值來決定m是否為素數(shù)判斷整數(shù)m是否為素數(shù)程序2#include<math.h>main(){intm,i,k;scanf("%d",&m);k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;for語句有兩個出口,i>k和break;if(i>k)printf("\n%d是素數(shù)\n",m);elseprintf("\n%d不是素數(shù)\n",m);}循環(huán)結束后根據(jù)i的值來決定m是否為素數(shù)判斷整數(shù)m是否為素數(shù)程序3main(){intm,i,k,flag;scanf("%d",&m);k=sqrt(m);flag=1;for(i=2;i<=k;i++)if(m%i==0){flag=0;break;}if(flag==1)printf("\n%d是素數(shù)\n",m);elseprintf("\n%d不是素數(shù)\n",m);}/*定義變量flag作為標志變量*//*變量flag賦初值1*//*如果m是素數(shù),flag賦0*/例:求3~150中所有素數(shù)的和。
算法分析:
1.用變量a從3到150循環(huán),每次值增加12.用變量i從2到a-1循環(huán),每次值增加13.若a%i==0,結束i的循環(huán),執(zhí)行第4步
4.若i==a,把a累加到s上。
5.輸出s的值
注意:此題中執(zhí)行第4步時有兩種情況。第一種:在第3步中發(fā)現(xiàn)了滿足a%i==0的情況,直接跳出了i的循環(huán),此時的i一定是在2到a-1中間的一個值,而且a不是素數(shù)。第二種:一直沒有發(fā)現(xiàn)滿足a%i==0的i,在i==a時,不再滿足i循環(huán)的執(zhí)行條件,i循環(huán)結束,此時的a是素數(shù)!程序:#include<stdio.h>main(){inta,s=0,i;for(a=3;a<=150;a++){for(i=2;i<a;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度棒球場租賃與賽事宣傳合作合同
- 人力資源公司合作合同
- 食堂承包合同書
- 交通運輸行業(yè)智能交通出行服務平臺方案
- 服裝廠縫紉機設備買賣合同書
- 物流市場分析與規(guī)劃作業(yè)指導書
- 買賣房屋交接合同協(xié)議書
- 人工智能系統(tǒng)開發(fā)與部署作業(yè)指導書
- 帶擔保的借款合同
- 工業(yè)互聯(lián)網(wǎng)背景下智能倉儲管理解決方案
- 美麗的大自然(教案)2023-2024學年美術一年級下冊
- 2024年低壓電工考試題庫(試題含答案)
- 成都特色民俗課件
- 花城版音樂四下-第四課-認知音樂節(jié)奏(教案)
- 寵物醫(yī)院員工手冊
- 2024年高考英語讀后續(xù)寫高分寶典專題08讀后續(xù)寫肢體動作描寫積累1(詞-句-文)講義
- 商業(yè)與公積金貸款政策
- 時政述評培訓課件
- 2022屆高三體育特長生家長會
- 不對外供貨協(xié)議
- 2024屆高考作文主題訓練:時評類(含解析)
評論
0/150
提交評論