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

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.
- 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 elwhile: en eldo-whilees obligatorio y olvidarlo es un error de compilación muy común. - Dentro, un
if (opcion == 1 || opcion == 2)agrupa las dos acciones que necesitan unN: pide el número, crea uncontador = 0y lanza unforde 1 aN. Según la opción, cuenta pares (i % 2 == 0) o impares (i % 2 != 0). Aquí ves un bucleforanidado dentro deldo-while. - 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.