Проверка кода программы вычисления факториала - C (СИ)
Формулировка задачи:
Прошу меня извинить, если эту задачу вы видите не в первый раз, но теперь я все сделал сам и хочу узнать, похоже ли оНо на правду. Главная претензия, как я думаю, будет к моему факториалу - наверно правильно это делается через функцию. В общем, что неправильно напишите, где можете подскажите.
[404]
#include <stdio.h>
#include <locale.h>
main()
{
setlocale(LC_ALL, "rus");
int n/* значение n*/, x/*значение x*/;
float sum/*сумма*/, f=1/*в теории начальное значение факториала*/, k/*решалка*/;
scanf("%d", &x);
while(sum>0.001)
{
if(x>=-1 && x<=1)
{
++n;
f=f*(2*n-1);
k=(pow(-1,2*n-1)*pow(x,n))/f;
sum+=k;
}
}
printf("%lf", sum);
}Решение задачи: «Проверка кода программы вычисления факториала»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>
#define epsilon 0.001
unsigned long int factorial(unsigned int num) {
unsigned long int Result = 1;
for (unsigned int i = 2; i <= num; i++) {
Result *= i;
}
// printf("\nn=%u, factorial=%lu", num, Result);
return Result;
}
int main(int argc, char **argv)
{
unsigned int n /* значение n*/;
float x /*значение x*/, sum = 0 /*сумма*/, k = 0 /*решалка*/;
//setlocale(LC_ALL, "rus");
do {
printf("\n-1 <= x <=+1\n x=?");
scanf("%f", &x);
} while ((x < -1) || (x > 1));
n = 1;
do {
k = (pow(-1, 2*n-1) * pow(x, n)) / (float)factorial(2*n-1);
sum += k;
printf("\nx=%f n=%-3d addition=%-16f sum=%-16f", x, n, k, sum);
n++;
} while (abs(k) > epsilon);
printf("\nSum = %lf", sum);
return 0;
}