c语言循环结构.docx

上传人:b****6 文档编号:15894122 上传时间:2023-07-08 格式:DOCX 页数:30 大小:24.34KB
下载 相关 举报
c语言循环结构.docx_第1页
第1页 / 共30页
c语言循环结构.docx_第2页
第2页 / 共30页
c语言循环结构.docx_第3页
第3页 / 共30页
c语言循环结构.docx_第4页
第4页 / 共30页
c语言循环结构.docx_第5页
第5页 / 共30页
c语言循环结构.docx_第6页
第6页 / 共30页
c语言循环结构.docx_第7页
第7页 / 共30页
c语言循环结构.docx_第8页
第8页 / 共30页
c语言循环结构.docx_第9页
第9页 / 共30页
c语言循环结构.docx_第10页
第10页 / 共30页
c语言循环结构.docx_第11页
第11页 / 共30页
c语言循环结构.docx_第12页
第12页 / 共30页
c语言循环结构.docx_第13页
第13页 / 共30页
c语言循环结构.docx_第14页
第14页 / 共30页
c语言循环结构.docx_第15页
第15页 / 共30页
c语言循环结构.docx_第16页
第16页 / 共30页
c语言循环结构.docx_第17页
第17页 / 共30页
c语言循环结构.docx_第18页
第18页 / 共30页
c语言循环结构.docx_第19页
第19页 / 共30页
c语言循环结构.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c语言循环结构.docx

《c语言循环结构.docx》由会员分享,可在线阅读,更多相关《c语言循环结构.docx(30页珍藏版)》请在冰点文库上搜索。

c语言循环结构.docx

c语言循环结构

实验八循环结构

1.下面是一个计算e的近似值(使误差小于给定的δ)的程序。

main()

