Ejercicio 06 — Lee un año e indica si es bisiesto
Dificultad: amarillo · Módulo 02 (Condicionales)
Enunciado
Lee un año e indica si es bisiesto. Regla: divisible por 4; EXCEPTO siglos (div. por 100) que no sean tambien divisibles por 400.
Diagramas 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 y complétalo
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 año e indica si es bisiesto.
Regla: divisible por 4; EXCEPTO siglos (div. por 100)
que no sean tambien divisibles por 400.
Dificultad: amarillo
Stdin: 2024
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 año e indica si es bisiesto.
Regla: divisible por 4; EXCEPTO siglos (div. por 100)
que no sean tambien divisibles por 400.
Dificultad: amarillo
Stdin: 2024
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;
}Ejecútalo en el navegador
▶ Abrir y ejecutar en Compiler Explorer
Se abre con la solución ya cargada; pulsa el botón de ejecutar (Run) para ver la salida. No hay que instalar nada.
Cómo usarlo
Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.