Ejemplo de lenguaje C - Días de un mes
Si en lenguaje C se quiere escribir un programa que:
1º) Pida por teclado un año (dato entero).
2º) Pida por teclado un mes (dato entero) de ese año.
3º) Muestre por pantalla el número de días que tiene dicho mes.
Nota 1: Si el número de mes introducido es menor que 1 ó mayor que 12, se mostrará el mensaje: "ERROR: Mes incorrecto.".
Nota 2:
- Tienen 31 días: enero, marzo, mayo, julio, agosto, octubre y diciembre.
- Tienen 30 días: abril, junio, septiembre y noviembre.
- Tiene 29 días: febrero (si el año es bisiesto).
- Tiene 28 días: febrero (si el año no es bisiesto).
Nota 3: Son bisiestos todos los años múltiplos de 4, excepto aquellos que son múltiplos de 100 pero no de 400.
En pantalla se verá, por ejemplo:
Ahora bien, si el mes no es correcto, se verá:
Solución 1: anidando instrucción if en switch
Una posible solución es:
/* Programa: Días de un mes (Solución 1) */
#include <conio.h>
#include <stdio.h>
int main()
{
int anio, mes;
printf( "\n Introduzca a%co: ", 164 );
scanf( "%d", &anio );
printf( "\n Introduzca mes: " );
scanf( "%d", &mes );
switch ( mes )
{
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 : printf( "\n 31 d%cas", 161 );
break;
case 4 :
case 6 :
case 9 :
case 11 : printf( "\n 30 d%cas", 161 );
break;
case 2 : /* Inicio del anidamiento */
if ( anio % 4 == 0 && anio % 100 != 0 || anio % 400 == 0 )
printf( "\n 29 d%cas", 161 );
else
printf( "\n 28 d%cas", 161 );
break;
/* Fin del anidamiento */
default : printf( "\n ERROR: Mes incorrecto." );
}
getch(); /* Pausa */
return 0;
}
Solución 2: anidando if en switch y switch en if
El programa también se puede escribir comprobando, en primer lugar, el valor del mes, y solamente ejecutar la alternativa múltiple (switch), si el valor introducido es mayor o igual que 1 y menor o igual que 12:
/* Programa: Días de un mes (Solución 2) */
#include <conio.h>
#include <stdio.h>
int main()
{
int anio, mes;
printf( "\n Introduzca a%co: ", 164 );
scanf( "%d", &anio );
printf( "\n Introduzca mes: " );
scanf( "%d", &mes );
if ( mes >= 1 && mes <= 12 )
/* Inicio del anidamiento 1 */
switch ( mes )
{
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 : printf( "\n 31 d%cas", 161 );
break;
case 4 :
case 6 :
case 9 :
case 11 : printf( "\n 30 d%cas", 161 );
break;
case 2 : /* Inicio del anidamiento 2 */
if ( anio % 4 == 0 && anio % 100 != 0 || anio % 400 == 0 )
printf( "\n 29 d%cas", 161 );
else
printf( "\n 28 d%cas", 161 );
/* Fin del anidamiento 2 */
}
/* Fin del anidamiento 1 */
else
printf( "\n ERROR: Mes incorrecto." );
getch(); /* Pausa */
return 0;
}