实验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 数列1,1,2,3,5,8,…… 的前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.求1~100之间所有素数的个数及和。
参考答案:
#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");
}
}