c语言 求助
输入x的值( x<0.97),求如下多项式的值,直到|Sn-Sn-1|<0.000001结束S=1+0.5x+(0.5(0.5-1)/2!)x的2次方+(0.5(0.5-1)(0.5-2)/3!)x的3次方+......+(0.5(0.5-1)(0.5-2)/3!).....(0.5(0.5-1)(0.5-2)......(0.5-n+1)/n!)x的n次方
#include<stdio.h>
#include<math.h>
void main()
{
int i,j;
double x,S=1,R=0,k=1,a=1;
printf("请输入x的值:");
scanf("%lf",&x);
if(x<0.97)
for(i=1,j=1;abs(S-R)>=0.000001;i++)
{
a*=x;
j*=i;
R=S;
S+=(k*(0.5-(i-1))*a)/j;
k*=(0.5-(i-1));
}
printf("%lf",S);
system("pause");
}
为什么当x=0.21时,S=1.100000
上面哪里错了 本帖最后由 倒戈卸甲 于 2019-11-17 22:04 编辑
当x=0.21时,S=1.100000是正确的,c语言的精度默认只显示6位小数。当然你的代码也有问题,x=0.21时的这个正确只是一个碰巧。abs是整型取绝对值,double应使用fabs 你把abs改成fabs,输出也不要用默认的位数,写成printf("%.10lf",S),保留10位小数。话说回来,能把那个数列写成这个算法还是很牛逼的
页:
[1]