Inicio > C/C++, Desarrollo de Aplicaciones, General > La estructura condicional switch … case en Lenguaje C [Tutorial 5]

La estructura condicional switch … case en Lenguaje C [Tutorial 5]

La estructura condicional switch … case se utiliza cuando queremos evitarnos las llamadas escaleras de decisiones. La estructura if nos puede proporcionar, únicamente, dos resultados, uno para verdadero y otro para falso. Una estructura switch … case, por su parte, nos permite elegir entre muchas opciones.

Las palabras reservadas en C para la condicional switch … case son:

  • switch
  • case
  • default

Y necesita de una instrucción más, no perteneciente a la programación estructurada en sí, pero que en este caso es necesaria para esta estructura:

  • break
int a;
switch(a)
{
case 0:
    //operaciones a realizar en caso de que a valga 0;
    break;
case 1:
    //mismo proceso
    break;
...
case n:
    //n tiene que ser una constante, o numérica {0,1,2 ....} o una definida #define n 2
    break;
default:
    //en caso de que no se de ninguna de las anteriores hacer...
}

Y esto sería equivalente a:

int a;
if(a==0)
    //operaciones para 0
else if(a==1)
    //operaciones para 1
...
else if(a==n)
    //operaciones para n
else
    //cualquier otro caso

Aunque toda la estructura del if junto con el else correspondiente equivale a una sola instrucción, por lo que las llaves podrían ser omitidas en algunos casos, pero es aconsejable colocarlas por claridad.

Haremos un programa que permita calcular el salario de un trabajador, dependiendo del nivel de antigüedad, para ello hacemo lo siguiente vamos Archivo -> Nuevo -> Proyecto:

Creamos un nuevo proyecto que sea Console Application, seleccionamos C Project y le ponemos el nombre que queramos, que en este caso es: Tutorial_5.

A continuación indicamos donde queremos guardar el proyecto que hemos creado.

Por defecto, Dev-C++ crea el archivo main.c.

Compilamos y Guardamos el main con el nombre que tu quieras, en mi caso le pongo main_Tutorial5.

Ahora borramos lo que tiene el main ya que queremos aprender a programar desde el principio.

Ahora ya podemos escribir nuestro código que seria el siguiente:

// ejemplo con un salario con la condicion switch
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
      int nivel;
      float salario, slanuevo;
      printf("Introduce el nivel de antiguedad del trabajador: ");
      scanf("%d",&nivel);
      printf("Introduce tu salario: ");
      scanf("%f",&salario);
      switch (nivel) {
        case 5:
                slanuevo=salario+(salario*.035);
                printf("\nTu salario es:%f\n",slanuevo);
                break;
        case 6:
                slanuevo=salario+(salario*.041);
                printf("\nTu salario es: %f\n",slanuevo);
                break;
        case 7:
                slanuevo=salario+(salario*.048);
                printf("\nTu salario es: %f\n",slanuevo);
                break;
        case 8:
                slanuevo=salario+(salario*.053);
                printf("\nTu salario es: %f\n",slanuevo);
                break;
        default:
                printf("\nTu salario es: %f\n",salario);
}
system("PAUSE");
return 0;
}

Compilamos y verificamos que el programa no tenga errores.

Ahora ejecutamos el programa para comprobar que todo es correcto.

El resultado es el siguiente:

Como podemos observar, el nivel de antigüedad es 7 lo cual significaría un aumento de 48%, lo que nos queda con el nuevo salario con el aumento.

Las sentencias break son muy importantes, ya que el comportamiento normal de un bloque switch es ejecutarlo todo desde la etiqueta case que corresponda hasta el final. Por ello, si no queremos que se nos ejecute más de un bloque, pondremos sentencias break al final de cada bloque excepto el último. Es decir, las etiquetas case son puntos de entrada de la ejecución, y no implican que al acabarse el bloque case la ejecución salte al final del bloque switch. Las etiquetas case siguientes a la que hemos utilizado para entrar son, sencillamente, ignoradas.