{

doublee=1.0,x=1.0,y,detax;

inti=1;

printf("\npleaseinputenteradata:

");

scanf("%lf",&detax);

y=1/x;

while(y>=detax)

{

x=x*I;//未定义变量I

y=1/x;

e=e+y;

++i;

}

printf("%12.10lf",e);

}

2.实验步骤

(1)阅读上面的程序,写出程序所依据的计算公式。

(2)当输入的detax各是什么值时,能分别使程序按下面的要求运行:

不进入循环;

只循环一次;

只循环两次;

进入死循环(程序将永远循环下去)。

为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?

(3)原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y

(4)把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。

假如不知道机器内的程序实际上是怎么写的,输入什么样的detax就能测试出少了上述这条语句。

(5)若把原程序中的++i换成i++,观察程序的运行发生了什么变化?

(6)把原程序中的while结构改写成do—while结构,再分别按上述的

(2)、(3)两步进行实验。

3.验证程序输出结果

(1)#include

main()

{intm,n,sign,t;

scanf("%d%d",&m,&n);

while(m*n)

{

if(m>=0&&n>=0||m<=0&&n<=0)sign=0;

elsesign=1;

m=m>0?

m:

-m;n=n>0?

n:

-n;

t=0;

while(n--)t+=m;

printf("\nTheresultis:

");

if(sign)printf("-");

printf("%d\n",t);

scanf("%d%d",&m,&n);

}

}

(2)main()

{intk=1;

while(k<=20)

if(++k%4!

=2)continue;

elseprintf(‘%d”,k);

printf(“\n”);

}

(3)main()

{intn=4;

while(n--)printf("%d",--n);

}

4.输入两个正整数分别赋给m和n,求他们的最大公约数和最小公倍数。

5.北京市体育彩票采用整数1、2、3、……、36表示36种体育运动,一张彩票可选择7种运动。

编写程序,选择一张彩票的号码,使得这张彩票的7个号码之和是105且相邻两个号码之差按顺序依次是1、2、3、4、5、6。

如果第一个号码是1,则后续号码应是2、4、7、11、16、22。

6.编写程序实现输入整数n,输出如下所示由数字组成的菱形。

(图中n=5)

1

121

12321

1234321

123454321

1234321

12321

121

1

7.(选做题)已知2001年1月1日是星期一,编写程序,在屏幕上输出2000年的年历。

关于闰年的计算方法:

如果某年的年号能被400除尽,或能被4除尽但不能被100除尽,则这一年就是闰年。

8.运行程序,分析并观察运行结果

main()

{

inti;

clrscr();

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

if(i%4==0)printf(“%d\n”,i);

}

9.验证程序输出结果

(1)main()

{inti;

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

{if(i%2){printf("#");continue;}

printf("*");

}

printf("\n");

}

(2)main()

{intx,i;

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

{x=i;

if(++x%2==0)/*当x==28的时候,这句等价于if(29%2==0)吗?

*/

if(++x%3==0)/*当x==70的时候,这句等价于if(72%2==0)吗?

*/

if(++x%7==0)

printf("%d",x);

}

}

(3)main()

{inta=1,b;

for(b=1;b<=10;b++)

{if(a>=8)break;

f(a%2==1){a+=5;continue;}

a-=3;

}

printf("%d\n",b);

10.下列程序计算SUM的值。

调试该程序,使之能正确地计算SUM。

写出调试过程。

计算公式如下:

SUM=1+2-3+4-5+……-n

main()

{intt,s,i,n;

scanf("%d",&n);

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

t=1/i;

s=s+t;

printf("s=%f\n",s);

}

在调试过程中,用单步执行的方法观察变量s和t的值的变化,找到程序中存在的问题,加以改正。

11.下面程序的功能是计算n!

main()

{inti,n,s=1;

printf("Pleaseentern:

");

scanf("%d",&n);

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

s=s*i;

printf("%d!

=%d",n,s);

}

首次运行先输入n=4,输出结果为4!

=24,这时正确的。

为了检验程序的正确性,再输入n=10,输出为10!

=24320,这显然是错误的。

为了找到程序的错误,可以通过单步执行来观察变量的变化。

分析产生这种现象的原因,把程序改正过来,再用n=20进行实验,分析所得到的结果。

12.完善程序:

打印乘法表。

main()

{

intI,j;

clrscr();

for(______________;I<=9;I++)

{for(j=1;___________;j++)

printf(“____________=%2d”,I,j,I*j);

______________________;

}

}

运行结果:

1*1=1

2*1=22*2=4

3*1=33*2=63*3=9

4*1=44*2=84*3=124*4=16

5*1=55*2=105*3=155*4=205*5=25

6*1=66*2=126*3=186*4=246*5=306*6=36

7*1=77*2=147*3=217*4=287*5=357*6=427*7=49

8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64

9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81

13.下面是一个用以计算和的C程序。

#include

voidmain()

{

inti,j;

longsum=0;

for(i=1,i<=20,i++)//查查错误

for(j=1;j<=3;j++)

sum=sum+(i+1)*(i+1)*(j+2);

printf("sumis:

%d\n",sum);

}

实验步骤

(1)将上述程序中的和分别做什么样修改,能使程序按如下要求运行:

.不循环;

.外循环1次,不进入内循环;

.外循环,内循环各1次;

.外循环1次,内循环2次;

.外循环2次,内循环1次;

.外循环19次,内循环3次;

.外循环20次,内循环2次;

.外循环21次,内循环3次。

注:

控制循环次数可通过控制i,j的值以及循环终止条件来进行。

(2)试修改程序,以便能知道控制表达式

i=1;j<=20;i++

j=1;j<3;j+=

各执行了多少次?

(3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观察对

换后的外循环与内循环控制表达式执行的总次数有无变化?

(4)将(3)中程序写为

#include

main()

{

inti,j,k;

longsum=0;

for(j=1;j<=3;j++)

{

k=j+2;

for(i=1.i<=20.i++)//有错误

sum=sum+(i+1)*(i+1)**k;//有错误

}

printf("sumis:

%d\n",sum);

}

观察程序的执行结果有无变化?

(5)将(3)中程序改写为

#include

main()

{

intI,j,m,n;

longsum=0;

for(j=1;j<=3;j++)

{

m=j+2;

for(I=1;j<=20;I++)//循环会终止吗,为什么,注意观察j的变化。

{

n=I+1;

sum=sum+m*m*n;

}

}

printf("sumis:

%d\n",sum);

}

观察程序的执行结果有无变化?

(6)在(5)的程序中,若将外循环控制表达式分别做如下修改:

.j=1;j<3;j++

.j=1;j=3;j++

.j=1;j>=3;j++

.j=1;j>3;j++

.j=1;j<=3;j--

.j=1;j>3;j--

.j=1;j<3;j++

.j=0;j<=3;j+=1

.j=0;j<3;j++

j=1;j<=3;j++j=1;j<3;++j

观察程序的执行结果有无变化?

思考如何退出死循环。

 

一)选择题

1.设有程序段

   intk=10;

   while(k=0)k=k-1;

   这下面描述中正确的是_________.

   a)while循环执行10次        b)循环是无限循环

   c)循环体语句以此也不执行   d)循环体语句执行一次

2.语句while(!

E);中的表达式!

E等价于________.

   a)E==0     b)E!

=1   c)E!

=0      d)E==1

