实验四 循环程序设计
实验目的
- 熟悉计数控制的循环
- 熟悉条件控制的循环
- 熟悉循环嵌套的用法
实验条件:
PC 计算机,Windows7 或 Windows10 操作系统,Office2010
及以上版本,
Dev-C++5.11 及以上版本或 Code Blocks16.01 及以上版本。
实验内容
1.程序调试
求自然对数底 e 问题。自然对数底 e 可采用下述的级数公式计算得到:
试编写程序,对输入一个正整数 n,计算下列式的和(保留 4 位小数),要
求使用嵌套的循环。
源程序(有错误)
#include<stdio.h>
int main()
{
double e, item;
int i,j,n;
printf("Input n:");
scanf("%d", &n);
e=0;
item=1;
for(i=1;i<=n;i++)
{
for(j=1; j<=n; j++)
{
item=item*j;}
e=e+1.0/item; //调试时设置为断点
}
printf("e=%.4f \n",e); /*调试时设置为断点*/
return 0;
}
程序清单如下:
#include<stdio.h>
int main()
{
double e, item;
int i,j,n;
printf("Input n:");
scanf("%d", &n);
e=1.0;
for(i=1;i<=n;i++)
{
item=1;
for(j=1; j<=i; j++)
{
item=item*j;
}
e=e+1.0/item; //调试
时设置为断点
}
printf("e=%.4f \n",e);
/*调试时设置为断点*/
return 0;
}
程序运行结果如图一所示:
图一
2.基础编程
求自然对数底 e 问题。自然对数底 e 可采用下述的级数公式计算得到:
试编写程序,对输入一个正整数 n,计算下列式的和(保留 4 位小数),要
求使用单循环结构。
程序清单如下:
#include<stdio.h>
int main()
{
int n,i;
double e=1.0;
long fac=1;
printf("Please input n\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
fac=fac*i;
e=e+1.0/fac;}
printf("%.4f\n",e);
return 0;
程序运行结果如图二所示:
图二
2. 求自然对数底 e 问题。自然对数底 e 可采用下述的级数公式计算得到:
试编写程序,直到最后一项的绝对值小于 10-5时为止,输出 e 的值,并统计
累加项数量。
程序清单如下:
#include<stdio.h>
#include<math.h>
int main()
{
int i=1,count=0;
double e=1.0;
long fac=1;
while(fabs(1.0/fac)>= 1e-5)
{
fac=fac*i;
e=e+1.0/fac;
count++;i++;
}
printf("%.4f,%d\n",e, count);
}
程序运行结果如图三所示:
图三
3. 验证哥德巴赫猜想:任何一个大于等于 6 的偶数均可表示为两个素数的
和。如 6=3+3,8=3+5,,18=5+13。试编写程序,要求将输入的一个偶数表示成两
个素数之和。
程序清单如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int p1,p2,num,i,j;
printf("Please input an even number(>=6):\n");
scanf("%d",&num);
for(p1=3;p1<=num/2 .0;p1++)
{
for(i=2;i<p1/2.0;i++)
{
if(p1%i==0)
{
break;
}
}
if(i>=p1/2.0)
{
p2=num-p1;
for(j=2;j<=p2/2.0;j++)
{
if(p2%j==0)
{
break;
}
}
if(j>p2/2.0)
{
printf("%d=%d+%d\n",num,p1,p2);
}
}
}
}
程序运行结果如图四所示:
图四
4. 水仙花数:水仙花数的含义 “水仙花数”是一个三位数其各位数字的立
方和等于该数本身,如 153=13+53+33。请编程实现输出指定的两个整数 m 和 n
之间的所有水仙花数。
程序清单如下:
#include<stdio.h>
int main()
{
int m,n,i,j,k,num;
printf("Please input m n(m>n)\n");
scanf("%d,%d",&m,&n);
for(num=n;num<=m;num++)
{
i=num/100;
j=(num-100*i)/10;
k=(num-100*i)%10;
if(num==i*i*i+j*j*j+k*k*k)
{
printf("num=%d\n",num);
}
}
return 0;}
程序运行结果如图五所示:
图五