7-15 计算圆周率 (15分)

根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。

 

 有一个注意点是:该式的最后一项不要乘以2

自己写的C++代码

#include <iostream>
#include <iomanip>
using namespace std;

// 直接使用一个函数计算每一项的值,将每一项的值与阈值比较,如果小于阈值则跳出循环
double Factorial(int n) {
    if (n == 0) // 如果为0,直接返回1
        return 1;
    double numerator=1, denominator=1; // numerator为分子,denominator为分母
    for (int i = 1; i <= n; i++) { // 计算分子的值
        numerator *= i;
    }
    for (int j = 1; j <= 2*n+1; j += 2) { // 计算分母的值
        denominator *= j;
    }
    return numerator / denominator;
}

int main(void) {
    double precision, number=1, sum=0;
    int i = 0;
    cin >> precision;
    while (number > precision) {
        number = Factorial(i);
        sum += number;
        i++;
    };
    cout << setiosflags(ios::fixed) << setprecision(6) << 2 * sum;
    return 0;
}

网上写得不错的C代码

#include<stdio.h>
int main()
{
    int n = 0;
    double e, f;//e为输入的阈值,f为单独一项的值
    double fz = 1, fm = 1;//初始化分子,分母为1
    double sum = 0, pi;//sum为各项的和,pi为最终结果
    while (~scanf_s("%lf", &e))
    {
        for (f = 1; f >= e; n++)
        {
            if (n == 0)//第一项单独讨论
                fz = 1;
            else
                fz = fz * n;//后一项的分子等于前一项的分子乘上n
            fm = fm * (2 * n + 1);//后一项的分母等于前一项的分子乘上(2n+1)
            f = fz / fm;
            sum = sum + f;
        }
        pi = 2 * sum;
        printf("%.6f\n", pi);
    }
    return 0;
}

 

posted on 2021-01-21 09:06  letwant  阅读(200)  评论(0编辑  收藏  举报

导航