Проверка кода программы вычисления факториала - 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д