CURSO DESDE 0 DE PROGRAMACIÓN C BAJO GNU/LINUX.
Entrega 10. Control de flujo (II).
Seguimos con la estructura switch.
Esta estructura nos permite escoger entre distintos bloques de instrucciones y ejecutarlos dependiendo del valor de una expresión.
Tenemos el siguiente programa:
|
# include <stdio.h>
void main (void)
{
int x;
x=8%10;
if (x % 10==1) printf ("1\n"); else
if (x % 10==2) printf ("2\n"); else
if (x % 10==3) printf ("3\n"); else
if (x % 10==4) printf ("4\n"); else
if (x % 10==5) printf ("5\n"); else
if (x % 10==6) printf ("6\n"); else
if (x % 10==7) printf ("7\n"); else
if (x % 10==8) printf ("8\n"); else
if (x % 10==9) printf ("9\n"); else
if (x % 10==0) printf ("0\n");
}
|
De ejecución:
|
matados2k@imperio:~/curso programacion$ cc -o ejemplo_10_1 ejemplo_10_1.c
ejemplo_10_1.c: In function 'main':
ejemplo_10_1.c:4: warning: return type of 'main' is not 'int'
matados2k@imperio:~/curso programacion$ ./ejemplo_10_1
8
matados2k@imperio:~/curso programacion$
|
Ahora vamos a hacer lo mismo, pero con esta nueva estructura más sencilla y más compacta. Su sintaxis es la siguiente:
switch (expresión)
{
case valor 1:
instrucciones 1;
[break;]
...
case valor N:
instrucciones N;
[break;]
[default
instrucciones;]
}
Donde valor1, valor 2, .... valor N deben ser valores constantes, nunca pueden ser variables y son los posibles resultados de la expresión.
La forma de ejecutarse es la siguiente:
-
Se evalúa la expresión.
-
Se va 'case' por 'case' buscando el valor que coincida.
-
En el caso de coincidir se ejecutan las instrucciones..
-
Si encuentra un 'break' termina la ejecución, en caso contrario sigue ejecutando las restantes instrucciones que quedan por debajo.
-
Si no coincide con ningún valor, ejecuta lo que está en el bloque default si es que existe.
|
# include <stdio.h>
void main (void)
{
switch (8 % 10)
{
case 1:
printf ("1\n");
break;
case 2:
printf ("2\n");
break;
case 3:
printf ("3\n");
break;
case 4:
printf ("4\n");
break;
case 5:
printf ("5\n");
break;
case 6:
printf ("6\n");
break;
case 7:
printf ("7\n");
break;
case 8:
printf ("8\n");
break;
case 9:
printf ("9\n");
break;
default:
printf ("0\n");
}
}
|
De ejecución:
|
matados2k@imperio:~/curso programacion$ cc -o ejemplo_10_2 ejemplo_10_2.c
ejemplo_10_2.c: In function 'main':
ejemplo_10_2.c:4: warning: return type of 'main' is not 'int'
matados2k@imperio:~/curso programacion$ ./ejemplo_10_2
8
matados2k@imperio:~/curso programacion$
|
Es muy importante acordarse del uso del 'break;' porque si no se puede ejecutar parte del código que no deseamos, o nos podemos aprovechar de ello para saltarnos parte del código como en este cutre programa que calcula factoriales hasta 6!:
|
# include <stdio.h>
void main (void)
{
int y,x=3;
y=x;
switch (x-1)
{
case 5:
y=y*5;
case 4:
y=y*4;
case 3:
y=y*3;
case 2:
y=y*2;
}
printf ("%d!=%d\n",x,y);
}
|
De ejecución:
|
matados2k@imperio:~/curso programacion$ cc -o ejemplo_10_3 ejemplo_10_3.c
ejemplo_10_3.c: In function 'main':
ejemplo_10_3.c:4: warning: return type of 'main' is not 'int'
matados2k@imperio:~/curso programacion$ ./ejemplo_10_3
3!=6
matados2k@imperio:~/curso programacion$
|
Estructuras iterativas.
Son 3:
-
Estructura while.
-
Estructura do ... while.
-
Estructura for.
Estructura while.
La estructura while nos permite ejecutar repetidas veces una instrucción, ya sea simple o compuesta, hasta que se cumpla una determinada condición.
while (condición)
instrucción;
El funcionamiento es el siguiente:
-
Se evalúa la condición, si es falsa nos saltamos el while y continuamos con la instrucción inmediatamente después del bucle while.
-
Se ejecuta la instrucción.
-
Volvemos al principio.
Veamos cómo sería nuestro ejemplo del factorial con un bucle while:
|
# include <stdio.h>
void main (void)
{
int z,y,x=3;
z=x;
y=x;
while (x>1)
{
x--;
y*=x;
}
printf ("%d!=%d\n",z,y);
}
|
De ejecución:
|
matados2k@imperio:~/curso programacion$ cc -o ejemplo_10_4 ejemplo_10_4.c
ejemplo_10_4.c: In function 'main':
ejemplo_10_4.c:4: warning: return type of 'main' is not 'int'
matados2k@imperio:~/curso programacion$ ./ejemplo_10_4
3!=6
matados2k@imperio:~/curso programacion$
|
Hay que decir por último que si metemos un 'break;' por medio también se interrumpe la estructura, como en el caso de 'switch' donde es casi siempre imprescindible.
Despedida.
Y aquí cortamos la entrega, espero que la semana que viene queráis más.
Agradecimientos:
· Revisión del documento: Karuchi (Carolina García).
Página oficial y dominio de mi propiedad http://matados2k.es
Matados'2k Usuario y moderador de www.sinuh.org
Matados'2k Moderador de foro.noticias3d.com
matados2k (arroba) gmail (punto) com
|
Este documento está sometido a la licencia de creative commons en su variante “Reconocimiento-NoComercial-SinObraDerivada 2.1 España” . Es de agradecer que se comunique al autor el uso de este documento en otro medio y se debe incluir de forma obligatoria este recuadro y los agradecimientos.
|
Sólo los usuarios registrados pueden escribir comentarios. Por favor valídate o regístrate. Powered by AkoComment 2.0! |