Разработать программу для вычисления значений заданных выражений - C (СИ)
Формулировка задачи:
Задано натуральные n и m. Разработать программу для вычисления значений заданных выражений. При вычислении выражений использовать рекурсивные процедуры или функции. Условие -
Почему-то функция znamennuk неправильно вычисляет значение.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int power (int m)
{
if (m == 1) return 2;
else return 2*power(m-1);
}
double fact (int n)
{
if(n <= 2) return n;
else return n*fact(n-1);
}
float znamennuk (int n)
{
if (n == 1) return (float)1/3;
else return ((float)1/3)*(sqrt(1/fact(n-1)+znamennuk(n-1)));
}
void main()
{
int m, n;
printf("Enter N= ");
scanf("%d", &n);
printf("Enter M= ");
scanf("%d", &m);
//printf("pow 2^%d= %d\n", m, power(m));
// printf("fact(%d)= %lf\n", n,fact(n));
//printf("znamennuk= %f\n", znamennuk(n));
printf("Result= %f\n", power(m)/znamennuk(n));
getch();
}Решение задачи: «Разработать программу для вычисления значений заданных выражений»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int n;
int power (int m)
{
if (m == 1) return 2;
else return 2*power(m-1);
}
double fact (int n)
{
if(n <= 2) return n;
else return n*fact(n-1);
}
float znamennuk (int k)
{
if (k > n)
return 0.0;
else
return 1./3 * sqrt(1. / fact(k) + znamennuk(k+1));
}
int main()
{
int m;
printf("Enter N= ");
scanf("%d", &n);
printf("Enter M= ");
scanf("%d", &m);
printf("Result= %f\n", power(m)/znamennuk(1));
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с I/O, математическими функциями и основаниями стека вызовов.
- Объявляем переменную
nтипа int, которая будет использоваться в функцииmainиznamennuk. - Определяем рекурсивную функцию
power, которая вычисляетmв степени. - Определяем функцию
fact, которая вычисляет факториал числаn. - Определяем функцию
znamennuk, которая вычисляет значениеznamen. - В функции
mainзапрашиваем у пользователя ввод числаnи сохраняем его в переменнуюn. - Запрашиваем у пользователя ввод числа
mи сохраняем его в переменнуюm. - Вычисляем значение
power(m)и делим его наznamennuk(1). - Выводим результат на экран.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.