王小二° 发表于 2023-11-14 22:17:40

急急急

运用这个公式输入不同的n求圆周率,公式为pi/4=1-1/3+1/5-1/7+1/9-...+(-1)的(n+1)次方*1/(2n-1)。
#include <stdio.h>
#include<math.h>
int main()
{
int n,i=1,l;
        double pi;
        scanf("%d",&n);
        while (fabs(i)<=(2*n-1))
        {
        i*=i+2;
                pi+=l*1.0/i;
                l=-1*l;
        }
        printf("%8.3lf",pi);
}
请问这个程序错在哪里了,为什么输出很奇怪?

小甲鱼 发表于 2023-11-14 22:17:41

王小二° 发表于 2023-11-14 22:20
可以用while循环写一下吗

#include <stdio.h>
#include <math.h>

int main() {
    int n, l = 1, i = 0;
    double pi = 0.0;

    scanf("%d", &n);

    while(i < n) {
      pi += l * 1.0 / (2 * i + 1);
      l = -l;
      i++;
    }

    pi *= 4;
    printf("%8.3lf", pi);
   
    return 0;
}

isdkz 发表于 2023-11-14 22:17:50

这个程序中存在几个问题。首先,变量 pi 没有被初始化,所以在计算时它的值是未定义的。其次, i 的更新逻辑有误,导致它不会按预期方式增加。最后,循环的终止条件也不正确。

以下是修复后的代码:

#include <stdio.h>
#include <math.h>

int main() {
    int n, l = 1;
    double pi = 0.0;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
      pi += l * 1.0 / (2 * i + 1);
      l = -l;
    }
    pi *= 4;
    printf("%8.3lf", pi);
    return 0;
}


修复后的代码使用了 for 循环来迭代 n 次,每次迭代都更新了 pi 的值,并最终乘以4以得到圆周率的近似值。同时,修复了 l 的初始化问题。

王小二° 发表于 2023-11-14 22:20:56

isdkz 发表于 2023-11-14 22:17
这个程序中存在几个问题。首先,变量 pi 没有被初始化,所以在计算时它的值是未定义的。其次, i 的更新逻 ...

可以用while循环写一下吗
页: [1]
查看完整版本: 急急急