3.下面程序段的运行结果是__________.

   intn=0;

   while(n++<=2);printf("%d",n);

   a)2  b)3 c)4  d)有语法错

4.下面程序的运行结果是____.

   #include

   main()

   {

       intnum=0;

       while(num<=2)

       {

           num++;

           printf("%d\n",num);

          }

    }

a)1      b)1        c)1      d)1

          2          2        2

                      3        3

                                4

5.以下程序段________.

   x=-1;

   do{

       x=x*x;

   }while(!

x);

   a)是死循环             b)循环执行二次

   c)循环执行一次         d)有语法错误

6.若有如下语句

   intx=3;

   do{printf(""%d\n",x-=2);}while(!

(--x));

   则上面程序段______.

   a)输出的是1  b)输出的是1和-2 c)输出的是3和0 d)是死循环

7.下面程序的运行结果是______.

   #include   main()

   {

       inty=10;

       do{y--;}while(--y);

       printf("%d\n",y--);

   }

   a)-1  b)1  c)8  d)0

8.若i为整型变量,则以下循环执行次数是_____.

   for(i=2;i==0;)printf("%d",i--);

   a)无限次  b)0次    c)1次  d)2次

9.执行语句for(i=1;i++<4;);后变量i的值是______.

   a)3  b)4  c)5    d)不定

10.以下正确的描述是_______.

   a)continue语句的作用是结束整个循环的执行

   b)只能在循环体内和switch语句体内使用break语句

   c)在循环体内使用break语句或continue语句的作用相同

   d)从多层循环嵌套中退出时,只能使用goto语句

(二)、填空题

1.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束

循环。

请填空。

   intn=0,c;

   c=getchar();

   while(____)

   {

       if(_____)n++;

       c=getchar();

   } 

2.下面程序的功能是用"辗转相除法"求两个正整数的最大公约数。

请填空。

 

 #include 

 main()

 {intr,m,n;

  scanf("%d%d",&m,&n);

  if(m

  r=m%n;

  while(r){m=n;n=r;r=______;}

  printf("%d\n",n);

 } 

3.下面程序的运行结果是_________.

 #include

 main()

 {

     inta,s,n,count;

     a=2;s=0;n=1;count=1;

     while(count<=7){n=n*a;s=s+n;++count;}

     printf("s=%d",s);

 } 

4.下面程序段的运行结果是_________.

   i=1;a=0;s=1;

   do{a=a+s*i;s=-s;i++;}while(i<=10);

   printf("a=%d",a); 

5.下面程序段的运行结果是_______.

  i=1;s=3;

  do{s+=i++;

     if(s%7==0)continue;

     else++i;

    }while(s<15);

  printf("%d",i);

(24)main0

{intn=9;

while(n>6){n--;printf(“%d”,n);}

}

该程序段的输出结果是

  A)987

  B)876

  C)8765

  D)9876

(25)以下循环体的执行次数是

  A)3B)2C)1D)0

main()

{inti,j;

for(i=0,j=1;i<=j+1;i+=2,j--)printf("%d\n",i);

}

(26)以下叙述正确的是

  A)do-while语句构成的循环不能用其它语句构成的循环来代替。

  B)do-while语句构成的循环只能用break语句退出。

  C)用do-while语句构成的循环,在while后的表达式为非零时结束循环。

  D)用do-while语句构成的循环,在while后的表达式为零时结束循环。

