Búsqueda personalizada
Curso de lenguaje C
 Principal
 Inicio
 Libros
 Librerías
 Mapa Web
 
 Recursos
 Artículos
 Cursos
 Ejercicios
 Guías de uso
 Mini Diccionario 
  
 Sintaxis
 ANSI C
 Ordinogramas
 Pascal
 Pseudocódigo 
  
 Acerca de
 Carlos Pes
 Mi Blog 
  
 Sitios Amigos
 Casas Rurales
 Directorio Web

 
[más enlaces] 
  
 Contenidos > 2.3 Alternativa múltiple ( la instrucción switch )
Una instrucción alternativa múltiple (o simplemente alternativa múltiple) permite seleccionar, por medio de una expresión, el siguiente bloque de instrucciones a ejecutar de entre varios posibles. En lenguaje C, para escribir una alternativa múltiple se utiliza la sintaxis:


  switch ( <expresión> )
  {
     case <expresión_1> : [ <bloque_de_instrucciones_1> ]
                          [ break; ]
     case <expresión_2> : [ <bloque_de_instrucciones_2> ]
                          [ break; ]
     ...
     case <expresión_n> : [ <bloque_de_instrucciones_n> ]
                          [ break; ]
              [ default : <bloque_de_instrucciones_n+1> ]
  }
 

El resultado de evaluar la <expresión> debe ser un valor perteneciente a un tipo de dato finito y ordenado, es decir, entero, lógico, carácter, enumerado o subrango.

Dependiendo del valor obtenido al evaluar la <expresión>, se ejecutará un bloque de instrucciones u otro.

Opcionalmente, se puede escribir un <bloque_de_instrucciones_n+1> después de default :. Este bloque de instrucciones se ejecutará en el caso de que el valor obtenido al evaluar la <expresión>, no se encuentre en ninguna de las expresiones después de cada
case.

Ejemplo 1: Se quiere escribir un programa que:

1º) Pida por teclado el número (dato entero) de un día de la semana.
2º) Muestre por pantalla el nombre (dato cadena) correspondiente a dicho día.

Nota: Si el número de día introducido es menor que 1 ó mayor que 7, se mostrará el mensaje: "ERROR: Día incorrecto.".

En pantalla:


   Introduzca dia de la semana: 2

   Martes

 


   Introduzca dia de la semana: 9

   ERROR: Dia incorrecto.

 

Solución propuesta:

#include <stdio.h>

int main()
{
   int dia;

   printf( "\n   Introduzca dia de la semana: " );
   scanf( "%d", &dia );

   switch ( dia )
   {
      case 1 : printf( "\n   Lunes" );
               break;
      case 2 : printf( "\n   Martes" );
               break;
      case 3 : printf( "\n   Miercoles" );
               break;
      case 4 : printf( "\n   Jueves" );
               break;
      case 5 : printf( "\n   Viernes" );
               break;
      case 6 : printf( "\n   Sabado" );
               break;
      case 7 : printf( "\n   Domingo" );
               break;
   default : printf( "\n   ERROR: Dia incorrecto." );
   }

   return 0;
}

Programa (.c): Día de la semana

En la sintaxis de una instrucción alternativa múltiple, obsérvese que, después de cada bloque de instrucciones se puede escribir, opcionalmente, la instrucción 
break. Dicha instrucción no se va a estudiar con detenimiento en este apartado, ya que, de momento, basta con saber que en una instrucción switch, la escribiremos, casi siempre, después de cada bloque de instrucciones, a excepción del último. Para comprender su funcionamiento, pruebe a ver que ocurre si omite algún break en el código del programa del ejemplo 1.

Estúdiese también el siguiente ejemplo.

Ejemplo 2: En la siguiente tabla se muestran las categorías a las que pertenecen los signos del zodíaco:

Categorías de los signos del zodíaco

Se quiere escribir un programa que:

1º) Muestre el listado de los signos del zodíaco, con sus números asociados.
2º) Pida por teclado un número (dato entero) asociado a un signo del zodíaco.
3º) Muestre la categoría a la que pertenece el signo del zodíaco seleccionado.

Nota: Si el número introducido por el usuario, no está asociado a ningún signo del zodíaco, se mostrará el mensaje: "ERROR: <número> no está asociado a ningún signo.".

En pantalla:


   Listado de signos del zodiaco:

   1. Aries
   2. Tauro
   3. Geminis
   4. Cancer
   5. Leo
   6. Virgo
   7. Libra
   8. Escorpio
   9. Sagitario
   10. Capricornio
   12. Acuario
   13. Piscis

   Introduzca numero de signo: 7

   Es un signo de Aire.

 


   Listado de signos del zodiaco:

   1. Aries
   2. Tauro
   3. Geminis
   4. Cancer
   5. Leo
   6. Virgo
   7. Libra
   8. Escorpio
   9. Sagitario
   10. Capricornio
   12. Acuario
   13. Piscis

   Introduzca numero de signo: 15

   ERROR: 15 no esta asociado a ningun signo.

 

