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

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

Upload: eduardo-zamarron

Post on 23-Jan-2016

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: FLUJO DE CONTROLPá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

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.

Page 2: FLUJO DE CONTROLPá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

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

Page 3: FLUJO DE CONTROLPá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

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.

Page 4: FLUJO DE CONTROLPá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

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.

Page 5: FLUJO DE CONTROLPá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

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.

Page 6: FLUJO DE CONTROLPá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

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

Page 7: FLUJO DE CONTROLPá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

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.

Page 8: FLUJO DE CONTROLPá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

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

Page 9: FLUJO DE CONTROLPá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

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.

Page 10: FLUJO DE CONTROLPá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

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; ... }

Page 11: FLUJO DE CONTROLPá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

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.

Page 12: FLUJO DE CONTROLPá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

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.

Page 13: FLUJO DE CONTROLPá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

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

Page 14: FLUJO DE CONTROLPá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

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’ ) ;

Page 15: FLUJO DE CONTROLPá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

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

Page 16: FLUJO DE CONTROLPá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

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

Page 17: FLUJO DE CONTROLPá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

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.

Page 18: FLUJO DE CONTROLPá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

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;

}

Page 19: FLUJO DE CONTROLPá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

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.

Page 20: FLUJO DE CONTROLPá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

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

Page 21: FLUJO DE CONTROLPá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

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)

Page 22: FLUJO DE CONTROLPá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

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.

Page 23: FLUJO DE CONTROLPá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

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;

Page 24: FLUJO DE CONTROLPá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

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.

Page 25: FLUJO DE CONTROLPá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

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.

Page 26: FLUJO DE CONTROLPá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

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

Page 27: FLUJO DE CONTROLPá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

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

Page 28: FLUJO DE CONTROLPá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

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.

Page 29: FLUJO DE CONTROLPá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

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.