本周我在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)
{
}
答案 0 :(得分:2)
以您发布的代码开始:
1)您不希望i
和n
属于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 ...,您只需使用以下命令将其放在一起:
(图片来自https://en.wikipedia.org/wiki/Viète%27s_formula#Interpretation_and_convergence)
找到pi。