Ejercicio 07 — Menu do-while con 3 opciones

Dificultad: rojo · Módulo 03 (Bucles)

Enunciado

Menu do-while con 3 opciones: contar pares 1..N, contar impares 1..N, salir. Pedir N al elegir 1 o 2.

Diagrama de flujo

Diagrama de flujo del ejercicio 07

Cómo se resuelve

Este ejercicio junta casi todo lo del módulo en un pequeño programa interactivo: un menú que se repite hasta que el usuario decide salir. La herramienta ideal para un menú es el do-while, porque garantiza que el menú se muestra al menos una vez antes de comprobar nada.

  1. El do { ... } while (opcion != 3) ejecuta primero el cuerpo (mostrar el menú y leer la opción) y solo al final comprueba la condición. Mientras el usuario no teclee 3, vuelve a empezar. Ojo al punto y coma final tras el while: en el do-while es obligatorio y olvidarlo es un error de compilación muy común.
  2. Dentro, un if (opcion == 1 || opcion == 2) agrupa las dos acciones que necesitan un N: pide el número, crea un contador = 0 y lanza un for de 1 a N. Según la opción, cuenta pares (i % 2 == 0) o impares (i % 2 != 0). Aquí ves un bucle for anidado dentro del do-while.
  3. El else if (opcion != 3) avisa de una opción no válida, sin molestar cuando el usuario simplemente eligió salir con el 3.

La trampa central es la condición de parada del do-while. Como la comprobación ocurre al final, hay que asegurarse de que opcion se lee dentro del bucle en cada vuelta; si por error se leyera fuera, tendríamos un bucle infinito. Fíjate también en el reparto de la lógica: el 3 no hace nada dentro del cuerpo (no es ni 1, ni 2, ni opción inválida), simplemente deja que la condición opcion != 3 se vuelva falsa y el bucle termine, imprimiendo entonces “Hasta luego!“.

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 07 — PRACTICA (rellena los TODO)
 * Enunciado: Menu do-while con 3 opciones: contar pares 1..N,
 *            contar impares 1..N, salir. Pedir N al elegir 1 o 2.
 * Dificultad: rojo
 * Compilar: gcc -std=c11 -Wall ej07_practica.c -o ej07 && ./ej07
 */
 
#include <stdio.h>
 
int main(void) {
    int opcion;
 
    // TODO 1: Escribe un bucle do-while que se repita mientras opcion != 3
 
    //   TODO 2: Dentro del do, imprime el menu con printf:
    //           "=== MENU ==="
    //           "1. Contar pares de 1 a N"
    //           "2. Contar impares de 1 a N"
    //           "3. Salir"
    //           Lee la opcion con scanf
 
    //   TODO 3: Si opcion es 1 o 2:
    //           - Pide N al usuario y leelo
    //           - Declara un contador inicializado a 0
    //           - Bucle for de 1 a N:
    //             * Opcion 1: si i%2==0, incrementa contador (es par)
    //             * Opcion 2: si i%2!=0, incrementa contador (es impar)
    //           - Imprime el resultado
 
    //   TODO 4: Si opcion no es 1, 2 ni 3, avisa al usuario de opcion invalida
 
    // TODO 5: Cierra el do-while con: } while (opcion != 3);
 
    // TODO 6: Imprime "Hasta luego!" al salir del bucle
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 03: Bucles
 * Ejercicio 07 — MODELO (resuelto)
 * Enunciado: Menu do-while con 3 opciones: contar pares 1..N,
 *            contar impares 1..N, salir. Pedir N al elegir 1 o 2.
 * Dificultad: rojo
 * Compilar: gcc -std=c11 -Wall ej07_modelo.c -o ej07 && ./ej07
 *
 * Ejemplo de sesion:
 *   === MENU ===
 *   1. Contar pares de 1 a N
 *   2. Contar impares de 1 a N
 *   3. Salir
 *   Opcion: 1
 *   Hasta que N? 10
 *   Pares entre 1 y 10: 5
 *   ...
 *   Opcion: 3
 *   Hasta luego!
 */
 
#include <stdio.h>
 
int main(void) {
    int opcion;
 
    do {
        // Mostrar menu
        printf("\n=== MENU ===\n");
        printf("1. Contar pares de 1 a N\n");
        printf("2. Contar impares de 1 a N\n");
        printf("3. Salir\n");
        printf("Opcion: ");
        scanf("%d", &opcion);
 
        if (opcion == 1 || opcion == 2) {
            int n;
            printf("Hasta que N? ");
            scanf("%d", &n);
 
            int contador = 0;
 
            if (opcion == 1) {
                // Contar pares: divisibles por 2
                for (int i = 1; i <= n; i++) {
                    if (i % 2 == 0) contador++;
                }
                printf("Pares entre 1 y %d: %d\n", n, contador);
            } else {
                // Contar impares: no divisibles por 2
                for (int i = 1; i <= n; i++) {
                    if (i % 2 != 0) contador++;
                }
                printf("Impares entre 1 y %d: %d\n", n, contador);
            }
        } else if (opcion != 3) {
            printf("Opcion no valida. Elige 1, 2 o 3.\n");
        }
 
    } while (opcion != 3);  // repetir hasta que el usuario elija salir
 
    printf("Hasta luego!\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