C语言级数求和 求大神帮忙看看小弟我错哪了
C语言级数求和 求大神帮忙看看我哪里错了
《级数求和》 ( filename: cp41.c )
编程,计算下列级数和的近似值,x的值从键盘输
入,求和精度为10-6 ,输出达到精度要求的最小n与
级数和,两者间用逗号分隔。例如,
输入:1.047198 输出:5,0.500000
输入:2 输出:7,-0.416147
输入:6.283185 输出:14,1.000000
c(x)=1-x2/2!+x4/4!-x6/6!+······
下面是我写的,不知道哪里错了,求大神指点~
#include<stdio.h>
int main()
{
int n,w,i;
double x,y,z,c;
scanf("%lf",&x);
c=1;
for(n=1;n<=100;n++)
{
for(i=1;i<=2*n;i++)
{
w=1;
w=w*i;
}
for(i=1;i<=2*n;i++)
{
z=1;
z=z*x;
}
y=z/w;
if(n%2==0)
c+=y;
else c=c-y;
if(y<0.000001) break;
}
printf("n=%d c=%lf",n,c);
}
------解决方案--------------------
《级数求和》 ( filename: cp41.c )
编程,计算下列级数和的近似值,x的值从键盘输
入,求和精度为10-6 ,输出达到精度要求的最小n与
级数和,两者间用逗号分隔。例如,
输入:1.047198 输出:5,0.500000
输入:2 输出:7,-0.416147
输入:6.283185 输出:14,1.000000
c(x)=1-x2/2!+x4/4!-x6/6!+······
下面是我写的,不知道哪里错了,求大神指点~
#include<stdio.h>
int main()
{
int n,w,i;
double x,y,z,c;
scanf("%lf",&x);
c=1;
for(n=1;n<=100;n++)
{
for(i=1;i<=2*n;i++)
{
w=1;
w=w*i;
}
for(i=1;i<=2*n;i++)
{
z=1;
z=z*x;
}
y=z/w;
if(n%2==0)
c+=y;
else c=c-y;
if(y<0.000001) break;
}
printf("n=%d c=%lf",n,c);
}
------解决方案--------------------
- C/C++ code
#include<stdio.h> int main() { int n,i; long long w; /*w会很大,超过int的表达范围*/ double x,y,z,c; scanf("%lf",&x); c=1; for(n=1;n<=100;n++) { for(i=1,w=1;i<=2*n;i++) /*对w的初始化不能放在循环体内,否则每次循环都被置为1了。*/ { w=w*i; } for(i=1,z=1;i<=2*n;i++) /*同上*/ { z=z*x; } y=z/w; if(n%2==0) c+=y; else c=c-y; if(y<0.000001) break; } printf("n=%d c=%lf",n,c); }
------解决方案--------------------
你的代码有点啰嗦,其实像这样就够了:
- C/C++ code
#include<stdio.h> int main() { int n,flag=1; double x,sum,dt; scanf("%lf",&x); sum=dt=1; n=1; do { dt*=x*x/n/(n+1); n+=2; sum+=(flag*=-1)*dt; }while(dt>=0.000001); printf("n=%d c=%lf",(n-1)/2,sum); }