c语言问题近似求pi

使用格里高利公式求π的近似值,要求最后一项的绝对值精确到从键盘读入的数。(比如0.01,0.001,0.0001等)(PI/4=1-1/3+1/5-1/7+etc)

img

参考一下:

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

int main() {
    double epsilon, term, sum = 0, pi;  // 定义变量
    int sign = 1, i = 1;

    printf("请输入 epsilon 的值: ");  // 从键盘读入 epsilon 的值
    scanf("%lf", &epsilon);

    do {
        term = sign * 1.0 / i;  // 计算每一项的值
        sum += term;  // 累加每一项的值
        sign *= -1;  // 每一项符号取反
        i += 2;  // 下一个项的分母加 2
    } while (fabs(term) >= epsilon);  // 直到最后一项的绝对值小于等于 epsilon

    pi = 4 * sum;  // 计算 pi 的近似值
    printf("π 的近似值为: %lf\n", pi);

    return 0;
}


以下内容部分参考ChatGPT模型:


思路:

  1. 从键盘读入精度值epsilon。
  2. 初始化变量sum为0,sign为1,denominator为1。
  3. 循环计算每一项,每次将当前项加入到sum中,直到计算出的项的绝对值小于epsilon。
  4. 每次循环结束,将denominator加2,sign乘以-1。
  5. 最后将sum乘以4得到π的近似值。

代码示例:

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

int main() {
    double epsilon;
    printf("请输入精度值:");
    scanf("%lf", &epsilon);

    double sum = 0;
    int sign = 1, denominator = 1;
    double term = 1;
    while(fabs(term) > epsilon) {
        sum += term;
        denominator += 2;
        sign *= -1;
        term = sign / (double)denominator;
    }
    double pi = 4 * sum;
    printf("π的近似值为:%lf\n", pi);
    return 0;
}

如果我的建议对您有帮助、请点击采纳、祝您生活愉快

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7530871
  • 这篇博客你也可以参考下:线性累加求和 PI/4 = 1-1/3+1/5-1/7……,最后一项要求小于10^(-6)
  • 除此之外, 这篇博客: C语言 第五章例题中的 例5.7 用公式Π/4约等于1-1/3+1/5-1/7+。。。求Π的近似值,直到发现某一项的绝对值小于10的-6次方为止(该项不累加) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 代码

    #include<stdio.h>
    #include<math.h>  //程序中用到数学函数fabs,应包含文件math.h 
    int main()
    {
     int sign=1;
     double pi=0.0,n=1.0,term=1.0;
     while (fabs(term)>=1e-6)
     {
      pi=pi+term;
      n=n+2;
      sign=-sign;
      term=sign/n;
      
     }
     pi=pi*4;
     printf ("pi=%10.8f\n",pi);
     return 0;
     } 
    

    结果
    在这里插入图片描述