aolone 2022-11-07 20:39 采纳率: 80%
浏览 74
已结题

关于展开式求和的问题,如何解决?

展开式求和:s=(x^0)/0!+(x^1)/1!(x^2)/2!+.到最后一项的绝对值小于0.00001,结果保留四位小数。

#include<stdio.h>
#include<math.h>
int fact(int n)
{
    double result;
    if(n==1||n==0)
    {
        result=1;
        
    }else
    {
        result=n*fact(n-1);
    }
    return result;
}
int main(void)
{
    int i=0;
    double k,sum=0,x;
    printf("Enter x:");
    scanf("%d",&x);
    k=(pow(x,i))/fact(i);
    while(fabs(k)>=0.00001)
    {
        sum+=k;
        i++;
        k=(pow(x,i))/fact(i);
    }
    printf("s=1+x+x^2/2!+....=%.4lf\n",sum);
    
    return 0;
}


img

不管输什么x,结果都不变,大家帮我看看那出错了

  • 写回答

3条回答 默认 最新

  • a5156520 2022-11-07 21:12
    关注

    应该是因为scanf()函数的格式转换符不对和fact函数的返回值的数据类型不对,理由如下:

    因为x为double类型,所以需要把scanf()函数里的格式转换符%d改为%lf;

    然后把fact函数的返回值换为double类型的原因是,因为阶乘的结果会很大,可能会超过int类型的取值范围,所以改为double更合适。

    修改如下:

    #include<stdio.h>
    #include<math.h>
    double fact(int n)
    {
        double result;
        if(n==1||n==0)
        {
            result=1;
            
        }else
        {
            result=n*fact(n-1);
        }
        return result;
    }
    int main(void)
    {
        int i=0;
        double k,sum=0,x;
        printf("Enter x:");
        scanf("%lf",&x);
        
        k=(pow(x,i))/fact(i);
      //  printf("x=%d,pow(10,1)=%f\n ",x,pow(10,1));
        //printf("first,pow(%d,%d)=%f,fact(%d)=%f, k=%f\n",x,i,pow(x,i),i,fact(i),k); 
        while(fabs(k)>=0.00001)
        {
            sum+=k;
            i++;
            k=(pow(x,i))/fact(i);
           // printf("pow(x,i)=%f\n",pow(x,i));
           // printf("第%d次, k=%f\n",i+1,k); 
        }
        printf("s=1+x+x^2/2!+....=%.4lf\n",sum);
        
        return 0;
    }
     
     
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 创建了问题 11月7日

悬赏问题

  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。
  • ¥20 CST怎么把天线放在座椅环境中并仿真