Проверка кода программы вычисления факториала - 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;
}

Оцени полезность:

14   голосов , оценка 3.5 из 5
Похожие ответы