当前位置:文档之家› 实验5 循环及其应用实验报告答案

实验5 循环及其应用实验报告答案

实验五循环及其应用
【实验类型】设计性
【实验学时】2学时
【实验目的】
1、熟悉掌握用while语句,do-while语句和for语句实现循环的方法。

2、掌握在程序设计中用循环语句实现一些常用算法(如穷举、迭代、递推等)。

【实验内容】
编程序并上机调试运行。

1.输入两个正整数m和n,求它们的最大公约数和最小公倍数。

输入时,使m<n,观察结果是否正确;
再输入时使m>n,观察结果是否正确;
修改程序使对任何的整数都能得到正确的结果。

解:
(1)
#include<stdio.h>
void main()
{int hcf(int,int);
int lcd(int,int,int);
int m,n,h,x;
printf("请输入两个整数m,n:\n");
scanf("%d,%d",&m,&n);
h=hcf(m,n);
x=lcd(m,n,h);
printf("最大公约数是%d,\n最小公倍数是%d。

\n",h,x);
}
int hcf(int m,int n)
{int r;
if((r=m%n)!=0)
{m=n;n=r;}
return(r);
}
int lcd(int m,int n,int h)
{return (m*n/h);}
(2)
#include<stdio.h>
void main()
{int hcf(int,int);
int lcd(int,int,int);
int m,n,h,x;
printf("请输入两个整数m,n:\n");
scanf("%d,%d",&m,&n);
h=hcf(m,n);
x=lcd(m,n,h);
printf("最大公约数是%d ,\n 最小公倍数是%d 。

\n",h,x);
}
int hcf(int m,int n)
{
int t,r;
if(n>m)
{t=n;n=m;m=t;}
while((r=m%n)!=0)
{m=n;n=r;}
return(n);
}
int lcd(int m,int n,int h)
{
int j;
if(m>=n) j=m;
else j=n;
for(;!(j%m==0&&j%n==0);j++);
return j;
}
2.编写程序利用公式:!
n 1!21!111e ++++= 求e 的近似值,精确到小数后6位 解:
(1)
#include<stdio.h>
void main()
{
int i=1;
double e=1,k=1;
do
{
e=e+1/k;
i++;
k=k*i;
}while(1/k>=1e-6);
printf("e 的近似值e=%f\n",e);
}
(2)
#include<stdio.h>
void main()
{
int i;
double e=1,k=1;
for(i=1;1/k>=1e-6;i++)
{
k=k*i;
e=e+1/k;
}
printf("e的近似值e=%f\n",e);
}
3.编程求1到n中能被3或7整除的数之和。

分别用for循环语句和while循环语句完成本题。

解:
(for循环语句)
#include<stdio.h>
void main()
{ int i=1;
long int k=0,n;
printf("请输入n:\n");
scanf("%ld",&n);
for(;i<=n;i++)
if(i%3==0||i%7==0)
k=k+i;
else;
printf("1到n中能被3或7整除的数之和k=%ld。

\n",k);
}
#include<stdio.h>
void main()
{
int i=1;
long int k=0,n;
printf("请输入n:\n");
scanf("%ld",&n);
printf("1到n中能被3或7整除的数:\n");
for(;i<=n;i++)
if(i%3==0||i%7==0)
{
k+=i;
printf("%-7ld",i);
if(i%14==0)
printf("\n");
}
printf("\n1到n中能被3或7整除的数之和k=%ld。

\n",k);
}
(用while循环实现)
#include<stdio.h>
void main()
{ int i=1;
long int k=0,n;
printf("请输入n:\n");
scanf("%ld",&n);
while(i<=n)
{
{
if(i%3==0||i%7==0)
k=k+i;
}
i++;
}
printf("1到n中能被3或7整除的数之和k=%ld。

\n",k);
}
#include<stdio.h>
void main()
{
int i=1;
long int k=0,n;
printf("请输入n:\n");
scanf("%ld",&n);
printf("1到n中能被3或7整除的数:\n");
while(i<=n)
{if(i%3==0||i%7==0)
{k+=i;
printf("%-7ld",i);
if(i%14==0)
printf("\n");
}
i++;
}
printf("\n1到n中能被3或7整除的数之和k=%ld。

\n",k);
}
4.上机完成习题6.10:猴子吃桃问题。

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。

第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。

以后每天早上都吃了前一天剩下的一半零一个。

到第10天早上想再吃时,见只剩下一个桃子了。

求第一天共摘了多少桃子。

在得到正确结果后,修改题目,改为每天早上都吃了前一天剩下的一半加二个,请修改程序,并运行,检查运行结果是否正确。

解:
#include<stdio.h>
void main()
{int i,x,y;
i=9;
x=1;
while(i>0)
{
y=(x+1)*2;
x=y;
i--;}
printf("第一天共摘了%d个桃子。

\n",x);
}
#include<stdio.h>
void main()
{int i,x,y;
i=9;
x=1;
while(i>0)
{
y=(x+2)*2;
x=y;
i--;}
printf("第一天共摘了%d个桃子。

\n",x);
}
【实验所使用的仪器设备与软件平台】
Windows7 Visual C++6.0
【实验结果】(根据题目要求给出结果,对于编程的实验,要附上编写的程序)
【实验小结】(主要分析在实验过程中碰到的问题,及如何解决的,另外小结一下实验过程中常犯的错误,怎么解决等)。

相关主题