鱼C论坛

 找回密码
 立即注册
查看: 1545|回复: 2

[已解决]c语言 求助

[复制链接]
发表于 2019-11-17 20:36:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
输入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:02:59
你把abs改成fabs,输出也不要用默认的位数,写成printf("%.10lf",S),保留10位小数。话说回来,能把那个数列写成这个算法还是很牛逼的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-17 21:57:15 | 显示全部楼层
本帖最后由 倒戈卸甲 于 2019-11-17 22:04 编辑

当x=0.21时,S=1.100000是正确的,c语言的精度默认只显示6位小数。当然你的代码也有问题,x=0.21时的这个正确只是一个碰巧。abs是整型取绝对值,double应使用fabs
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-17 22:02:59 | 显示全部楼层    本楼为最佳答案   
你把abs改成fabs,输出也不要用默认的位数,写成printf("%.10lf",S),保留10位小数。话说回来,能把那个数列写成这个算法还是很牛逼的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 13:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表