Una posible solución es:

#include <stdio.h>

int main()
{
   int numero;

   printf( "\n   Listado de signos del zodiaco:" );
   printf( "\n\n   1. Aries" );
   printf( "\n   2. Tauro" );
   printf( "\n   3. Geminis" );
   printf( "\n   4. Cancer" );
   printf( "\n   5. Leo" );
   printf( "\n   6. Virgo" );
   printf( "\n   7. Libra" );
   printf( "\n   8. Escorpio" );
   printf( "\n   9. Sagitario" );
   printf( "\n   10. Capricornio" );
   printf( "\n   11. Acuario" );
   printf( "\n   12. Piscis" );
   printf( "\n\n   Introduzca numero de signo: " );

   scanf( "%d", &numero );

   switch ( numero )
   {
      case  1 :
      case  5 :
      case  9 : printf( "\n   Es un signo de Fuego." );
                break;
      case  2 :
      case  6 :
      case 10 : printf( "\n   Es un signo de Tierra." );
                break;
      case  3 :
      case  7 :
      case 11 : printf( "\n   Es un signo de Aire." );
                break;
      case  4 :
      case  8 :
      case 12 : printf( "\n   Es un signo de Agua." );
                break;
     default : printf( "\n   ERROR: %d no esta asociado a ningun signo.", numero );
   }

   return 0;
}


Otra solución es:

#include <stdio.h>
#include <string.h>

int main()
{
   int numero;
   char categoria[7];

   printf( "\n   Listado de signos del zodiaco:" );
   printf( "\n\n   1. Aries" );
   printf( "\n   2. Tauro" );
   printf( "\n   3. Geminis" );
   printf( "\n   4. Cancer" );
   printf( "\n   5. Leo" );
   printf( "\n   6. Virgo" );
   printf( "\n   7. Libra" );
   printf( "\n   8. Escorpio" );
   printf( "\n   9. Sagitario" );
   printf( "\n   10. Capricornio" );
   printf( "\n   11. Acuario" );
   printf( "\n   12. Piscis" );
   printf( "\n\n   Introduzca numero de signo: " );

   scanf( "%d", &numero );

   switch ( numero % 4 )
   {
      case  1 : strcpy( categoria, "Fuego" );
                break;
      case  2 : strcpy( categoria, "Tierra" );
                break;
      case  3 : strcpy( categoria, "Aire" );
                break;
      case  0 : strcpy( categoria, "Agua" );
   }

   if ( numero >= 1 && numero <= 12 )
      printf( "\n   Es un signo de %s.", categoria );
   else
      printf( "\n   ERROR: %d no esta asociado a ningun signo.",
              numero );


   return 0;
}


En esta segunda solución existen las siguientes diferencias importantes con respecto a la solución anterior:
  • En el código se utiliza una alternativa doble (if), además de una alternativa múltiple (switch).
  • En la alternativa múltiple no se escribe el <bloque_de_instrucciones_n+1>.
  • La <expresión> de la alternativa múltiple es diferente.
  • La expresión "\n   Es un signo de " sólo se escribe una vez.
  • Se ha utilizado una variable más (un array de caracteres): categoria
  • Se ha empleado la función strcpy, que, como ya vimos en el apartado 1.8 Operadores y expresiones, está disponible en la biblioteca estándar de C.

Ejercicios Recomendados:
 Más información
Texto extraído de los apartados:

   12.2.3 Alternativa múltiple

   12.2.3.1 La instrucción 
switch

del libro 
EMPEZAR DE CERO A PROGRAMAR EN LENGUAJE C, (páginas 342-351).
 Contenidos > Apartado siguiente
2.4 Anidamiento
Búsqueda personalizada
Cursos de Carlos Pes: Ejercicios de Carlos Pes: Libros de Carlos Pes: Enlaces Recomendados:
Curso Diseño de Algoritmos
Curso Informática Básica
Curso Ingeniería del Software
Curso Lenguaje C
Curso Turbo Pascal
Curso Representación Datos
Ejercicios de Algoritmos
Ejercicios de Lenguaje C
Ejercicios de Ordinogramas
Ejercicios de Pascal
Empezar de cero a programar en lenguaje C
Domine la programación en lenguaje C
Empezar de cero a programar en Pascal
Tutoriales y Cursos
Gane dinero con su web
Comprar dominio
Programación Informática
100% Adsense
Inicio | Libros | Librerías | Mapa Web | Artículos | Cursos | Ejercicios | Guías | MiniDiccionario | Enlaces | Carlos Pes | Mi Blog
© Carlos Javier Pes Rivas, 2006-2008
Política de privacidad - Contactar