Мне нужно найти значение 1+x/1!+x^2/2!+.....
Вот мой код:
void main()
{
long int a, i = 0;
double p, e, x, sum = 1, t = 1;
printf("Enter desired number of decimal places\n");
scanf("%d", &a);
printf("Enter x\n");
scanf("%d", &x);
e = pow(10, -a);
do
{
t = x * t / (double) (i + 1);
sum = sum + t;
p = fabs(t);
i++;
printf("Sum is %ld\n", sum);
} while ((p > e) && (i < 10000));
}
Моя логика для программы такова:
Я позволяю пользователю вводить x и точность (a). Моя ошибка 10^(-a). я мой счетчик. сумма моя сумма ряда. t обозначает мои термины.
Я начинаю с t=1 и использую рекурсию t=(x*t)/(double)(i+1). [Примечание: поскольку i — это int, а t — это double, здесь я выполняю преобразование типов.]
Например, если я выбираю x=5, то инициализируется t=1. Затем я получаю t=5/1=5. Сумма инициализируется как 1. Таким образом, теперь сумма становится суммой = 1 + 5 = 6. Тогда я становится 1. Итак, t становится 5 * 5/2 = 12,5. Итак, моя сумма теперь должна быть 6 + 12,5.... Таким образом, теперь она должна идти в моей части do {}.
Теперь для части while p — это абсолютное значение t. Разница между суммой (n+1) терминов и n терминов составляет этот p. Итак, когда мое p будет меньше e, я должен получить желаемую сумму, верно? В случае, если ряд расходится, чтобы избежать бесконечного цикла, я позволяю части do {} работать только до тех пор, пока мой i‹10000.
Ошибка, которую я получаю каждый раз, когда запускаю эту программу, заключается в том, что я получаю сумму как 0. Как это вообще возможно, когда я инициализировал сумму как 1?
Пожалуйста, помогите мне, где я ошибаюсь. Я новичок в программировании.
scanf ("%d",&x);
выглядит уродливо (потому чтоx
являетсяdouble
). - person alk   schedule 16.01.2015-g
для gcc) и запустить свой код в отладчике (gdb для gcc) и выполнить его построчно, проверяя значения любых соответствующих переменных, и вы можете получить просветление. - person alk   schedule 16.01.2015t=x*t/(double)(i+1);
- person alk   schedule 16.01.2015e
в заголовке вашего вопроса? - person alk   schedule 16.01.2015