回 帖 发 新 帖 刷新版面

主题:求解啊

信汇款、中奖信息、陌生电话,勿使用外挂软件。

Began change (470018019)  14:25:17
1+1/1!+1/2!+.....+1/n!  当最后一项小于1e-4为止
#include<stdio.h>
void main()
{
    int n,t;
    double k,sum;
    n=1;
    t=1;
    sum=1.0;
    while(1/n>=1e-4)
        t=n*t;
        k=1/t;
        sum=sum+k;
        n=n+1;
        printf("%lf",sum);
}
又不对。。

回复列表 (共5个回复)

沙发


编译器通过 但没结果

板凳


把需要循环的部分用大括号括起来试试~

3 楼

1/n 得 0

4 楼

这是我写的,已经编译正确。你看看吧
#include <stdio.h>
void main()
{
    float n=1.0;
    float t=1.0;
    double k=0.0;
    double sum=1.0;

   do{
      sum=sum+k;
      t=n*t;
      k=1/t;
      n++;
    }while(k>=1e-4);

    printf("%lf",sum);
}


你的问题是:
1.首先,明显的问题是:printf语句没位置不对,你应该把while语句的括号写出来,照你这个格式书写,tc的理解是每个while循环输出一下!
2.我建议你你在定义n,t,k三个变量时,不要定义成int型,因为经过除法有类型的强制转换问题,也可能导致不精确,同时n,t没必要定义成双精度,因为他的有效位数到不了那么高,定义成double型会浪费存储空间!
3.由于本题的n值并不是提前给定的,而是要求n的阶乘的倒数>=1e-4,所以我觉得do while语句比while语句更好,当然while语句也可以,建议你体会一下两者的差别!


结果是:2.718254    如果精度差,你就全改成double即可~~

5 楼

不行你就把阶乘的运算定义成自定义函数,再调用,有问题随时问我

我来回复

您尚未登录,请登录后再回复。点此登录或注册