Ejercicio 03 — Función factorial(n)
Dificultad: verde · Módulo 04 (Funciones)
Enunciado
Función factorial(n). Pide un número entre 0 y 12 e imprime su factorial.
Diagramas de flujo


Cómo se resuelve
El factorial de n (escrito n!) es 1 x 2 x 3 x ... x n. Lo encapsulamos en factorial(int n), que devuelve el resultado.
- Tipo de retorno
long— el prototipo eslong factorial(int n);. El factorial crece muy rápido (12!ya son casi 480 millones), así que unintnormal se quedaría corto y se desbordaría. Por eso se devuelve unlong, y enmainse imprime con%ld. - El bucle acumulador — dentro de la función,
resultadoempieza en1y se multiplica por cadaide 2 hastan. Empezar en1hace que0!y1!salgan1automáticamente: el bucle ni siquiera entra, y devuelve el1inicial. - La validación va en
main— se comprueban < 0 || n > 12y, si falla, se imprime el error yreturn 1;cierra el programa. Separar la validación (enmain) del cálculo (en la función) mantiene la función limpia y reutilizable.
Trampa típica: declarar int resultado en vez de long. Compila sin quejarse, pero para n grande el número “da la vuelta” y sale un resultado disparatado o negativo. Cuando un cálculo puede crecer mucho, piensa en el tipo antes de escribir el bucle.
Para practicar — cópialo y complétalo
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
/*
* Curso de C — Modulo 04: Funciones
* Ejercicio 03 — PRACTICA (rellena los TODO)
* Enunciado: Función factorial(n). Pide un número entre 0 y 12 e imprime su factorial.
* Dificultad: verde
* Stdin: 5
* Compilar: gcc -std=c11 -Wall ej03_practica.c -o ej03 && ./ej03
*/
#include <stdio.h>
/* TODO: escribe el prototipo de factorial (devuelve long, recibe int) */
int main(void) {
int n;
/* TODO: pide el numero al usuario */
/* TODO: valida que este entre 0 y 12; si no, imprime error y haz return 1 */
/* TODO: imprime el resultado con formato "%d! = %ld\n" */
return 0;
}
/* TODO: define long factorial(int n)
* - factorial de 0 y 1 es 1
* - usa un bucle for que multiplique resultado *= i para i de 2 a n
* - devuelve el resultado
*/Solución — cópiala y ejecútala
/*
* Curso de C — Modulo 04: Funciones
* Ejercicio 03 — MODELO (resuelto)
* Enunciado: Función factorial(n). Pide un número entre 0 y 12 e imprime su factorial.
* Dificultad: verde
* Stdin: 5
* Compilar: gcc -std=c11 -Wall ej03_modelo.c -o ej03 && ./ej03
*/
#include <stdio.h>
/* Prototipo */
long factorial(int n);
int main(void) {
int n;
printf("Introduce un numero entre 0 y 12: ");
scanf("%d", &n);
if (n < 0 || n > 12) {
printf("Error: numero fuera de rango.\n");
return 1;
}
printf("%d! = %ld\n", n, factorial(n));
return 0;
}
/* Devuelve n! de forma iterativa.
* Usamos long para evitar desbordamiento hasta n=12. */
long factorial(int n) {
long resultado = 1;
for (int i = 2; i <= n; i++) {
resultado *= i;
}
return resultado;
}Ejecútalo en el navegador
▶ Abrir y ejecutar en Compiler Explorer
Se abre con la solución ya cargada; pulsa el botón de ejecutar (Run) para ver la salida. No hay que instalar nada.
Cómo usarlo
Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.