Ejercicio 05 — Leer N y mostrar los N primeros terminos de la serie de Fibonacci

Dificultad: amarillo · Módulo 03 (Bucles)

Enunciado

Leer N y mostrar los N primeros terminos de la serie de Fibonacci.

Diagrama de flujo

Diagrama de flujo del ejercicio 05

Cómo se resuelve

La serie de Fibonacci empieza con 0 y 1, y cada término siguiente es la suma de los dos anteriores: 0, 1, 1, 2, 3, 5, 8, .... El reto es generarla con un bucle usando solo dos variables que se van “deslizando” a lo largo de la serie.

  1. Antes de nada, el programa comprueba if (n <= 0) y sale con return 1 si N no es válido: no tiene sentido pedir “0 términos”.
  2. Arrancamos con long long a = 0, b = 1, los dos primeros términos.
  3. En cada vuelta imprimimos a (el término actual) y luego avanzamos: siguiente = a + b, después a = b y b = siguiente. Es como si una ventana de dos números fuera resbalando hacia la derecha por la sucesión.

La trampa clave está en el orden de las tres asignaciones. Necesitamos la variable auxiliar siguiente porque, si hiciéramos a = b primero y luego intentáramos calcular b = a + b, ya habríamos perdido el valor original de a y el cálculo saldría mal. Guardar antes la suma en siguiente protege ese valor. Como segundo detalle, se usa long long porque Fibonacci también crece muy rápido y desbordaría un int en pocas decenas de términos.

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 03: Bucles
 * Ejercicio 05 — PRACTICA (rellena los TODO)
 * Enunciado: Leer N y mostrar los N primeros terminos de la serie de Fibonacci.
 * Dificultad: amarillo
 * Compilar: gcc -std=c11 -Wall ej05_practica.c -o ej05 && ./ej05
 */
 
#include <stdio.h>
 
int main(void) {
    int n;
 
    // TODO 1: Pide N al usuario y leelo
 
    // TODO 2: Declara dos variables long long: a = 0, b = 1
    //         Estos son los dos primeros terminos de la serie
 
    // TODO 3: Bucle for de i=0 a i<n:
    //         - Imprime 'a' (el termino actual)
    //         - Calcula el siguiente: siguiente = a + b
    //         - Actualiza: a = b, b = siguiente
    //         CUIDADO con el orden de las asignaciones: si cambias a primero,
    //         pierdes su valor al calcular b. Usa una variable temporal.
 
    // TODO 4: Imprime un salto de linea al final
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 03: Bucles
 * Ejercicio 05 — MODELO (resuelto)
 * Enunciado: Leer N y mostrar los N primeros terminos de la serie de Fibonacci.
 * Dificultad: amarillo
 * Compilar: gcc -std=c11 -Wall ej05_modelo.c -o ej05 && ./ej05
 */
 
#include <stdio.h>
 
int main(void) {
    int n;
    printf("Cuantos terminos de Fibonacci quieres ver? ");
    scanf("%d", &n);
 
    if (n <= 0) {
        printf("N debe ser mayor que 0.\n");
        return 1;
    }
 
    // Los dos primeros terminos son fijos: 0 y 1
    long long a = 0, b = 1;
 
    printf("Fibonacci (%d terminos): ", n);
 
    for (int i = 0; i < n; i++) {
        printf("%lld", a);
        if (i < n - 1) printf(" ");     // separador entre terminos
 
        long long siguiente = a + b;    // calculamos el siguiente
        a = b;                          // avanzamos: a toma el valor de b
        b = siguiente;                  // b toma el siguiente
    }
    printf("\n");
 
    return 0;
}

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