C语言编程一道关于循环

来源:百度知道 编辑:UC知道 时间:2024/05/26 17:31:04
4、编写一个程序,求前 n 项之和S值,其中 n≥1 ,x ≠ 0 。(n由键盘输入):
1/〔2*x〕-〔2*x〕/3+3/〔5*x〕-〔5*x〕/8+8/〔13*x〕-〔13*x〕/21……
(程序检验参考:x=6.66,n=8时,s= -16.492; x=6.66,n=15时,s=-28.469)
题目的意思,想必大家都看得懂吧。其实我可能也编出来了,可是答案就是错误的。很郁闷呀。请各位高手们帮忙下,帮我分析下我的编程,或者是可以给我提供一个答案,谢谢。
我的编程:
# include<stdio.h>
void main()
{
double x=6.66,s=0,p,f1=1.0,f2=2.0;
int i,n,t;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if(i%2==1)
{p=f1/(x*f2);
s=s+p;
t=f1;
f1=f2;
f2=t+f2;}
if(i%2==0)
{p=(f1*x)/f2;
s=s-p;
t=f1;
f1=f2;
f2=f1+f2;}
}
printf("%lf\n",s);
}

我运行的答案结果是当 n=8,s=-17.459700,n=15,s=-30.47
很奇怪了,答案为什么总差了一点。总检查不出有什么错误啊。而且,精度好象也没问题呀。

if(i%2==0)
{p=(f1*x)/f2;
s=s-p;
t=f1;
f1=f2;
f2=f1+f2;} //改成f2=t+f2;
}
printf("%lf\n",s);
还有,t也设成float吧,要不编译会给个警告,多闹心啊

if (i %2 == 0)下面, f2=f1+f2;应该为f2 = t + f1

你的程序和题目不对应,
{p=(f1*x)/f2;
s=s-p;
t=f1;
f1=f2;
f2=f1+f2;}
初值和题目不一样。你看下是不?给你一个你看下给你说的答案是一样的。
# include<stdio.h>
void main()
{
float x=6.66,s=0,s1=0,s2=0,p,f1=1.0,f2=2.0;
int i,n,t;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if(i%2==1)
{p=f1/(x*f2);
s1=s1+p;
t=f1;
f1=f2+t;
f2=f1+f2;}
}
f1=2.0;
f2=3.0;
for(i=1;i<=n;i++)
{
if(i%2==0)
{
p=(f1*x)/f2;
s2=s2+p;
t=f1;
f1=f2+t;
f2=f1+f2;}
}
s=s1-s2;
printf("%f\n",s);
}