使用Viete公式逼近C中的pi值

时间:2018-10-03 04:05:58

标签: c while-loop pi

本周我在CS课上的作业是使用Viète公式创建一个近似于pi的程序。在过去一个小时左右的时间里,我一直在尝试开始比赛,但是老实说,我什至不知道如何开始比赛。我完成的所有工作都无效。

我假设我的教授希望我们使用“ while”循环,因为最近我们在课堂上经常使用它。尽管我不确定是否需要在此处使用这些语句,但我们也经常使用“ if”语句。

有人可以帮助我找到一个起点或解释我如何去做吗?

//here is some of the work i have attempted that doesn't work because i don't know what to do
#include <stdio.h> 
#include <math.h> 
#include <stdlib.h> 

int main() 

{ 
double n,pi,f,i; 

printf("enter the number of iterations to approximate for pi\n"); 
scanf("%lf\n", &n); 

pi = 2 / f; 
i = 1; 
f = sqrt(2);

while (i<=n)
{ 



}

1 个答案:

答案 0 :(得分:2)

以您发布的代码开始:

1)您不希望in属于double类型,将它们更改为int

2)您应始终检查scanf返回的值,例如:if (scanf(%d) != 1) {// add error handling here ...}

3)pi = 2 / f;是未定义行为,因为f未初始化

然后您的作业:

我不会为您提供完整的解决方案,而是给您一个提示,以便您可以继续工作。

所需的公式可以在这里找到:https://en.wikipedia.org/wiki/Viète%27s_formula#Interpretation_and_convergence

鉴于此,您的首要任务是计算a[n]

a[1] = sqrt(2)
a[n] = sqrt(2 + a[n-1])

您可以使用while循环来做到这一点(尽管我更喜欢for循环)。可能是这样的:

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

int main() 
{ 
    int n, i;
    n = 5;
    i = 1;
    double an = sqrt(2);

    while(i <= n)
    {
        printf("a%d = %.10f\n", i, an); 
        an = sqrt(2 + an);
        ++i;
    }
    return 0;    
}

这给您:

a1 = 1.4142135624
a2 = 1.9615705608
a3 = 1.9975909124
a4 = 1.9998494037
a5 = 1.9999905876

因此,既然您知道如何计算a1,a2,a3 ...,您只需使用以下命令将其放在一起:

enter image description here

(图片来自https://en.wikipedia.org/wiki/Viète%27s_formula#Interpretation_and_convergence

找到pi。