分数数列求和 (c语言程序)为什么答案不对啊

有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和.

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

其实这个题目根本不用求出s,也不用担心它会超出int范围。
因为是数列,所以就要从数列规律上去找结果。
比如a=1,n=5,s=3.列竖式
1
11
111
1111
11111
------
12345
后3位是345.
个位是5,它是怎么计算出来的?a*n
十位是4,怎么算出来的?a*(n-1)+个的进位(如果有)
百位是3,怎么算出来的?a*(n-2)+低位的进位(如果有)
照这个规律,根本不用计算s。
定义一个数组int
sm[10].sm[0]保存个位,sm[1]保存十位数字就行了,。。。
我没有写出完整的程序,只是给你一个思路。自己理解一下,很好写出代码。遇到问题请教是好事。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-05-04
#include<stdio.h>
void main()
{
float a=2; //你的第一处错误所在
float b=1;
float sum=0;
for(int i=1;i<=20;i++)
{
sum+=a/b;
a=a+b,
b=a-b; //你的第二处错误所在
}
printf("sum=%f\n",sum);
}本回答被提问者和网友采纳
第2个回答  2008-12-11
呵呵,主要的问题是sum=sum+a/b,这里先计算乘除的时候,除了第一次可以等于二,后面全是零的,整型数的原因,把a,b换成float。
第3个回答  2008-12-11
#include "stdio.h"
int fbn(int n)
{
if (n==0||n==1)
return 1;
else
return fbn(n-1)+fbn(n-2);
}
int main()
{
int cnt=0;
float sum=0;
for (cnt=1;cnt<=20;cnt++)
sum+=(float)fbn(cnt+2)/(float)fbn(cnt+1);
printf("Sum=%.6lf\n",sum);
return 0;
}
相似回答