Ejercicio 06 — Lee un ano e indica si es bisiesto
Dificultad: amarillo · Módulo 02 (Condicionales)
Enunciado
Lee un ano e indica si es bisiesto. Regla: divisible por 4; EXCEPTO siglos (div. por 100) que no sean tambien divisibles por 400.
Diagrama de flujo

Cómo se resuelve
El programa lee un año y decide si es bisiesto. La regla del calendario tiene una excepción anidada: un año es bisiesto si es divisible por 4, excepto los años de siglo (divisibles por 100), que solo son bisiestos si además lo son por 400. Es el ejemplo perfecto de que en una cadena if / else if el orden manda.
- Se lee el año con
scanfy se usa una variableint bisiestoa modo de bandera (1= sí,0= no), un patrón muy común para “recordar” una decisión. - La lógica va de la regla más específica a la más general:
if (anio % 400 == 0)→ bisiesto (2000 lo es).else if (anio % 100 == 0)→ NO bisiesto (1900 es siglo normal).else if (anio % 4 == 0)→ bisiesto (2024).else→ NO bisiesto.
- Al final,
if (bisiesto)aprovecha que en C cualquier valor distinto de cero es “verdadero”, así que la bandera se puede evaluar directamente sin escribir== 1.
Trampa habitual: poner la comprobación del 400 después de la del 100 (o del 4). Como 2000 también es divisible por 100 y por 4, si esas ramas van primero lo clasificarían mal. La condición del 400 debe evaluarse antes para que capture su excepción antes de que las reglas más generales se la lleven.
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 02: Condicionales
Ejercicio 06 — PRACTICA (rellena los TODO)
Enunciado: Lee un ano e indica si es bisiesto.
Regla: divisible por 4; EXCEPTO siglos (div. por 100)
que no sean tambien divisibles por 400.
Dificultad: amarillo
Compilar: gcc -std=c11 -Wall ej06_practica.c -o ej06 && ./ej06
*/
#include <stdio.h>
int main(void) {
int anio;
// TODO: pide el ano al usuario y leelo con scanf
int bisiesto; // usaremos 1 = si, 0 = no
// TODO: implementa la logica en orden de prioridad con if-else if-else:
// 1. Si anio % 400 == 0 -> bisiesto = 1
// 2. Si anio % 100 == 0 -> bisiesto = 0 (siglo NO bisiesto)
// 3. Si anio % 4 == 0 -> bisiesto = 1
// 4. Resto -> bisiesto = 0
// El orden importa: el caso del 400 debe ir ANTES que el del 100.
// TODO: imprime "<anio> es bisiesto" o "<anio> no es bisiesto"
// segun el valor de la variable bisiesto
return 0;
}Solución — cópiala y ejecútala
/*
Curso de C — Modulo 02: Condicionales
Ejercicio 06 — MODELO (resuelto)
Enunciado: Lee un ano e indica si es bisiesto.
Regla: divisible por 4; EXCEPTO siglos (div. por 100)
que no sean tambien divisibles por 400.
Dificultad: amarillo
Compilar: gcc -std=c11 -Wall ej06_modelo.c -o ej06 && ./ej06
*/
#include <stdio.h>
int main(void) {
int anio;
printf("Introduce un ano: ");
scanf("%d", &anio);
// Algoritmo de bisextilidad:
// Un ano es bisiesto si:
// (divisible por 4) Y ((no divisible por 100) O (divisible por 400))
// Que es equivalente a:
// div por 400 -> bisiesto
// div por 100 -> NO bisiesto (siglo normal)
// div por 4 -> bisiesto
// resto -> NO bisiesto
int bisiesto; // 1 = si, 0 = no
if (anio % 400 == 0) {
bisiesto = 1;
} else if (anio % 100 == 0) {
bisiesto = 0;
} else if (anio % 4 == 0) {
bisiesto = 1;
} else {
bisiesto = 0;
}
if (bisiesto) {
printf("%d es bisiesto\n", anio);
} else {
printf("%d no es bisiesto\n", anio);
}
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.