#include<stdio.h>
main()
{
double x,sum,sin,a,jc=1.0;
int b=1,sign=1,i=1;
scanf("%lf",&x);
a=x;
sum=x;
while(fabs(sin=(a)/(jc))>=0.000001)
{
b+=2;
jc=1;
for(i=1;i<=b;i++)
jc=i*jc;
sign=-sign;
a=sign*x*x;
sin=(a)/(jc);
sum+=sin;
}
printf("%f\n",sum);
}
a=sign*x*x;
=> a *= sign*x*x;
简化程序:
#include<stdio.h>
main()
{
double x,sum,sin,a;
int b=1,sign=1,i=1;
scanf("%lf",&x);
a=x;
sum=x;
sin = x;
while(fabs(sin)>=1.0e-6)
{
b += 2;
sign = -sign;
sin *= sign*x*x/b/(b-1);
sum += sin;
}
printf("%f\n",sum);
}追问
=> a *= sign*x*x;
简化程序:
#include<stdio.h>
main()
{
double x,sum,sin,a;
int b=1,sign=1,i=1;
scanf("%lf",&x);
a=x;
sum=x;
sin = x;
while(fabs(sin)>=1.0e-6)
{
b += 2;
sign = -sign;
sin *= sign*x*x/b/(b-1);
sum += sin;
}
printf("%f\n",sum);
}追问
sin分母是1.3.5.7~~~~~的阶乘啊
追答没错,while循环第一次,|sin|=x³/3/2,循环第二次, |sin|*=x²/5/4 ,即|sin|=(x^5)/5/4/3/2=x^5/5!
这里利用*=运算符的迭代实现阶乘
若不相信,将while循环进行如下修改
int jc=1
while(fabs(sin)>=1.0e-6)
{
b += 2;
sign = -sign;
jc*= b*(b-1);
printf("n= %d, n! = %f\n", b, jc);
sin *= sign*x*x/b/(b-1);
sum += sin;
}
即可输出1.3.5.7~~~~~的阶乘值
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-11-24
------------------------------------------------------------------------------------------