Introducción
En este laboratorio, aprenderás a calcular factoriales en programación C. El laboratorio cubre dos métodos para calcular el factorial de un número: utilizando un bucle iterativo y una función recursiva. Empezarás leyendo un entero como entrada del usuario, luego implementarás los enfoques basados en bucles y recursivos para calcular el factorial y, finalmente, imprimirás el resultado.
El laboratorio proporciona instrucciones paso a paso y ejemplos de código para guiarte a través del proceso, asegurando una comprensión completa del cálculo factorial en C.
Leer un entero n
En este paso, aprenderás a leer una entrada de entero para calcular su factorial en un programa C. Nos centraremos en crear un programa simple que solicite al usuario que ingrese un número y lo almacene para su cálculo posterior.
Primero, creemos un nuevo archivo C en el directorio del proyecto:
cd ~/project
nano factorial.c
Ahora, agrega el siguiente código para leer una entrada de entero:
#include <stdio.h>
int main() {
int n;
printf("Ingrese un número para calcular su factorial: ");
scanf("%d", &n);
printf("Usted ingresó: %d\n", n);
return 0;
}
Compilamos y ejecutamos el programa:
gcc factorial.c -o factorial
./factorial
Salida de ejemplo:
Ingrese un número para calcular su factorial: 5
Usted ingresó: 5
En este código:
printf()se utiliza para mostrar un mensaje al usuario.scanf()lee la entrada de entero del usuario.%des el especificador de formato para enteros.&npasa la dirección de memoria de la variablenpara almacenar la entrada.
Calcular n! Usando un Bucle o Recursión
En este paso, aprenderás dos métodos para calcular el factorial de un número: utilizando un bucle iterativo y una función recursiva. Modificaremos el archivo factorial.c anterior para implementar ambos enfoques.
Actualicemos el archivo factorial.c:
cd ~/project
nano factorial.c
Agrega el siguiente código para implementar el cálculo factorial usando un bucle y recursión:
#include <stdio.h>
// Cálculo factorial usando un bucle iterativo
unsigned long long factorialLoop(int n) {
unsigned long long result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
// Cálculo factorial usando recursión
unsigned long long factorialRecursive(int n) {
if (n == 0 || n == 1) {
return 1;
}
return n * factorialRecursive(n - 1);
}
int main() {
int n;
printf("Ingrese un número para calcular su factorial: ");
scanf("%d", &n);
if (n < 0) {
printf("El factorial no está definido para números negativos.\n");
return 1;
}
printf("Factorial usando bucle: %llu\n", factorialLoop(n));
printf("Factorial usando recursión: %llu\n", factorialRecursive(n));
return 0;
}
Compila y ejecuta el programa:
gcc factorial.c -o factorial
./factorial
Salida de ejemplo:
Ingrese un número para calcular su factorial: 5
Factorial usando bucle: 120
Factorial usando recursión: 120
Puntos clave de esta implementación:
- Se utiliza
unsigned long longpara manejar valores factoriales más grandes. - El método de bucle utiliza un bucle
forpara multiplicar los números. - El método recursivo se llama a sí mismo con
n-1hasta que se alcanza el caso base. - Se agregó manejo de errores para números negativos.
- Ambos métodos producen el mismo resultado.
Imprimir el Factorial
En este paso, mejorarás el programa de cálculo factorial para proporcionar una salida más detallada y manejar diferentes escenarios de entrada. Modificaremos el archivo factorial.c para mejorar la presentación de los resultados factoriales.
Actualiza el archivo factorial.c:
cd ~/project
nano factorial.c
Reemplaza el contenido anterior con la siguiente implementación mejorada:
#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("Detalles del Cálculo del Factorial:\n");
printf("Número (n): %d\n", n);
printf("Factorial (n!): %llu\n", factorial);
printf("Expansión Factorial: ");
for (int i = 1; i <= n; i++) {
printf("%d%s", i, (i < n) ? " × " : " = ");
}
printf("%llu\n", factorial);
}
int main() {
int n;
printf("Ingrese un entero no negativo para calcular su factorial: ");
scanf("%d", &n);
if (n < 0) {
printf("Error: El factorial no está definido para números negativos.\n");
return 1;
}
if (n > 20) {
printf("Advertencia: El factorial para números grandes puede causar desbordamiento de enteros.\n");
}
unsigned long long result = factorialLoop(n);
printFactorialDetails(n, result);
return 0;
}
Compila y ejecuta el programa:
gcc factorial.c -o factorial
./factorial
Salida de ejemplo:
Ingrese un entero no negativo para calcular su factorial: 5
Detalles del Cálculo del Factorial:
Número (n): 5
Factorial (n!): 120
Expansión Factorial: 1 × 2 × 3 × 4 × 5 = 120
Mejoras clave en esta versión:
- Se agregó una función detallada
printFactorialDetails(). - Muestra la expansión factorial completa.
- Incluye una advertencia para números grandes.
- Proporciona una salida clara e informativa.
Resumen
En este laboratorio, aprendiste a leer una entrada de entero del usuario y calcular su factorial utilizando tanto un bucle iterativo como una función recursiva. Exploraste el proceso de crear un programa en C que solicita al usuario un número, maneja entradas negativas y muestra el resultado factorial. El laboratorio cubrió los pasos clave de leer la entrada del usuario, implementar algoritmos de cálculo factorial e imprimir el resultado final.