(27)以下程序段的执行结果是

  A)a=12y=12B)a=12y=12

 a=14y=16 a=16y=28

 a=16y=20

 a=18y=24

  C)a=12y=12D)a=12y=12

    a=14y=26

    a=14y=44

inta,y;

a=10;y=0;

do

{a+=2;y+=a;

printf("a=%dy=%d\n",a,y);

if(y>20)break;

{while(a=14);

(28)以下程序的输出结果是

  A)10192

  B)9876

  C)10990

  D)101091

main()

{intx=10,y=10,欢迎光临学网,点击这里查看更多文章教程[1][2][3][4][5][6][7][8]

I;

for(i=0;x>8;y=++i)

printf("%d,%d",x--,y);

}

(29)以下程序的输出结果是

  A)20

  B)31

  C)321

  D)210

main()

{intn=4;

while(n--)printf("%d",--n);

}

(30)以下程序的输出结果是

  A)#*#*#

  B)#####

  C)*****

  D)*#*#*

main()

{inti;

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

{if(i%2){printf("#");continue;}

printf("*");

}

printf("\n");

}

(31)执行以下程序段时

  A)循环体将执行一次

  B)循环体将执行两次

  C)循环体将执行无限次

  D)系统将提示有语法错误

X=-1;

do{x=x*x;}while(!

x);

(32)执行以下程序后,输出的结果是

  A)-1B)1C)8D)0

main()

{inty=10;

do{y--;}while(--y);

printf("%d\n",y--);

}

(33)在下列选项中,没有构成死循环的程序段是

  A)inti=100    B)for(;;);

  while

(1)

  {i=i%100+1;

 if(i>100)break;

  }

  C)intk=1000;    D)ints=36;

  do{++k;}while(k>=10000);while(s);--s;

(34)执行语句:

for(i=l:

i++<4:

);后,变量i的值是

  A)3

  B)4

  C)5

  D)不定

(35)以下程序的输出结果是

  A)x=4B)x=8C)x=6D)x=12

main()

{inti,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);

}

(36)运行以下程序后,如果从键盘上输入6514<回车>,则输出结果为:

  A)m=3B)m=2C)m=1  D)m=1

main()

{intm,n;

printf("Enterm,n;");scanf("%d%d",&m,&n):

while(m!

=n)

{while(m>n)m-=n;

while(n>m)n-=m;

}

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

}

(37)设x和y均为int型变量,则执行下的循环后,y值为

for(y=1,x=1;y<=50;y++)

{if(x>=10))break;

if(x%2==1)

{x+=5;continue;}

x-=3;

}

  A)2   B)4    C)6 D)8

(38)假定a和b为int型变量,则执行以下语句后b的值为

a=1;b=10;

do

{b-=a;a++;}

while(b--<0);

  A)9B)-2C)-1D)8

(39)设j为int型变量,则下面for循环语句的执行结果是

for(j=10;j>3;j--)

{if(j%3)j--;

--j;--j;

printf("%d",j);

}

  A)63

  B)74

  C)62

  D)73

(40)若ij已定义为int类型,则以下程序段中内循环体的总的执行次数是

for(i=5;i;i--)

for(j=0;j<4;j++){...}

  A)20

  B)25

  C)24

  D)30

(41)执行下面的程序后,a的值为

main()

{inta,b;

for(a=1,b=1;a<=100;a++)

{if(b>=20)break;

if(b%3==1){b+=3;continue;}

b-=5;}}

  A)7

  B)8

  C)9

  D)10

(42)以下程序段的输出结果是

intx=3;

do{printf("%3d",x-=2);}while(!

(--x));

  A)1

  B)30

  C)1-2

  D)死循环

(43)定义如下变量:

intn=10;则下列循环的输出结果是

while(n>7)

{n--;

printf("%d\n",n);}

  A)10B)9C)10D)9

  9898

 8787

    76

(44)下面的程序

  A)输出的是1

  B)输出的是1和-2

  C)输出的是3和0

  D)是死循环

main()

{intx=3;

do{

printf("%d\n",X-=2);

}while(!

(--x));}

(45)下面程序的输出是

  A)741

  B)852

  C)963

  D)875421

main()

{inty=9;

for(;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2