Введение
В этом лабораторном практикуме вы научитесь вычислять факториалы в языке программирования C. Практикум охватывает два метода вычисления факториала числа: с использованием цикла и рекурсивной функции. Вы начнете с ввода целого числа от пользователя, затем реализуете оба подхода — с циклом и рекурсивной функцией — для вычисления факториала и, наконец, выведете результат.
Практикум предоставляет пошаговые инструкции и примеры кода, чтобы помочь вам освоить процесс вычисления факториала в C, обеспечивая полное понимание этого процесса.
Ввод целого числа n
В этом шаге вы узнаете, как ввести целое число для вычисления его факториала в программе на языке C. Мы сосредоточимся на создании простой программы, которая запрашивает у пользователя ввод числа и сохраняет его для дальнейших вычислений.
Сначала создадим новый файл C в каталоге проекта:
cd ~/project
nano factorial.c
Теперь добавим следующий код для ввода целого числа:
#include <stdio.h>
int main() {
int n;
printf("Enter a number to calculate its factorial: ");
scanf("%d", &n);
printf("You entered: %d\n", n);
return 0;
}
Теперь скомпилируем и запустим программу:
gcc factorial.c -o factorial
./factorial
Пример вывода:
Enter a number to calculate its factorial: 5
You entered: 5
В этом коде:
printf()используется для отображения запроса пользователюscanf()считывает целое число, введённое пользователем%d— спецификатор формата для целых чисел&nпередаёт адрес памяти переменнойnдля хранения введённого значения
Вычисление n! с помощью цикла или рекурсии
В этом шаге вы изучите два метода вычисления факториала числа: с использованием цикла и рекурсивной функции. Мы изменим предыдущий файл factorial.c, чтобы реализовать оба подхода.
Обновим файл factorial.c:
cd ~/project
nano factorial.c
Добавьте следующий код для реализации вычисления факториала с помощью цикла и рекурсии:
#include <stdio.h>
// Вычисление факториала с помощью цикла
unsigned long long factorialLoop(int n) {
unsigned long long result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
// Вычисление факториала с помощью рекурсии
unsigned long long factorialRecursive(int n) {
if (n == 0 || n == 1) {
return 1;
}
return n * factorialRecursive(n - 1);
}
int main() {
int n;
printf("Enter a number to calculate its factorial: ");
scanf("%d", &n);
if (n < 0) {
printf("Факториал не определен для отрицательных чисел.\n");
return 1;
}
printf("Факториал с помощью цикла: %llu\n", factorialLoop(n));
printf("Факториал с помощью рекурсии: %llu\n", factorialRecursive(n));
return 0;
}
Скомпилируйте и запустите программу:
gcc factorial.c -o factorial
./factorial
Пример вывода:
Enter a number to calculate its factorial: 5
Factorial using loop: 120
Factorial using recursion: 120
Ключевые моменты этой реализации:
- Используется тип данных
unsigned long longдля обработки больших значений факториалов - Метод цикла использует цикл
forдля умножения чисел - Рекурсивный метод вызывает сам себя с
n-1, пока не достигнет базового случая - Добавлена обработка ошибок для отрицательных чисел
- Оба метода дают одинаковый результат
Вывод факториала
В этом шаге вы улучшите программу вычисления факториала, чтобы получить более подробный вывод и обработать различные сценарии ввода. Мы изменим файл factorial.c, чтобы улучшить представление результатов факториала.
Обновите файл factorial.c:
cd ~/project
nano factorial.c
Замените предыдущее содержимое следующим улучшенным реализацией:
#include <stdio.h>
unsigned long long factorialLoop(int n) {
unsigned long long result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
void printFactorialDetails(int n, unsigned long long factorial) {
printf("Подробности вычисления факториала:\n");
printf("Число (n): %d\n", n);
printf("Факториал (n!): %llu\n", factorial);
printf("Разложение факториала: ");
for (int i = 1; i <= n; i++) {
printf("%d%s", i, (i < n) ? " × " : " = ");
}
printf("%llu\n", factorial);
}
int main() {
int n;
printf("Введите неотрицательное целое число для вычисления его факториала: ");
scanf("%d", &n);
if (n < 0) {
printf("Ошибка: Факториал не определен для отрицательных чисел.\n");
return 1;
}
if (n > 20) {
printf("Предупреждение: Факториал для больших чисел может привести к переполнению целых чисел.\n");
}
unsigned long long result = factorialLoop(n);
printFactorialDetails(n, result);
return 0;
}
Скомпилируйте и запустите программу:
gcc factorial.c -o factorial
./factorial
Пример вывода:
Введите неотрицательное целое число для вычисления его факториала: 5
Подробности вычисления факториала:
Число (n): 5
Факториал (n!): 120
Разложение факториала: 1 × 2 × 3 × 4 × 5 = 120
Основные улучшения в этой версии:
- Добавлена функция
printFactorialDetails()для подробного вывода - Отображается полное разложение факториала
- Включено предупреждение для больших чисел
- Предоставлен ясный и информативный вывод
Резюме
В этом лабораторном практикуме вы изучили, как считывать целое число от пользователя и вычислять его факториал, используя как итеративный цикл, так и рекурсивную функцию. Вы изучили процесс создания программы на языке C, которая запрашивает у пользователя число, обрабатывает отрицательные входные данные и выводит результат факториала. В лабораторном практикуме были рассмотрены ключевые этапы: считывание входных данных пользователя, реализация алгоритмов вычисления факториала и вывод конечного результата.