El uso de break en la estructura switch-case, si no se encuentra el break, ejecuta todas las instrucciones que se encuentran de ahí para adelante, es decir, si no insertásemos el break, el resultado del case 0: sería el resultado de todos los cases seguidos. Esto se puede aprovechar: Para este ejemplo imaginemos que teniendo una nota nos diga el estado en palabra de la asignatura del alumno:

#include <stdio.h>
main(void)
{
int nota;
printf("introduce tu nota\n");
scanf("%i",&nota);
switch(nota)
{
case 1:
case 2:
case 3: //nótese que pueden estar desordenados
case 0:
case 4:
printf("Suspenso\n");
break;
case 5:
case 6:
printf("Aprobado\n");
break;
case 9:
case 10:
printf("Sobresaliente\n");
break;
case 7:
case 8:
printf("Notable\n");
}
system("pause");
}

Compilamos y verificamos que el programa no tenga errores:

Ahora ejecutamos el programa para comprobar que todo es correcto.

El resultado es el siguiente:

Como se puede observar, el nota introducida era 5,  por lo que entraría en el case 5, pero como no tiene break, pasa al siguiente case que es el 6 e imprime Aprobado, y apenas se encuentra con el break se sale del switch.

En el siguiente ejemplo, pondremos el día de la semana correspondiente a los planetas del sistema solar:

#include <stdio.h>
int dia = 0;
main(void) {
printf("Elige un Dia a la Semana\n\n");
printf("1. Lunes\n");
printf("2. Martes\n");
printf("3. Miercoles\n");
printf("4. Jueves\n");
printf("5. Viernes\n");
printf("6. Sábado\n");
printf("7. Domingo\n");
printf("Que numero de dia de la semana escoges: ");
scanf("%i",&dia);

switch(dia) {
case 1 :
printf("Lunes es, Luna\n");
break;
case 2 :
printf("Martes es, Marte\n");
break;
case 3 :
printf("Miercoles es, Mercurio\n");
break;
case 4 :
printf("Jueves es, Jupiter\n");
break;
case 5 :
printf("Viernes es, Venus\n");
break;
case 6 :
printf("Sábado es, Saturno\n");
break;
case 7 :
printf("Domingo es, Sol\n");
break;
default :
printf("No existe\n");
}
system ("PAUSE");
}

Compilamos y verificamos que el programa no tenga errores:

Ahora ejecutamos el programa para comprobar que todo es correcto.

El resultado es el siguiente:

La estructura anterior, de realizarse con sentencias if, necesitaría cuatro de ellas, resultando un enorme bloque muy difícil de leer. En la mayoría de los casos, además, la sentencia switch proporciona una ganancia en velocidad del código, pues permite al compilador trabajar en base a que se trata de una decisión múltiple para una única variable, cosa que con sentencias if el compilador no tiene por qué detectar.

Como vemos, para cada valor de la variable se ejecuta un bloque de sentencias distinto, en el que no necesitamos llaves. Hay un caso especial, default, que se ejecuta si ningún otro corresponde, y que no es necesario poner. Es, en todo, equivalente al bloque else de una sentencia if.

Ahora escribiremos un programa en Lenguaje C que solicite el ingreso de dos números enteros y que luego permita seleccionar si se sumarán, restarán dividirán o multiplicarán y muestre el resultado por pantalla.

#include <stdio.h>
main(void)
{
	int opcion,a,b,resultado;
	printf("Ingrese un numero entero [a]: ");
	scanf("%d",&a); 
 printf("Ingrese un numero entero [b]: ");
 scanf("%d",&b); 	
 printf("Menu\n"); 
 printf("1. Sumar\n"); 
 printf("2. Restar\n");
 printf("3. Dividir\n"); 
 printf("4. Multiplicar\n");
	printf("Elija una operacion: ");
	scanf("%d",&opcion);
	switch(opcion)
	{
		case 1: 			
                        resultado=a+b;
			printf("%d + %d = %d\n",a,b,resultado);
			break;
		case 2: 			
                        resultado=a-b;
			printf("%d - %d = %d\n",a,b,resultado);
			break;
		case 3:
			resultado=a/b;
			printf("%d / %d = %d\n",a,b,resultado);
			break;
		case 4:
			resultado=a*b;
			printf("%d x %d = %d\n",a,b,resultado);
			break;
		defalut:
			printf("Opcion no valida\n"); 
	}
        system ("PAUSE");
}

