logo sinuh
 

Inicio arrow Conocimiento arrow Curso de programación en C desde cero arrow Entrega 10. Control de flujo (II).
Entrega 10. Control de flujo (II). Imprimir
Por Luis García Galván   
sábado, 27 ene 2007 09:49

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:


  1. Se evalúa la expresión.

  2. Se va 'case' por 'case' buscando el valor que coincida.

  3. En el caso de coincidir se ejecutan las instrucciones..

    1. Si encuentra un 'break' termina la ejecución, en caso contrario sigue ejecutando las restantes instrucciones que quedan por debajo.

  4. 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:

  1. Estructura while.

  2. Estructura do ... while.

  3. 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:

  1. 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.

  2. Se ejecuta la instrucción.

  3. 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.


Comentario[s]

Sólo los usuarios registrados pueden escribir comentarios.
Por favor valídate o regístrate.

Powered by AkoComment 2.0!




© 2002-2005 SINUH - Comunidad GNU/Linux de Extremadura
Este portal utiliza Mambo
DHTML / JavaScript Tree by TwinHelix Designs

Para contactar con nosotros envía un correo a
info
Licencia Creative Commons
Los contenidos de este portal, salvo indicación en contra, están sujetos a una licencia de Creative Commons.

Los logotipos y marcas que aparecen son propiedad de sus respectivos dueños.

Las opiniones y declaraciones de las personas reflejadas en los foros y comentarios son propiedad y responsabilidad de sus autores, no identificando la opinión de SINUH y excluyendo de cualquier responsabilidad a esta asociación.
Ahora 8 visitantes
Advertisement