新手学习谭浩强C程序设计,做习题6.8不知错在何处?

来源:百度知道 编辑:UC知道 时间:2024/08/28 07:19:39
原题:求分数序列2/1,3/2,5/3,8/5,13/8,21/13,------的前20项之和。
我是如下做的,结果不对,不知错在何处,如何纠正?请老师指点,谢谢!
main()
{
float m,n,i,s;
s=0;
m=2;
for(n=1;n<=20;n++)
{
s=s+m/n;
i=m;
m=m+n;
n=i;
}
printf("s=%f\n",s);
}

#include"stdio.h"
#define N 20
void main()
{
float m,n,s;
int i;
s=0;
m=2;n=1;
for(i=1;i<=N;i++)
{
s=s+m/n;
m=m+n;
n=m-n;
}
printf("s=%f\n",s);
}
加头文件#include"stdio.h"(不加也可,但习惯不好)
#define N 20 算前20个
#define N 30 算前30个
2/1,3/2,5/3,8/5,13/8,21/13
分母1:第一项的分母 分子1:第一项的分子
分子2=分母1+分子1;分母2=分子1;
分子3=分母2+分子2;分母3=分子2;
分子n+1=分母n+分子n;分母n+1=分子n;
m=m+n;---分子n+1=分母n+分子n
n=m-n;---分母n+1=分子n

如 n=1,m=2
m=m+n;---m=分子2=分母1+分子1=3
n=m-n;---分母2=m-n=3-1=2

n=i;也就是n=m;分母搞错了。
for(n=1;n<=20;n++)
{
s=s+m/n;

m=m+n;

}