flujo de controlpág. 1 de 29 expresiones y sentencias ä se entiende por expresión una...

Post on 23-Jan-2016

218 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

FLUJO DE CONTROL Pág. 1 de 29

EXPRESIONES Y SENTENCIAS

Se entiende por expresión una combinación de operadores y operandos que tiene un valor.

El valor se puede averiguar realizando las operaciones en el orden dictado por la precedencia de los operadores.

FLUJO DE CONTROL Pág. 2 de 29

EXPRESIONES Y SENTENCIAS

Una expresión se transforma en sentencia simple cuando va seguida de un punto y coma; las sentencias son las piezas con las que se construye un programa.

Expresiones Sentencias Valor3 3; 3

x = 0 x = 0; 0i++ i++; ?

5 > 3 5 > 3; 16 + (c=3+8) 6 + (c=3+8); 17

El punto y coma se denomina terminador de sentencias (en Pascal, separador de sentencias).

FLUJO DE CONTROL Pág. 3 de 29

EXPRESIONES Y SENTENCIAS Expresiones compuestas, operador coma.

El operador coma se utiliza para unir varias expresiones.

Una secuencia de expresiones separadas por el operador coma se evalúa de izquierda a derecha.

El valor de la expresión global es el de la expresión más a la derecha (pero puede depender de la evaluación de las otras expresiones).

x = (y=3, y+1) x vale 4x = (y=20, y=y-5, 30/y) x vale 2

El operador coma es el operador de menor precedencia.

FLUJO DE CONTROL Pág. 4 de 29

EXPRESIONES Y SENTENCIAS: Sentencias compuestas, bloques

Se denomina sentencia compuesta o bloque a un conjunto de sentencias encerradas entre llaves {}.

Las sentencias situadas dentro de las llaves pueden ser declaraciones, otras sentencias compuestas o sentencias de flujo de control.

Toda función debe contener al menos una sentencia compuesta.

FLUJO DE CONTROL Pág. 5 de 29

EXPRESIONES Y SENTENCIAS Sentencias compuestas, bloques

Es frecuente que las sentencias de flujo de control se compongan de sentencias compuestas.

Detrás de la llave que finaliza una sentencia compuesta o bloque no se pone un punto y coma.

FLUJO DE CONTROL Pág. 6 de 29

EXPRESIONES Y SENTENCIAS Sentencias de flujo de control

Las sentencias de flujo de control modifican la ejecución secuencial de las sentencias que forman el programa.

Se clasifican en tres grupos: sentencias de selección: if-else, switch sentencias de iteración: while, do-while, for sentencias de salto: break, continue, goto, return

FLUJO DE CONTROL Pág. 7 de 29

SENTENCIAS CONDICIONALESif-else

Las sentencias condicionales se utilizan para ejecutar selectivamente un conjunto de sentencias, según se satisfaga o no una condición.

La sentencia if-else se utiliza para ejecutar uno de dos posibles conjuntos alternativos de sentencias, dependiendo del resultado de evaluar una expresión.

FLUJO DE CONTROL Pág. 8 de 29

SENTENCIAS CONDICIONALES if-else

La sintaxis de la sentencia if-else es:

if ( expresión )

/* si expresión se evalúa a un valor distinto de 0 */ sentencia 1

else /* si expresión se evalúa a 0 */ sentencia 2

FLUJO DE CONTROL Pág. 9 de 29

SENTENCIAS CONDICIONALESif-else

expresión debe encontrarse siempre entre paréntesis y las sentencias sentencia 1 y sentencia 2 pueden ser simples o compuestas (bloques).

Siendo opcional la parte else, la aparente ambigüedad de ciertas configuraciones de sentencias if-else anidadas se resuelve como sigue: la parte else se asocia con el if sin else más próximo del mismo bloque.

FLUJO DE CONTROL Pág. 10 de 29

SENTENCIAS CONDICIONALES switch

La sentencia switch es una forma alternativa de if anidados para evaluar decisiones múltiples.

Su sintaxis es: switch ( expresión ) { ... case expr_cte1: case expr_cteN:

lista_sentencias 1 lista_sentencias N break; break; case expr_cte2: default: lista_sentencias 2 lista_sentencias break; break; ... }

FLUJO DE CONTROL Pág. 11 de 29

SENTENCIAS CONDICIONALES switch

Cuando el valor de expresión no se corresponde con ninguna de las expr_cte y existe el caso default, se ejecuta la lista_sentencias correspondiente a éste caso.

Las palabras clave case y default no interrumpen por sí mismas el flujo de control del programa; por ello es necesario una sentencia de salto (normalmente la instrucción break).

Una sentencia switch es más eficiente que una escalera de if-else.

FLUJO DE CONTROL Pág. 12 de 29

SENTENCIAS CONDICIONALES Switch, Advertencias

No pueden existir dos casos iguales en un mismo switch (un mismo caso, sí puede ocurrir en distintos switch anidados).

Si se omite el break al final de un caso, el programa pasa a ejecutar las sentencias de los casos siguientes hasta encontrar un break o hasta el final del switch.

Se recomienda situar el caso default en último lugar e incluir siempre un break al final de su secuencia de sentencias asociada.

FLUJO DE CONTROL Pág. 13 de 29

SENTENCIAS REPETITIVASwhile

Las sentencias repetitivas se utilizan para seguir ejecutando una sentencia o un conjunto de sentencias mientras se cumpla una cierta condición.

La sintaxis del while es:

while ( expresión ) sentencia

FLUJO DE CONTROL Pág. 14 de 29

SENTENCIAS REPETITIVAS while

sentencia, simple o compuesta, se ejecutará repetidamente mientras el valor de expresión sea distinto de cero (cierta) .

La comprobación de expresión se realiza antes de la ejecución de sentencia, y por tanto puede que ésta no se ejecute ni una vez.

El cuerpo del while puede estar vacío, es decir, estar formado por la sentencia nula, p.e.:

while ( (car=getchar()) != ‘A’ ) ;

FLUJO DE CONTROL Pág. 15 de 29

SENTENCIAS REPETITIVASdo-while

La sintaxis es:

dosentencia

while ( expresión );

sentencia se ejecuta repetidamente mientras el valor de expresión sea distinto de cero (cierta).

FLUJO DE CONTROL Pág. 16 de 29

SENTENCIAS REPETITIVASdo-while

La comprobación de expresión se realiza después de la ejecución de sentencia, y por tanto ésta siempre se ejecuta al menos una vez.

Aunque las llaves no son necesarias cuando sentencia es una sentencia simple, se aconseja utilizarlas para mejorar la legibilidad

FLUJO DE CONTROL Pág. 17 de 29

SENTENCIAS REPETITIVASfor

Es la más frecuentemente usada para crear bucles;su sintaxis es:

for ( expresión 1; expresión 2; expresión 3 )sentencia

expresión 1: especifica la inicialización del bucle; se ejecutará una sola vez.

expresión 2: especifica la comprobación que se realizará antes de cada iteración.

expresión 3: especifica las instrucciones que se ejecutarán al final de cada iteración.

FLUJO DE CONTROL Pág. 18 de 29

SENTENCIAS REPETITIVASfor

El bucle se abandona cuando expresión 2 vale 0 (la condición no se cumple).

El bucle for es equivalente a un bucle while:expresión 1;while ( expresión 2 ) {

sentenciaexpresión 3;

}

FLUJO DE CONTROL Pág. 19 de 29

SENTENCIAS REPETITIVASfor

Todas las expresiones son opcionales pero deben de mantenerse los puntos y comas.

for (;;) ;

En el caso de no especificarse expresión 2 se considera que siempre es cierta, con lo que el bucle se ejecutará indefinidamente.

FLUJO DE CONTROL Pág. 20 de 29

SENTENCIAS REPETITIVASfor

Los límites del bucle pueden alterarse desde el interior del propio bucle, p.e.:

for ( n=1; n<10000; n+=delta ){

...delta--;

}

Las variables de control mantienen su valor tras la ejecución de éste

FLUJO DE CONTROL Pág. 21 de 29

SENTENCIAS REPETITIVASfor

Se pueden utilizar dos o más variables de control:for ( i=0, j=0; i+j<10; i++, j+=2 )

printf( “%d %d\n”, i, j );

El cuerpo del for puede estar vacío, es decir, estar formado por la sentencia nula, p.e.:

for( x=1, y=1; x<MAX; y*=x++ ) ;

También se puede salir de un bucle mediante una instrucción de salto (p.e. el caso del bucle infinito)

FLUJO DE CONTROL Pág. 22 de 29

SENTENCIAS DE SALTO

Las sentencias de salto se utilizan para alterar de manera incondicional el orden de ejecución de las sentencias de un programa.

Sólo deberían utilizarse con el fin de simplificar o mejorar los algoritmos.

Las sentencias condicionales o repetitivas no deben sustituirse nunca por sentencias de salto, ya que generan programas más difíciles de seguir, más propensos a errores y mas difíciles de modificar.

FLUJO DE CONTROL Pág. 23 de 29

SENTENCIAS DE SALTObreak

Se utiliza para terminar la ejecución de bucles o para salir de una sentencia switch.

Su sintaxis es:

break;

FLUJO DE CONTROL Pág. 24 de 29

SENTENCIAS DE SALTObreak

Se utiliza en un bucle while, do-while o for para transferir el control a la siguiente sentencia fuera del bucle.

while( ... ) { while ( ... ) {... ...break; while( ... ) {... ...

} break;/* salto hasta aquí */ ...

} ... /* salto hasta aquí

*/ }

Es de especial utilidad cuando existe un suceso externo que controla un bucle.

FLUJO DE CONTROL Pág. 25 de 29

SENTENCIAS DE SALTOcontinue

Se utiliza en un bucle while, do-while o for para transferir el control al final del cuerpo del bucle (concluye la iteración). Su sintaxis es:

continue;

En los bucles while y do-while después de un continue, se pasa a comprobar la condición de finalización.

En los bucles for después de un continue se evalúa la tercera expresión de la sentencia for y después se comprueba la condición de finalización.

FLUJO DE CONTROL Pág. 26 de 29

SENTENCIAS DE SALTOgoto

El control del flujo de un programa puede alterarse incondicionalmente usando la sentencia goto.Su sintaxis es:

goto identificador;

El identificador es una etiqueta que se utiliza para señalar la sentencia a la que se transfiere el control dentro de la misma función.Su sintaxis es:

identificador: sentencia

FLUJO DE CONTROL Pág. 27 de 29

SENTENCIAS DE SALTOgoto

La sentencia goto sólo debería usarse para salir de un conjunto de bucles anidados en caso de error.

Advertencias: Cualquier otro uso es prescindible, y su uso siempre

destruye la estructura del programa. Dos sentencias no pueden tener el mismo

identificador

FLUJO DE CONTROL Pág. 28 de 29

SENTENCIAS DE SALTOreturn

Esta sentencia devuelve el control desde el interior de una función a la sentencia que sigue a su llamada.Su sintaxis es:

return expresión;

El valor que devuelve la función que la contiene es el resultado de evaluar expresión (en el caso del main, el valor se devuelve al entorno y el programa finaliza).

La sentencia return puede utilizarse sin expresión asociada.

FLUJO DE CONTROL Pág. 29 de 29

SENTENCIAS DE SALTOreturn

Si la sentencia lleva una expresión asociada, el valor devuelto se convierte, como si de una asignación se tratara, al tipo indicado en la definición de la función.

Salir de una función por su última sentencia (seguida por }) equivale a realizar un return sin expresión asociada.

En una misma funcion puede existir más de una sentencia return.

top related