Compilamos y verificamos que el programa no tenga errores:

Ahora ejecutamos el programa para comprobar que todo es correcto.

El resultado es el siguiente:

Como se puede observar, los numero introducido eran 2 y 5,  y la operación es la de multiplicar fíjense como da el resultado.

Bien este es todo el Tutorial, nos veremos en la proxima entrega… Chao =)

Anuncios
  1. marzo 24, 2013 en 8:16 AM

    You want to study anything beyond what they have provided to you.

    This device has taken the tech planet by storm, and for superior purpose.

  2. mayo 31, 2013 en 3:40 AM

    My programmer is trying to convince me to move to .net from PHP.

    I have always disliked the idea because of the costs.
    But he’s tryiong none the less. I’ve been using WordPress on various websites for about a
    year and am concerned about switching to another platform.

    I have heard very good things about blogengine.

    net. Is there a way I can import all my wordpress content into it?
    Any kind of help would be greatly appreciated!

  3. juan
    agosto 4, 2014 en 11:13 PM

    Nomamen no entiendo nada 😥

    • enero 30, 2015 en 12:31 PM

      Hermano no entiendes que? puede ser mas explicito, Gracias

  4. Victor Duque
    octubre 29, 2014 en 10:42 PM

    Muy buenos tus aportes. Gracias!

  5. daniel padher
    marzo 25, 2015 en 2:33 AM

    buenisimo ya visite muchisimas paginas y ninguna me avia dado la explicacion que queria muchas gracias

  6. Nicolas Valencia
    abril 3, 2015 en 6:52 PM

    Muchas gracias, me ha sido de mucha ayuda, 🙂

  7. gamboamorales4
    mayo 21, 2015 en 4:13 AM

    ¡excelente! muchas gracias Alfredo

  8. junio 4, 2015 en 4:54 PM

    nel ni mergas

  9. Xavier Rosales
    noviembre 9, 2015 en 3:07 AM

    muy bueno muchas gracias por el aporte

  10. José
    noviembre 12, 2015 en 1:02 PM

    Excelente!
    igual uso Dev C++

  11. ANTONIO HUERTA CORONA
    marzo 22, 2016 en 6:13 PM

    muchas gracias me sirvió de gran ayuda sigue así.

  12. dag
    junio 5, 2016 en 5:00 PM

    puchas

    • dag
      junio 5, 2016 en 5:01 PM

      hamehamehaaaaaaaaa

  13. melecio
    octubre 14, 2016 en 2:09 AM

    como le ago para que al presionar una tecla cualquiera en default me cierre el programa automáticamente sin tener que dar enter para continuar?

  14. mayo 31, 2017 en 6:53 AM

    最近では、太陽光発電も容易に一括見積もりができるサイトが増えています。一括見積もり依頼のやり方や本当の導入時のスタイルも様々ですが、見積もりサイトの特徴を、私なりに調べてみました。

    大きくわけて、地域をカバーしている複数の施工業者に一度に、見積もりお願いをする「見積もり一括型」と施工をする会社に直接見積もりお願いをする「直接見積もり型」になります。そうしたサービスからあなたに合う最もいいサービスを選ぶ手助けができたらと思います。

    ソーラーパネルは、ただ単に、安く設置すればよいというものではなく、発電するときの効率も重要です。
    発電するときの効率が低ければ、電気を売る時の回収も低くなり、せっかく安くに設置しても無駄になってしまいます。

    また、自分の立地等の色々な条件によって適切なパネル設置面積やソーラーパネルメーカーの選びが費用対効果を最大限にする重要な点です。

  15. andres manjarrez
    junio 14, 2017 en 10:55 PM

    genial tu explicacion !!

  1. mayo 20, 2014 en 8:36 AM
  2. agosto 4, 2014 en 1:20 AM
  3. agosto 13, 2014 en 12:33 PM
  4. septiembre 15, 2014 en 2:30 PM
  5. octubre 17, 2014 en 1:30 AM
  6. mayo 6, 2015 en 12:32 PM
  7. junio 15, 2016 en 1:46 AM
  8. abril 11, 2017 en 6:15 PM

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: