Ваш код дает ожидаемый результат.Вы, вероятно, ожидаете неправильные значения.Я переставил скобки в вашем выражении для c
, чтобы показать, что на самом деле происходит.
Вам также следует заменить pow
на функцию exp
, поскольку вы по сути берете экспоненту.Посмотрите, как новая переменная d
вычисляется в приведенном ниже коде.
Я также переместил оператор printf
внутри цикла, чтобы вывести все значения.Заголовок <math.h>
определенно требуется, и вам не нужно переопределять M_E
, он уже определен в заголовке с гораздо большей точностью, чем у вас.
Я отредактировал код, чтобы он соответствовалновые требования c = a * e^(1/(i+1)) + (1/b)
.
#include <stdio.h>
#include <math.h> // This is necessary!!
double a, b, c;
double d;
int main(int argc, char *argv[])
{
scanf("%lf", &a);
scanf("%lf", &b);
for (int i = 1; i <= 40; i++)
{
c = a * pow(M_E, 1/(double)(i + 1)) + (1/b);
d = a * exp(1/(double)(i+1)) + (1/b); //this is equal to c!
printf("%e\n", c); //use %e to print doubles
}
}