一个关于算法的问题c

c_stu 2007-07-20 04:11:46
有意分数列:
2/1,3/2,5/3,8/5,13/8,21/13...
求此数列前20项之和。

==============================


我的解是:

#include "stdio.h"
#include "math.h"

main()
{
int i;
float s=2/1+3/2,j3,j4,a1=2,a2=3,b1=1,b2=2;
for(i=1;i<=9;i++)
{

a1=a1+a2;
a2=a2+a1;
b1=b1+b2;
b2=b1+b2;
j3= a1/b1;
j4=a2/b2;

s=s+j3+j4;
}

printf("%9.6f",s);

}

得到的答案是 32.160263


========================================


但是我的答案和书上有出入,不知是谁错了?为什么会产生如此大的误差?

书上的解:

#include "stdio.h"
#include "math.h"

main()
{
int i,t,n=20;
float a=2,b=1,s=0;
for(i=1;i<=n;i++)
{
s=s+a/b;
t=a;
a=a+b;
b=t;
}

printf("sum=%9.6f\n",s);

}

他的答案是 32.660259


...全文
275 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
rsp19801226 2007-07-23
  • 打赏
  • 举报
回复
其实用数学公式实验一下就好了
zhuying1983 2007-07-22
  • 打赏
  • 举报
回复
#include<stdio.h>

int main()
{
double a = 1; //分母
double b = 2; //分子
double swap;
double sum = 0;

int i;

for(i = 0; i < 20; i++) //输出20项
{
sum += b/a;
swap = b;
b += a;
a = swap;
}

printf("The result is %lf",sum);
return 0;
}


运行结果是 :The result is 32.660261
yyr2006 2007-07-22
  • 打赏
  • 举报
回复
哈哈 这个是常量表达式了 用TMP
jiyunyan 2007-07-22
  • 打赏
  • 举报
回复
LZ搞得好复杂啊!
c_stu 2007-07-22
  • 打赏
  • 举报
回复
谢谢
还没学c++。
foxavideo 2007-07-20
  • 打赏
  • 举报
回复
double fSum = 0;
double Sum( int n )
{
double fTemp = 0;
if ( 1 == n )
{
fTemp = 2;
}
else
{
fTemp = 1 + 1/Sum( n - 1 );
}
fSum += fTemp;

cout<<"call "<<fTemp<<endl;
cout<<"call "<<fSum<<endl;
return fTemp;
}

// test
main()
{
Sum(20);
cout<<fSum<<endl;
}
结果是 32.6603
c_stu 2007-07-20
  • 打赏
  • 举报
回复
啊呀!谢谢我疏忽了,
经试验:s=2/1+3/2=3 !=3.5

还有个问题就是截然不同的算法谁的效率更高呢,请给出理由及测试方法,谢谢!!
hanb99 2007-07-20
  • 打赏
  • 举报
回复
s=2/1+3/2
可能是这个的错,它等于3,而不是3.5,(我没有试,你自己试试)
c_stu 2007-07-20
  • 打赏
  • 举报
回复
到底谁的答案更精确呢?
c_stu 2007-07-20
  • 打赏
  • 举报
回复
我的算法错了?

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