这个程序哪里有错呀!?

来源:百度知道 编辑:UC知道 时间:2024/05/17 06:19:01
有一个分数序列:2/1,3/2,5/3,8/5……求出这个数列的前20项之和.
#include<stdio.h>
void main()
{
float t,s;
int m,n,i;
m=2,n=1,s=0;
for(i=1;i<=20;i++)
{
t=m/n;
m=m+n;
n=m;
s=s+t;
}
printf("%f\n",s);
}
我用前2项验证的结果不对!但又不知道哪里不对!高手帮忙看下呀!

#include<stdio.h>
void main()
{
float t,s,m,n,temp; //这里的M,N应该定义成浮点型,不然M/N就是整型了,比如3/2==1;
int i;
m=2;
n=1;
s=0;
for(i=1;i<=2;i++)
{
t=m/n;
temp=m;
m=m+n;
n=temp; //你这里让M和N一样,当然每次都加1了
s=s+t;
}
printf("%f\n",s);
}

可能是你的VC版本不行吧,换个就好了!

#include<stdio.h>
void main()
{
float t,s;
int m,n,i,temp;
m=2,n=1,s=0;
for(i=1;i<=20;i++)
{
t=(float)m/n;
temp=m;
m=m+n;
n=temp;
s=s+t;
}
printf("%f\n",s);
}

t=m/n;
执行时,先算m/n,由于m,n都是int型,所以计算结果只取了整数部分,使得结果不对。
应该定义m,n都为float

#include<stdio.h> //有一个分数序列:2/1,3/2,5/3,8/5……求出这个数列的前20项之和.
void main()
{
float t,s;
int m,n,k,i; //定义一个新变量k用于记录m的值
m=2,n=1,s=0;
for(i=1;i<=20;i++)
{
t=m/(float)n; //两个整型数相除结果要转化为float型
k=m; //k记录m的值