知ing

大学C/C++语言程序设计实验教程

阳小华 罗晨晖 编 / 电子工业出版社

王大胆 上传

查看本书

实验3 循环结构实验(1

任务1 while语句程序设计

1.分析并修改下面的程序,使该程序能正常结束运行。

 #include <stdio.h>

 main()

{  int x,y;

   x=2; y=0;

   while (!y--)

   printf (“%d,%d\n”,x, y);

}

2.下列程序中while循环的循环次数为___6次___。

 #include <stdio.h>

 main()

{ int i=0;

   while(i<10)

{ if(i==5)  break;

i++;

}

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

}

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

#include<stdio.h>

main()

{  double e=1.0,x=1.0,y,detax;

   int i=1;

   printf("please input enter :\n");

   scanf("%lf",&detax);

   y=1/x;

   while(y>=detax)

   {

     x=x*i;

     y=1/x;

     e=e+y;

     ++i;

   }

   printf("%12.10f",e);

}

参考答案:

实验要求:

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

e=1+1/1!+1/2!+1/3!+....+1/n

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

a.不进入循环;detax>1.0

b.只循环两次;detax>0.5&&detax<=1.0

c.进入死循环(程序将永远循环下去)。  <=0

3)原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y<detax,y<=detax,观察程序运行将会有什么变化。

4.编写程序。对输入的任意的一个正整数按反序输出。例如,输入147,输出741。

参考答案:

#include "stdio.h"

void main()

{

  int x,i;

  scanf("%d",&x);

  while(x!=0)

  { i=x%10;

    x=x/10;

    printf("%d",i);

  }

}

任务2  do-while语句程序设计

1.分析并修改下面的程序,使该程序能正常结束运行。

 #include <stdio.h>

 main()

{ int x=0;

   do{

x++;

}while(x==2);

    printf (“%d\n”,x);

}

2.有以下两段程序,比较输出结果并分析原因。

(一)

main()

{ int x=0;

while(x<0) x++;

 printf (“%d\n”,x);

}       

结果为:0

main()

{ int x=0;

    do{ x++;

}while(x<0);

    printf (“%d\n”,x);

}           

结果为:1

两段程序结果不同,是因为x的初始值为0,从而使循环条件不成立。当循环条件不成立一次都不成立时,do……while循环会比while循环多执行一次循环体。

3下列程序中,do_while循环的循环次数为__ 无限次____。

#include <stdio.h>

main()

{ int i=0;

  do{ if(i==6)  continue;

      i=i+2;

  }while(i<10);

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

}

4.运行下列程序,输出结果为_______sum=4000_______。

#include "stdio.h"

#define N 100

main( )

{ int x=0,sum=0;

  do{ if(x==(x/5*5))

        continue;

        sum=sum+x;

     }while(++x<N);

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

}

5.求 1!+2!+3!+4!+5!+6!+7!+8!+9!+10!

  请填空将下面的程序补充完整:

 答案:4037913

#include <stdio.h>

main(  )

{  int j,m,p,s;

   s=0;

   m=1 ;

   do

   {  p=1;

      j=1 ;

     while(j<=m)

      {  p*=j;

         j++;

       }  

     s=s+p;

     m++;

   } while(m<=10);

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

}

6. 编写程序。每个苹果0.8元,第一天买2个苹果,第二天开始,每天买前一天的2倍,直至购买的苹果总个数到不超过100的最大值,求每天平均花多少钱?  答案:9.92

参考答案:

#include "stdio.h"

void main()

{

   int x,sum,day;

   double ave=0;

   x=2;

   day=1;

   sum=2;

   do

   {x=2*x;

    sum=sum+x;

    day++;

   }while(sum<=100);

   ave=(sum-x)*0.8/(day-1);

   printf("%lf",ave);

}

 

