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 =)

About these ads
  1. marzo 24, 2013 en 8:16 AM | #1

    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 | #2

    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. julio 7, 2013 en 8:28 AM | #3

    They help to build the imagination of the child and make for wonderful past
    times that work the brain and the creative faculties.
    Being Lego there is of course a construction
    element to all the games and this is a great way to get younger fans into game play
    beyond computers. The characters included are Rebel pilot Zev Sensca and three Rebel
    Troopers wearing cold weather clothing and Hoth helmets and
    they’ll help you defend the hidden Rebel base on ice planet Hoth against the attack of the Empire.

  1. No trackbacks yet.

Deja un comentario

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

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: