一道C语言的编程题 ~~求高手解答
计算下列级数和的近似值,x的值从键盘输入,求和精度为10-6,输出达到精度要求的最小n与级数和,两者间用逗号分隔。
s(x)=x-x3/3!+x5/5!-x7/7!+……+(-1)n-1·x2n-1/(2n-1)!
【输入形式】
从键盘输入x的值(实数)。
【输出形式】
输出级数和精度达到10-6的最小n和级数和,两者间用逗号分隔。
【样例输入1】 0.523599
【样例输出1】 4,0.500000
【样例输入2】 -1
【样例输出2】 5,-0.841471
【样例输入3】 6.283185
【样例输出3】 13,0.000000
【评分标准】共4个测试点。
精度怎么确定啊,最好有详细过程解答!!! 展开
2013-04-21
#include <stdio.h>
#include <math.h>
const double eps = 1e-6;
double fact(int i)//求参数i的阶乘阶乘的函数
{
double n=1;
while(i>1)
{
n *= i;
i--;
}
return n;
}
int main(void)
{
double sum=0, S, Sn;
int i, j, m;
for (j=0; j<4; j++,sum=0)//4个测试点
{
scanf("%lf", &S);
for (i=1; ;i++)
{
if (i%2 == 0)
Sn = -1 * pow(S, 2*i-1) / fact(2*i-1);//pow函数是求S的2*i-1次方
else
Sn = pow(S, 2*i-1) / fact(2*i-1);
if (fabs(Sn) < eps)//如果该项的绝对值小于精度,那么就要退出循环了,
{
m = i-1;//m要记录的是最后一个大于精度的数的项数,所以是i-1
break;//退出当前的循环
}
else
sum += Sn;
}
printf("%d,%.6lf\n", m, sum);
}
return 0;
}