全国二级等级考试2012-9辅导-多媒体课件第5讲_第1页
全国二级等级考试2012-9辅导-多媒体课件第5讲_第2页
全国二级等级考试2012-9辅导-多媒体课件第5讲_第3页
全国二级等级考试2012-9辅导-多媒体课件第5讲_第4页
全国二级等级考试2012-9辅导-多媒体课件第5讲_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

5.1while语句5.2do-while语句5.3for语句5.4循环的嵌套5.5break、continue和goto语句5.6程序举例第5讲循环结构程序设计2C语言有while、do-while、for三种循环结构语句。前两个称为条件循环,即根据条件来决定是否继续循环;后一个称为计数循环,即根据设定的执行次数来执行循环。5.1while语句及其循环结构while语句和格式及执行过程:格式:while(表达式)

语句执行过程:先计算表达式之值,若为非0(即条件成立),执行后面的语句(称之为循环体)之后,再计算表达式之值进行判断,如此多次重复执行循环体;若表达式之值为0(即条件不成立),跳出循环体语句,继续向下执行。while语句的流程图表达式语句(循环体)Y(非0)N(0)while(表达式)语句例1求1—100之间所有整数的和i<=100sum+=i;/*累加*/i+=1;/*计数器加1*/Y(非0)N(0)i=1;sum=0;printf("i=%d,sum=%d\n",i,sum);求1—100之间整数和的程序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之间整数和的程序运行过程main(){inti=1,sum=0;while(i<=100){sum+=i;i+=1;}printf("i=%d,sum=%d\n",i,sum);}这是一个while语句程序执行的过程和结果如下:i=101,sum=5050注意:循环结束后,变量i的值一定大于100。想想这样的一段循环语句的执行结果:i=1;while(i<=100)putchar(‘*’);i++;这个循环永远不会结束,因为循环控制变量i没有在循环体内被改变,i++;不属于循环体。应该改为:i=1;while(i<=100){putchar(‘*’);i++;}

循环语句中一定要注意表达式的值是否能在循环执行过程中被改变,以免造成死循环。5.2do-while语句及其循环结构do—while语句和格式及执行过程:格式:do语句while(表达式);执行过程:先执行语句(称之为循环体),

然后计算表达式之值,若为非0(即条件成立),再执行语句(循环体)后计算表达式之值,如此多次重复执行循环体并判断条件;若表达式之值为0(即条件不成立),结束循环,继续向下执行。do—while语句的流程图表达式语句(循环体)Y(非0)N(0)注意:while循环语句与do-while循环语句的区别。这是一个do-while语句用do-while语句求100以内正整数的和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个整数,求总和及平均值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)

语句执行:(1)先求解表达式1的值。

(2)再求解表达式2的值,若值为非0(条件成立),则执行语句(循环体)后执行下面的(3);若表达式2的值为0(条件不成立),则转向(5)。

(3)求解表达式3的值。

(4)转回执行(2)。

(5)执行for语句后面的语句。for语句执行流程图表达式2语句(循环体)Y(非0)N(0)表达式1表达式3for(表达式1;表达式2;表达式3)

语句求1~100之间的整数之和(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之间的整数之和(for语句)main(){inti,sum;

for(;i<=100;i++)sum+=i;printf("i=%d,sum=%d\n",i,sum);}i=101,sum=5050表达式1可缺省,放在循环之前,但for语句中的第一个分号不能省略i=1;sum=0;求1~100之间的整数之和(for语句)main(){inti,sum;

for(;i<=100;)sum+=i;printf("i=%d,sum=%d\n",i,sum);}i=101,sum=5050表达式3可缺省,放在循环体之中,但for语句中的第二个分号不能省略i=1;sum=0;i++;求1~100之间的整数之和(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循环体中的内容可以放在表达式3中,但要在花括号的后面加一个空语句;for语句的一般格式在for语句中,一般表达式1用来为变量赋初值;表达式2一般用来设置循环结束条件;表达式3一般用于循环变量增值。故for语句的一般格式为:for(变量赋初值;执行循环体的条件;循环变量增值)

语句例:求1/100+2/99+…+1分析:用变量i从1开始循环,每次增加1;用变量j从100开始循环,每次减少1。累加i/j的值到s中。当i>j时结束循环(即i<=j时继续循环)。最后输出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);}例:任意输入一个自然数,把它反序输出。(如:原数为123,输出321)。分析:此题不确定循环执行的次数,也不涉及一个规律变化的变量,一般用while或do-while来编写。又由于第一次就要判断输入的是否是自然数,通常用while来实现。算法步骤如下:1.定义整型变量a用于存储输入的自然数,定义t初值为0用于存放a的反序数,定义i用于依次存放求出的a的每一位的数值。2.输入一个自然数赋值给变量a3.若a>0,执行第4步,否则执行第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");}执行后的输出结果是A)5B)24C)32D)402006-92、若变量已正确定义,有以下程序段i=0;doprintf("%d,",i);

