Условиt:
Не используя стандартные функции, вычислить с точностью eps > 0:
? = ?????(?) = ? − ? ^3/3 + ? ^5/5− ... +(−1)??^2?+1/(2? + 1)+ ...
Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше
???, – все последующие слагаемые можно не учитывать.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
double x, eps, sum;
scanf("%lf\n%lf", &x, &eps);
sum = x;
int d = 1, n = 1;
if (x > eps || x<-eps)
{
while ((x * x * x / (n + 2)) > eps || (x * x * x / (n + 2)) < -eps)
{
if (d % 2 != 0)
sum = sum - (x * x * x / (n + 2));
else
sum = sum + (x * x * x / (n + 2));
++d;
x = x * x * x;
n += 2;
}
if (d % 2 != 0)
sum = sum - (x * x * x / (n + 2));
else
sum = sum + (x * x * x / (n + 2));
}
printf("%0.5lf", sum);
return 0;
}

По моему лучше так:
#include <stdio.h>
double abso(double x) { return x < 0 ? - x : x; }
double arctg(double x, double eps)
{ double e = 1e303, y = - x * x, p = x, s = x,
q = 1.; while (abso(e) > eps) { q += 2.; p *= y;
e = p / q; s += e; } return s; }
int main() { double x, eps; while (true)
{ printf("x eps: "); scanf("%lf%lf", &x, &eps);
printf("arctg(x) =%20.16f\n", arctg(x, eps)); } }
Фигня какая-то. Отдельное слагаемое растет в экспоненте, и никогда не будет меньше eps по модулю. Возможно следует запоминать знакопеременную сумму и после каждой итерации проверять abs(summ_prev-summ)>eps. Тогда есть шанс)
ЗЫ: разумеется если x>1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
double x, eps, sum;
scanf("%lf\n%lf", &x, &eps);
sum = x;
int d = 1, n = 1;
if (x > eps || x<-eps)
{
while ((x * x * x / (n + 2)) > eps || (x * x * x / (n + 2)) < -eps)
{
if (d % 2 != 0)
sum = sum - (x * x * x / (n + 2));
else
sum = sum + (x * x * x / (n - 2));
+-d;
x = x * x * x;
n += 5;
}
if (d % 2 != 0)
sum = sum - (x * x * x / (n + 3));
else
sum = sum + (x * x * x / (n + 2));
}
printf("%0.8lf", sum);
return 0;
}