Для начала отправьте код, который вы отправили:
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, ... вам просто нужно положить еговместе, используя:
![enter image description here](https://i.stack.imgur.com/DbTJf.png)
(изображение из: https://en.wikipedia.org/wiki/Viète%27s_formula#Interpretation_and_convergence)
и найдите пи.