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

Diagrama de flujo del ejercicio 03

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.

  1. Tipo de retorno long — el prototipo es long factorial(int n);. El factorial crece muy rápido (12! ya son casi 480 millones), así que un int normal se quedaría corto y se desbordaría. Por eso se devuelve un long, y en main se imprime con %ld.
  2. El bucle acumulador — dentro de la función, resultado empieza en 1 y se multiplica por cada i de 2 hasta n. Empezar en 1 hace que 0! y 1! salgan 1 automáticamente: el bucle ni siquiera entra, y devuelve el 1 inicial.
  3. La validación va en main — se comprueba n < 0 || n > 12 y, si falla, se imprime el error y return 1; cierra el programa. Separar la validación (en main) 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.

Conexiones