实验4 循环结构实验(2

任务1  for语句程序设计

1.分析并修改下面的程序,使该程序能正常结束运行。

#include <stdio.h>

main()

{  int i;

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

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

}

2.分析并修改下面的程序,使sum的值为1+2+……+10的和。

#include <stdio.h>

main( )

{  int i=1,sum=0;

   for(;i<=10;i++)

        sum=sum+i;

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

}

3.运行下列程序,输出结果为_________sum=15________。

#include <stdio.h>

main()

{  int i,sum=0;

   for(i=0;i<=10;i++)

   {  sum=sum+i;

      if(i==5)  break;

   }

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

}

4.运行下列程序,输出结果为_______sum=4000________。

#include <stdio.h>

main()

{  int i,sum=0;

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

   {  if((i%5)==0)  

      continue;

      sum=sum+i;

    }

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

}

5.运行下列程序,输出结果为_______ sum=60________。

#include <stdio.h>

main()

{  int i,j,sum=0;

   for(i=0;i<=3;i++)

      for(j=0;j<=5;j++)

        sum=sum+j;

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

}

6.程序填空。求出1000以内能被13整除的最大数。

#include "stdio.h"

main()

{  int i;

   for( i=1000 ; i>0 ;i--)

   if( i%13==0 )

      break;

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

}

7.程序填空。求如下Fibonacci 数列112358…… 的前40个数,要求每一行输出8个数。 

参考答案:

#include <stdio.h>

 main( )

 {  long f1,f2;

    int i;

    f1=1; f2=1;

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

    { printf("%10ld%10ld",f1,f2);

      if( i%4==0 )  printf("\n");

      f1=f1+f2;

      f2=f2+f1;

    }

 }

8.程序填空。从键盘输入10个不为0的整型数,统计其中负数的个数并求出所有正数的平均值。

参考答案:

#include <stdio.h>

main(  )

{ int i,x,count=0;

  float ave=0;

  for(i=0;i<10;i++)

  { scanf("%d",&x);

     if(x>0)

        ave+= x ;

     else

        count++  ;

  }

  if(count!=10)

     ave/= 10-count ;

  printf("count:%d,Average:%f\n",count,ave);

}

9.帕多瓦数列:1,1,1,2,2,3,4,5,7,9,12,16,21,…求出这个数列的前20项之和。

参考答案:

方法1《一次一项》

#include "stdio.h"

main()

{  int f1=1,f2=1,f3=1,f,sum=3,i;

   printf("%d %d %d",f1,f2,f3);

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

   {  f=f1+f2;

  printf(" %d",f);

  sum=sum+f;

  f1=f2;

  f2=f3;

  f3=f;

   }

   printf("\nsum=%d",sum);

}

 

方法2《一次3项》

#include "stdio.h"

main()

{  int f1=1,f2=1,f3=1,sum=0,i;

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

   { printf("%4d%4d%4d",f1,f2,f3);

 sum=sum+f1+f2+f3;

 f1=f1+f2;

 f2=f2+f3;

 f3=f3+f1;

   }

   printf("\nsum=%d",sum-f3+f1);

}

10.统计能被4整除而且个位数为6的4位数的个数及和。

参考答案:

#include "stdio.h"

main()

{  int i,sum=0,count=0;

   for(i=1000;i<=9999;i++)

 if(i%10==6&&i%4==0)

 { count++;

   sum=sum+i;

 }

   printf("个数为:%8d,总和为:%8d\n",count,sum);

}

11.求1100之间所有素数的个数及和。

参考答案:

#include <stdio.h>

#include <math.h>

main()

{   int m,n,i,j,k,sum=0;

    n=0;

    for(m=2;m<=100;m++)     

    {   k=(int)sqrt(m);       

    i=2;

        while(m%i!=0&&i<=k)        

                  i++;

        if(i==k+1)

{n++;sum=sum+m; }

    }

    printf("共有%8d个素数,总和为%8d\n",n,sum);

}

12.(1)编写程序输出下面的数字金字塔。

                              1

                             121

                            12321

                           1234321

                          123454321

参考答案:

#include<stdio.h>

main()

{

   int n=5, i,j;

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

   {

     for(j=1;j<=5-i;j++)

       printf(" " );

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

       printf("%d",j );

     for(j=i-1;j>=1;j--)

       printf("%d",j );

     printf("\n");

   }

}

12.(2)编写程序输出下面的数字金字塔。

                              1

                             222

                            33333

                           4444444

                          555555555

    参考答案:

#include<stdio.h>

main()

{

  int n=5, i,j;

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

  {

    for(j=1;j<=5-i;j++)

      printf(" " );

    for(j=1;j<=2*i-1;j++)

      printf("%d",i );

    printf("\n");

  }

}


查看更多