Ejercicio 03 — Funcion factorial(n)
Dificultad: verde · Módulo 04 (Funciones)
Enunciado
Funcion factorial(n). Pide un numero entre 0 y 12 e imprime su factorial.
Diagrama 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 en Dev-C++
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: Funcion factorial(n). Pide un numero entre 0 y 12 e imprime su factorial.
* Dificultad: verde
* 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: Funcion factorial(n). Pide un numero entre 0 y 12 e imprime su factorial.
* Dificultad: verde
* 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;
}Cómo usarlo
Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.