control de flujo de programa

Post on 29-Jun-2015

597 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Control de flujo de programa

Referencias documentalesLuis Joyanes Aguilar e Ignacio

Zahonero Martínez, “Programación en C Metodología, algoritmos y estructura de datos”, Mc Graw Hill, pp. 123-197

Estructuras de controlControlan la secuencia o flujo

de ejecución de las sentencias. Las estructuras de control se dividen en tres grandes categorías en función del flujo de ejecución: secuencia, selección y repetición.

3.1.- Control secuencial Una sentencia compuesta es un conjunto de

sentencias encerradas entre llaves ({ y }) que se utiliza para especificar un flujo secuencial.

{sentencia1;sentencia2;sentencia3;

} El control fluye de la sentencia1 a la

sentencia2 y así sucesivamente.

3.2 Control selectivo

Operadores relacionales

Los operadores relacionales se usan normalmente en sentencias de selección (if) o de iteración (while, for), que sirven para comprobar una condición. Utilizando operadores relacionales se realizan operaciones de igualdad, desigualdad y diferencias relativas.

< <= > >= == !=

Las sentencias if e if-elseSentencia If Cuando se alcanza la sentencia if dentro

de un programa, se evalúa la expresión entre paréntesis que viene a continuación de if. Si Expresión es verdadera, se ejecuta Acción; en caso contrario no se ejecuta Acción.

Sentencia if

Expresión

Acción

verdadero

falso

Sentencia if-else En este formato Acción1 y Acción2 son

individualmente, o bien una única sentencia que termina en un punto y coma (;) o un grupo de sentencias encerrado entre llaves. Cuando se ejecuta la sentencia if -else, se evalúa Expresión. Si Expresión es verdadera, se ejecuta Acción1 y en caso contrario se ejecuta Acción2

Sentencia if-else

Expresión

Acción1

verdadero falso

Acción2

Ejemplo:Printf("obtener el mayor de 2 números");

If(a>b)printf("%f es mayor a %f",a,b);

Elseprintf("%f es mayor a %f",b,a);

Operadores lógicos

Los operadores lógicos de C son: not ( ! ), and (&&) y or (||).

El operador lógico ! (not, no) produce falso (cero) si su operando es verdadero (distinto de cero) y viceversa.

El operador lógico && (and, y) produce verdadero sólo si ambos operandos son verdadero (no cero); si cualquiera de los operandos es falso produce falso.

El operador lógico I I(or, o) produce verdadero si cualquiera de los operandos es verdadero (distinto de cero) y produce falso sólo si ambos operandos son falsos.

Operadores condicionalesEl operador condicional, ? : , es un

operador que devuelve un resultado cuyo valor depende de la condición comprobada.

El operador condicional se utiliza para reemplazar a la sentencia if-else lógica en algunas situaciones. El formato del operador condicional es:

expresión-c ? expresión-v : expresión-f;

Selección múltiple-if anidados y sentencias switchUna sentencia if es anidada

cuando la sentencia de la rama verdadera o la rama falsa, es a su vez una sentencia if. Una sentencia if anidada se puede utilizar para implementar decisiones con varias alternativas o multi-alternativas.

Ejemplo:Printf("obtener el mayor de 3 números");if(a>b){

if(a>c)printf("%f es el numero mayor",a);

elseprintf("%f es el numero mayor",c);

}else{

if(b>c)printf("%f es el numero mayor",b);

elseprintf("%f es el numero mayor",c);

}

Sentencia switch La sentencia switch es una sentencia C

que se utiliza para seleccionar una de entre múltiples alternativas.

La sentencia switch es especialmente útil cuando la selección se basa en el valor de una variable simple o de una expresión simple denominada expresión de control o selector. El valor de esta expresión puede ser de tipo int o char, pero no de tipo float ni double.

Ejemplo:puts("imprimir, 1.-cuadrado, 2.-rectángulo o 3.-circulo");

scanf("%f",&o);

switch(o){

case 1:puts("cuadrado");break;case 2:puts("rectángulo");break;case 3:puts("circulo");break;default:puts("opción no valida");break;

}

3.3 Control repetitivo Un ciclo es cualquier construcción de

programa que repite una sentencia o secuencia de sentencias un número de veces. La sentencia (o grupo de sentencias) que se repiten en un bloque se denomina cuerpo del ciclo y cada repetición del cuerpo del ciclo se llama iteración del ciclo.

Sentencia whileLas sentencias del cuerpo del ciclo

se repiten mientras que la expresión lógica (condición del ciclo) sea verdadera. Cuando se evalúa la expresión lógica y resulta falsa, se termina y se sale del ciclo y se ejecuta la siguiente sentencia de programa después de la sentencia while.

Sentencia while

Condición

sentencia

verdadero

falso

Ejemplo:int o=1,n=0;while(o==1){

n+=1;printf("%f",n);puts("mostrar siguiente numero?1.-si,0.-

no");scanf("%f",&o);

}

Sentencia do-whileLa sentencia do-while se utiliza para

especificar un ciclo condicional que se ejecuta al menos una vez. Esta situación se suele dar en algunas circunstancias en las que se ha de tener la seguridad de que una determinada acción se ejecutará una o varias veces, pero al menos una vez.

Sentencia do-while

Condición

sentencia

verdadero

falso

Ejemplo:Int o, n=0;do{

n+=1;printf("%f",n);puts("mostrar siguiente numero?1.-si,0.-

no");scanf("%f",&o);

}while(o==1)

Sentencia for La sentencia for es un método para

ejecutar un bloque de sentencias un número fijo de veces. El bucle for se diferencia del bucle while en que las operaciones de control del bucle se sitúan en un solo sitio: la cabecera de la sentencia.

for ( Inicialización; Condición/Iteración ; Incremento)

Ejemplo:

puts(“Imprimir los primeros n números enteros“);

puts(“introducir la cantidad de números“);scanf(“%f“,&n);

for(i=1;i<n;i++)printf(“i=%f“,i);

Ciclos anidados Es posible anidar ciclos. Los bucles

anidados constan de un ciclo externo con uno o más ciclos internos. Cada vez que se repite el ciclo externo, los ciclos internos se repiten, se vuelven a evaluar los componentes de control y se ejecutan todas las iteraciones requeridas.

Ejemplo:puts("Introduce 2 numeros");

scanf("%d",&Xultimo);scanf("%d",&Yultimo);

for (x=1; x<=Xultimo; x++)for (y=1; y<=Yultimo; y++){

int producto;producto = x*y;printf(" %d * %d = %d\n", x,y,producto);

}

top related