Está en la página 1de 16

Estructuras de Control

Las estructuras de control, permiten modificar y controlar el


flujo secuencial de ejecución de los programas.
Se clasifican en dos tipos:
• Selectivas: Para bifurcar el flujo de ejecución.
• Repetitivas: Para establecer bucles iterativos de ejecución .

Curso 05-06. Práctica 2 1


Estructuras de Control
Selectivas
Las estructuras de control selectivas, permiten evaluar una
condición y según el resultado de la misma se ejecutará un
conjunto determinado de sentencias

Cierto condición Falso

sentencia-1 sentencia-n+1
sentencia-2 sentencia-n+2
... ...
sentencia-n sentencia-m

Curso 05-06. Práctica 2 2


Estructuras de Control
Selectiva Simple
Cuando un bloque de
if (condición) sentencias tiene una
{ sentencia-1; única sentencia se
...
sentencia-n; } pueden omitir las llaves
else ¡Se puede omitir la
“{ }”
{ sentencia-n+1; palabra “else” y el bloque
...
sentencia-m; } se sentencias que figura
a continuación
LEA C
si if (x>=0)
x >=0:
escribir ”x es no negativo” { printf (”x es no negativo");
y := x y = x; }
| otras: else
escribir ”x es negativo” { printf (”x es negativo");
y := -x
fsi y = -x; }
Curso 05-06. Práctica 2 3
Estructuras de Control
Selectiva Múltiple
switch(expresión)
{
case valor-1: C
LEA switch (opcion)
si sentencia-11; {
....
opcion=1:break; case 1:
escribir ”elegida opción 1"
case valor-2: printf (”elegida opción 1");
| opcion=2:
sentencia-21; break;
....”elegida opción 2"
escribir case 2:
break; printf (”elegida opción 2");
| opcion=3: break;
case valor-3:
escribir ”elegida opción 3"
sentencia-31; case 3:
| otras: .... printf (”elegida opción 3");
break;
escribir ”elección incorrecta" break;
fsi default: default:
sentencia-p; printf (”elección incorrecta");
} }
Curso 05-06. Práctica 2 4
Estructuras de Control
Selectivas
Reflexiones
La comparación de igualdad se representa por = = y nunca por un signo igual.
Si escribe una sentencia como:
x= 3;
if (x = 1)
printf (“Me ejecuto siempre aunque x != 1”);
El compilador permite ejecutar el código. En este caso se asignará el valor 1 a
x, ejecutandose el código que corresponde a la situación en que la condición
evalúa a cierta, por ser distinta de cero.

En C
Este eselun
valor falso
error se representa
común y difícil por un 0, y el cierto por un número distinto
dededetectar
0. Por tanto
TENGAes correcto escribir:
CUIDADO!!
if (0) if (945)
printf(“NO se ejecuta nunca”); printf(“Se ejecuta siempre”);
else else
printf(“Se ejecuta siempre”); printf(“NO se ejecuta nunca”);
Curso 05-06. Práctica 2 5
Estructuras de Control
Selectivas
Reflexiones
En una sentencia if donde NO utilizamos llaves para determinar el bloque de
código al que afecta el if, sólo se ve afectada la primera instrucción tras el if
if (x==0) if (x==0)
printf(“se ejecuta si x es igual a 0\n”); EQUIVALE printf(“se ejecuta si x es igual a 0\n”);
printf(“se ejecuta siempre\n”); printf(“se ejecuta siempre\n”);
Tenga presente también que en la sección else sucede lo mismo.

Si añadimos un else tras el segundo printf el compilador dará un error


indicando que el else no corresponde a ningún if, debido a que el else debe
estar inmediatamente después de la última instrucción del código que se
ejecuta cuando la condición del if se evalúa a cierto.
if (x==0)
printf(“se ejecuta si x es igual a 0\n”);
printf(“se ejecuta siempre\n”); Esta instrucción no pertenece al if
else ¡ ERROR DE COMPILACIÓN !
Curso 05-06. Práctica 2 6
Estructuras de Control
Selectivas
Reflexiones
Tenga cuidado con el punto y coma:
if (c==‘A’)
if (c==‘A’) ; EQUIVALE ;
printf(“se ejecuta siempre\n”); printf(“se ejecuta siempre\n”);
Si incluimos un punto y coma tras el if de la forma que se observa en el
ejemplo, le estamos indicando al if que cuando la condición sea cierta ejecute
una instrucción nula (;). En el else se comporta de la misma forma.

Pór último, si añadimos una llave tras el ; se producirá un error de


compilación ya que el compilador asume que el if termina en el punto y coma
Aquí termina la parte cierta, si debe existir un else
if (c==‘A’) ;
debe estar un la sentencia inmediata siguiente
printf(“se ejecuta siempre\n”);
else ¡ ERROR DE COMPILACIÓN !
printf(“…………………...\n”);

Curso 05-06. Práctica 2 7


Estructuras de Control
Repetitivas

Las estructuras de control repetitivas, permiten ejecutar


reiteradamente un conjunto determinado de sentencias,
mientras cierta condición evalúe a cierto (distinto de cero).
Se estudiarán dos sentencias:
• while (condición)
• for (inicialización; condición; actualización)

Curso 05-06. Práctica 2 8


Estructuras de Control
Repetitivas
While:(sintaxis)
while (condición)
{
Falsa
sentencia-1;
condición
sentencia-2;
...
sentencia-n; Cierta
Cierta
} sentencia-1
¡Se ejecuta el sentencia-2
BLOQUE de ...
sentencias sentencia-n
mientras la
condición es
cierta
Curso 05-06. Práctica 2 9
Estructuras de Control
Repetitivas
While: (ejemplo)

LEA C
i := 0 i=0;
mientras i < MAXIMO while (i < MAXIMO)
i := i + 1 {
escribir i i++;
escribir i*i printf ("%d", i);
fmientras printf (“%d”, i*i);
}

Curso 05-06. Práctica 2 10


Estructuras de Control
Repetitivas
For: (sintaxis)
for (inicialización; condición; actualización) inicialización
{
sentencia-1;
sentencia-2; Falsa
... condición
sentencia-n;
actualización Cierta
} Cierta
¡Se ejecuta el sentencia-1
BLOQUE de
sentencias y la sentencia-2
...
ACTUALIZACIÓN sentencia-n
mientras la
condición es cierta
Curso 05-06. Práctica 2 11
Estructuras de Control
Repetitivas
For: (ejemplo)

LEA C
desde i:=1 hasta MAXIMO for (i=1; i<=MAXIMO; i++)
escribir i {
escribir i*i printf ("%d", i);
fdesde printf (“%d”, i*i);
}

Curso 05-06. Práctica 2 12


Estructuras de Control
Repetitivas
Reflexiones
En una sentencia while o for donde NO utilizamos llaves para determinar el
bloque de código al que afecta, sólo se ve afectada la primera instrucción:
i=0;
while (i < 10)
printf(“La variable i tiene el valor: %d\n”,i); ¡ Genera un bucle infinito !
i++; ¡ no está dentro del bucle!
El ejemplo anterior es un bucle infinito que hará que el programa nunca
termine puesto que i siempre tiene el valor 0.

El bloque de código al que afecta un while debe SIEMPRE cambiar el valor de


la condición del mismo en alguna de las ejecuciones ya que en caso contrario
siempre se cumplirá y nunca terminará de ejecutarse:
while (i < 10)
{ j++; prinf(“La variable j toma el valor: %d\n”); }

Curso 05-06. Práctica 2 13


Estructuras de Control
Repetitivas
Reflexiones
Si añadimos un punto y coma tras una sentencia while haremos que el while
no ejecute ninguna instrucción y por tanto que sea un bucle infinito al no
modificarse nunca la condición del mismo:
i=0;
while (i < 10) ; ¡ Sentencia vacía!. No se modifica el valor de i
printf(“No me ejecuto NUNCA”);

Si añadimos un punto y coma tras una sentencia for haremos que el bucle no
ejecute ninguna instrucción sea cual sea el código que escribamos detrás, pero
no será un bucle infinito:
for (i = 0; i < 10; i++) ; ¡ Sentencia vacía!
printf(“Si me ejecuto”);
El for iterará 10 veces ejecutando la instrucción nula y después ejecutará el
printf.
Curso 05-06. Práctica 2 14
Estructuras de Control
Ejemplo (parte 1)
#include <stdio.h>
#define MAXINTENTOS 4
void main(void)
{
int r=-1;
int contador=0,base,altura;
printf ("¿Desea calcular el área de un rectángulo (0) o
de un triángulo (1)?\n");

/* recoger la opción por teclado */


while (r!=0 && r!=1 && contador < MAXINTENTOS)
{
scanf(“%d”,&r);
contador++;
}
Curso 05-06. Práctica 2 15
Estructuras de Control
Ejemplo (parte 2)
if (r==0 || r==1)
{
printf ("\nteclee la base:");
scanf("%d",&base);
printf ("\nteclee la altura:");
scanf("%d",&altura);
}
if (r==1)
printf ("El área del triángulo es %f\n",
base*altura/2.0);
else
if (r==0)
printf ("El área del rectángulo es
%d\n",base*altura);
else
printf ("No se eligió un opción correcta");
Curso 05-06. Práctica 2 16

También podría gustarte