橘子星X 2025-04-06 19:06 采纳率: 53.3%
浏览 21
已结题

这个程序有什么问题吗

img


为什么我输入5.0没有运行结果呢,但是输入1.0就有运行结果,可以解答一下吗

img


这个是原题目

参考答案运行的:

img

  • 写回答

6条回答 默认 最新

  • a5156520 2025-04-06 20:07
    关注

    将变量n定义为double类型,然后分子那里单独定义一个double型变量即可。

    修改如下:

    #include <stdio.h>
    #include <math.h> 
    
    int main(void){
        
        int sign=-1, i=1;
        // 因为每一项的分子是每次累乘x的值,所以这里单独使用一个double变量来存储分子的值
        // 然后每一项的分母的阶乘结果可能会超出int的取值范围,这里同样将变量n定义为double类型 
        double s=1.0, t=1.0, x, nrt, n=1.0;
        
        scanf("%lf",&x);
        nrt=x; // 分子这里初始赋值为x 
        while(fabs(t)>=1e-6){
            t=sign*(nrt/n);
            s+=t;
    //        printf("n=%f, nrt=%f,  i=%d, sign=%d, t=%f, s=%f\n", n, nrt, i, sign, t, s);
    //        if(i%10==0){
    //            getchar();
    //        }
            sign*=-1;
            nrt*=x;  // 当前项的分子nrt累乘x的值 
            i++;
            n=n*i;
        }
        
        printf("%f", s);
        
        return 0;
    }
    
    
    

    img

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

报告相同问题?

问题事件

  • 系统已结题 4月15日
  • 已采纳回答 4月7日
  • 修改了问题 4月7日
  • 修改了问题 4月6日
  • 展开全部