while(i++);printf("%d\n",i);其输出结果是A)0,0B)0,1C)1,1D)程序进入无限循环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);请填空,使下面程序段的功能与之完全相同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、以下不构成无限循环的语句或语句组是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、设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是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);}程序执行后的输出结果是

A)y=0

B)y=-1

C)y=1

D)while构成无限循环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);}以下关于程序段执行情况的叙述,正确的是A)for循环语句固定执行8次B)当产生的随机数n为4时结束循环操作C)当产生的随机数n为1和2时不做任何操作D)当产生的随机数n为0时结束程序运行2011年3月3、若i和k都是int类型变量,有以下for语句for(i=0,k=-1;k=1;k++)printf("*****\n");下面关于语句执行情况的叙述中正确的是A)循环体执行两次B)循环体执行一次C)循环体一次也不执行D)构成无限循环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语句将无限循环B)getchar()不可以出现在while语句的条件表达式中C)当执行此while语句时,只有按回车键程序才能继续执行D)当执行此while语句时,按任意键程序就能继续执行2011年3月5、有以下函数voidprt(charch,intn){inti;for(i=1;i<=n;i++)printf(i%6!=0?"%c“:"%c\n",ch);}执行调用语句prt('*',24);后,函数共输出了【】行*号。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循环嵌套一个循环体中又包含了另一个完整的循环结构,叫做循环的嵌套。三种循环结构可以互相嵌套。循环嵌套的执行过程是:外循环执行一次,内循环执行一个全过程。循环嵌套举例:输出一个图形main(){inti,j;for(i=1;i<=4;i++){for(j=1;j<=3;j++)printf("*");printf("\n");}}************/*外循环控制输出图形的行数*//*内循环控制每行输出的数量*/循环嵌套语句第一个语句是循环语句,实现输出3个*号第二个语句是简单语句,输出一个换行符main(){printf("***\n");printf("***\n");printf("***\n");printf("***\n");}main(){inti,j;for(i=1;i<=4;i++)printf("***\n");}循环嵌套举例:输出一个图形main(){inti,j;for(i=1;i<=4;i++){for(j=1;j<=i;j++)printf("*");printf("\n");}}**********/*外循环控制输出图形的行数*//*内循环控制每行输出的数量*/循环嵌套语句第一个语句是循环语句,实现输出若干个*号第二个语句是简单语句,输出一个换行符5.5

break语句和continue语句break语句格式:break;功能:提前结束循环,从循环体中无条件跳转到循环语句后面执行。可用于switch语句和循环结构中。continue语句格式:continue;结束本次循环,即在本次循环中,不再执行循环体中continue后面的语句。只能用于循环结构。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循环就有两个出口即r>10或者area>100。continue语句的使用输出1~7之间所有不能被3整除的整数。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循环结构程序举例:

连续级数求和判断一个数是否为素数求出100~200之间的所有素数求π的近似值求π的近似值,直到最后一项绝对值小于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;}/*实现s的+1和-1交替出现*/pi=pi*4;printf("pi=%f\n",pi);}/*累加*/>=/*分母加2*/pi=3.141594/*pi存放和,t存放项值*//*计算下一个项值*/掌握在循环体中实现正负相间的技巧判断整数m是否为素数素数即为质数,如果一个整数只能被1或者它本身整除,这个数就称为是素数。判断素数的算法是:

让m被2~m-1之间所有的整数整除,如果m能被2~m-1之中的任何一个整数整除,则提前结束循环,此时m一定不是素数;如果在2~m-1之间不存在能被m整除的整数,则终止循环,此时循环变量的值一定大于或者等于m。判断整数m是否为素数算法流程图定义变量m(被判断数),i(循环变量)输入m的值N

i<mi=2;NYYm%i==0结束

i>=m输出m是素数YN输出m不是素数break;i++;for循环不是素数是素数判断整数m是否为素数程序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是素数\n",m);elseprintf("\n%d不是素数\n",m);}循环结束后根据i的值来决定m是否为素数判断整数m是否为素数程序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是素数\n",m);elseprintf("\n%d不是素数\n",m);}循环结束后根据i的值来决定m是否为素数判断整数m是否为素数程序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是素数\n",m);elseprintf("\n%d不是素数\n",m);}/*定义变量flag作为标志变量*//*变量flag赋初值1*//*如果m是素数,flag赋0*/例:求3~150中所有素数的和。

算法分析:

1.用变量a从3到150循环,每次值增加12.用变量i从2到a-1循环,每次值增加13.若a%i==0,结束i的循环,执行第4步

4.若i==a,把a累加到s上。

5.输出s的值

注意:此题中执行第4步时有两种情况。第一种:在第3步中发现了满足a%i==0的情况,直接跳出了i的循环,此时的i一定是在2到a-1中间的一个值,而且a不是素数。第二种:一直没有发现满足a%i==0的i,在i==a时,不再满足i循环的执行条件,i循环结束,此时的a是素数!程序:#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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论