Está en la página 1de 41

Estructuras de control

Servando Campillay

Control de flujo
En principio, las sentencias de un programa en C se ejecutan secuencialmente, esto es, cada una a continuacin de la anterior empezando por la primera y acabando por la ltima. El lenguaje C dispone de varias sentencias para modificar este flujo secuencial de la ejecucin. Las ms utilizadas se agrupan en dos familias: las bifurcaciones, que permiten elegir entre dos o ms opciones segn ciertas condiciones, y los bucles, que permiten ejecutar repetidamente un conjunto de instrucciones tantas veces como se desee, cambiando o actualizando ciertos valores.

Sentencia IF
El formato general de esta construccin para decidir si una determinada sentencia debe ejecutarse o no (alternativa simple) es el siguiente:

Explicacin
Se evala expresion. Si el resultado es true (#0), se ejecuta sentencia; si el resultado es false (=0), se salta sentencia y se prosigue en la lnea siguiente. Hay que recordar que sentencia puede ser una sentencia simple o compuesta (bloque { ... }).

Ejemplo

IF-ELSE
Existe otra forma mas general, denominada alternativa doble, que ofrece dos alternativas de ejecucin, en funcin de si la condicin se evala cierta o falsa.

Explicacin
Se evala expresion. Si el resultado es true (#0), se ejecuta sentencia_1 y se prosigue en la lnea siguiente a sentencia_2; si el resultado es false (=0), se salta sentencia_1, se ejecuta sentencia_2 y se prosigue en la lnea siguiente. Hay que indicar aqu tambin que sentencia_1 y sentencia_2 pueden ser sentencias simples o compuestas (bloques { ... }).

Ejemplo

IF-ELSE-IF
Existe finalmente otra construccin alternativa muy comn, conocida como if-else-if o simplemente else-if. Su construccin, donde las condiciones se plantean de forma escalonada,

Formato

Explicacin
Se evala expresion_1. Si el resultado es true, se ejecuta sentencia_1. Si el resultado es false, se salta sentencia_1 y se evala expresion_2. Si el resultado es true se ejecuta sentencia_2, mientras que si es false se evala expresion_3 y as sucesivamente. Si ninguna de las expresiones o condiciones es true se ejecuta expresion_n que es la opcin por defecto (puede ser la sentencia vaca, y en ese caso puede eliminarse junto con la palabra else). Todas las sentencias pueden ser simples o compuestas.

Ejemplo

El operador condicional ?
El operador condicional ? es el unico operador ternario de C. La forma general de las expresiones construidas con este operador es la siguiente:

Explicacin
De manera que si la primera expresin se evala cierta, toda la expresin toma el valor de la segunda expresin. En cambio, si la primera expresin se evala falsa, toda la expresin toma el valor de la tercera expresin.

Ejemplo

SWITCH
Esta construccin permite especificar mltiples sentencias al estilo if-else-if, pero de manera mas compacta, legible y elegante.

Formato

Explicacin
Se evala expresion y se considera el resultado de dicha evaluacin. Si dicho resultado coincide con el valor constante expresion_cte_1, se ejecuta sentencia_1 seguida de sentencia_2, sentencia_3, ..., sentencia. Si el resultado coincide con el valor constante expresion_cte_2, se ejecuta sentencia_2 seguida de sentencia_3, ..., sentencia.

Evaluacin
Aplicacin de sentencias

Bucles
Adems de bifurcaciones, en el lenguaje C existen tambin varias sentencias que permiten repetir una serie de veces la ejecucin de unas lneas de cdigo. Esta repeticin se realiza, bien un nmero determinado de veces, bien hasta que se cumpla una determinada condicin de tipo lgico o aritmtico. De modo genrico, a estas sentencias se les denomina bucles. Las tres construcciones del lenguaje C para realizar bucles son el while, el for y el do...while.

WHILE

Explicacin
Se evala expresion_de_control y si el resultado es false se salta sentencia y se prosigue la ejecucin. Si el resultado es true se ejecuta sentencia y se vuelve a evaluar expresion_de_control (evidentemente alguna variable de las que intervienen en expresion_de_control habr tenido que ser modificada, pues si no el bucle continuara indefinidamente). La ejecucin de sentencia prosigue hasta que expresion_de_control se hace false, en cuyo caso la ejecucin contina en la lnea siguiente a sentencia. En otras palabras, sentencia se ejecuta repetidamente mientras expresion_de_control sea true.

DO WHILE

Explicacin
Esta sentencia funciona de modo anlogo a while, con la diferencia de que la evaluacin de expresion_de_control se realiza al final del bucle, despus de haber ejecutado al menos una vez las sentencias entre llaves; stas se vuelven a ejecutar mientras expresion_de_control sea true.

FOR
Esta construccin iterativa no presenta un formato fijo estricto, sino que admite numerosas variantes, lo que la dota de gran potencia y flexibilidad.

El operador coma (,)


C permite la utilizacin de mas de una sentencia en la primera y tercera partes de la construccin for, as como de mas de una condicin en la segunda parte. Por ejemplo, el siguiente bucle es valido en C:

Break
Esta sentencia tiene una doble finalidad. Por un lado, indica el final de un case en la construccin switch, para forzar la terminacin inmediata de la ejecucin de un bucle. De esta forma, se permite salir de la construccin repetitiva ignorando la evaluacin de la condicin. Si bien su uso esta reconocido como no muy elegante, permite en ocasiones escribir programas mas legibles y compactos.

continue
Esta sentencia se utiliza nicamente en las construcciones repetitivas. Su funcin es la de evitar que se ejecute todo el cdigo a continuacin de ella y hasta el final del cuerpo del bucle, durante una iteracin determinada.

Goto
La sentencia goto etiqueta hace saltar al programa a la sentencia donde se haya escrito la etiqueta correspondiente.

Evaluacin
Programacin de una situacin dada

También podría gustarte