Sentencias de Control de los programas

Anuncio
Tema
Tema2:
2: Sentencias
Sentenciasde
deControl
Controlde
delos
losProgramas
Programas
Fundamentos de Informática
1º Ingeniería Industrial
Escuela Superior de Ingenieros
Universidad de Sevilla
Ismael Alcalá Torrego
José Ángel Acosta Rodríguez
Fernando Dorado Navas
Fabio Gómez Estern-Aguilar
Manuel López Martínez
Amparo Núñez Reyes
Carlos Vivas Venegas
TEMA 2: Sentencias de Control de los programas
El lenguaje C dispone de sentencias de control ada ptadas
a los diagramas de flujo estructurados
OPERACIONES
EN SECUENCIA
OPERACIONES
CONDICIONALES
Estructuras básicas
de un diagrama de flujo
OPERACIONES
ITERATIVAS
OPERACIONES EN SECUENCIA:
Consiste en realizar una operac ión tras
otra sin que hayan bifurcaci ones ni
saltos.
sentencia_1 ;
A
{
B
sentencia_1 ;
sentencia_2 ;
.
.
}
OPERACIONES CONDICIONALES:
1º) Se evalúa una condición.
2º) Dependiendo del resultado, el flujo de ejecución seguirá una de las dos bifu rcaciones.
IF
if (condición) /* No lleva ";" */
{
.........; /* Bloque de
sentencias A */
}
Cond ?
NO
SI
A
I F - ELSE
if (condición)
/* No lleva ";" */
{
.........; /* Bloque de
sentencias A */
}
else
{
.........; /* Bloque de
sentencias B */
}
NO
Cond ?
SI
A
B
NO
Cond1 ?
NO
Cond1 ?
SI
SI
Cond2 ?
EJEMPLOS:
Operaciones
Condicionales
"ANIDADAS"
NO
SI
A
NO
Cond2 ?
B
SI
B
A
Cond1 ?
SI
NO
Cond2 ?
EJEMPLO
Operaciones
Condicionales
en
"ESCALERA"
SI
NO
Cond3 ?
SI
A
B
C
NO
SWITCH
SWITCH
• Caso de decisión con bifurcación múltiple (Ej. Menús)
• FUNCIONAMIENTO: Se compara una variable con una lista de
constantes enteras o carácter, y cuando sea igual a alguno de los elementos
de la lista, se ejecuta una sentencia (o bloque) y todas las siguientes.
switch (variable) {
case const_1: sentencia_1;
case const_2: sentencia_2;
:
case const_n: sentencia_n;
default: sentencia; /* se ejecuta si no se
encuentran igualdades */
}
BREAK
La sentencia break indica que termina la ejecución del bloque switch. Si no
apareciera se ejecutaría
todo lo que viene después, hasta la llave final del switch.
switch (variable) {
case 1:
case 2:
case 3: sentencia1;
break;
case 4: sentencia2;
}
PROCESOS
ITERATIVOS
Para realizar un conjunto
de sentencias repetidas
veces.
SENTENCIA for
SI
¿Se conoce a priori el
nº de iteraciones ?
NO
SENTENCIAS:
- while
- do..while
FOR
FOR
SINTAXIS
for( Valores iniciales; Condición; Actualización )
{ Bloque de sentencias; }
Valores
Iniciales
VALORES INICIALES : Es la parte que
se usa normalmente para dar un valor
inicial a la va riable de
control del bucle. Admite cualquier
sentencia, y sólo se ejecuta una vez.
Condición
S
I
CONDICIÓN : Expresión relacional que
determina cuando se sale del bucle . Se
ejecuta el bucle siempre que la cond ición
se cumpla.
Bloque de
sentencias
ACTUALIZACIÓN : Define cómo cambia
la variable de control c ada vez.
Actualización
N
O
...¿Y SI SE DESCONOCE EL NUMERO DE ITERACIONES?
LA REPETICIÓN TERMINA CUANDO SE CUMPLE CIERTA CONDICIÓN
WHIL
WHILE
E
SINTAXIS
Condición
while ( condición )
{ bloque de sentencias; }
S
I
Bloque de
sentencias
La condición ha de ser cierta para p asar a
ejecutar el cuerpo del bucle.
DO ... WHILE
SINTAXIS
do
{ bloque de sentencias; }
while ( condición );
Es un bucle con comprobación de la
condición a la salida, por tanto, el bloque
de sentencias se ejecuta al menos una vez.
Bloque de
sentencias
S
I
Condición
N
O
N
O
Sentencias de salida de
los programas
Para forzar la salida
de un bucle
EXIT
EXIT( (FUNCION
FUNCION) )
Parada ordenada del sistema (cierra
ficheros abiertos). Cuandose da una
circunstancia especial que implica la
terminación inmediata del programa.
void main(void)
{
if (lleno()) exit(); /* lleno() devuelve
1 si el disco está lleno */ ..
}
BREAK
BREAK
Finaliza el bucle en el que esté
inmerso y pasa el control del
programa a la sentencia siguiente
al bucle
Condición
NO
SI
break;
RETURN
RETURN
return sirve para devolver un valor
desde una función a la función
llamante terminando con ello la
ejecución de la función
CONTINUE
CONTINUE
También interrumpe el flujo normal en
un bucle, pero en lugar de salir del
bucle, pasa al final del bloque, dejando
de ejecutar el resto de sentencias. (No
se puede utilizar con switch).
Condición
En una estructura anidada se sale
del bucle interior, no de todos
for( i = 0; i < 100; i++)
for(j = 0; j < 100; j++)
{
x = j*j;
if (j > 50) break;
}
SI
continue;
NO
EJEMPLOS
SWITCH
main()
{
int x, y, z, var;
printf(“Deme datos x e y \n”);
scanf(“ %d %d”, &x, &y);
printf(“Elija opcion: \n 1-sumar x + y \n 2 –restar x – y \n 3
–multiplicar x * y \n”);
scanf("%d", &var);
switch(var) {
case 1: z = x + y ;
break;
case 2: z = x – y ;
break;
case 3: z = x * y ;
break;
default: printf( "No eligió bien la op ción\n" );
}
}
WHILE
main()
{
int numero, divisor;
printf("Introduzca el número \n");
scanf("%d", &numero);
divisor = 2;
while (numero%divisor != 0) divisor++;
if (divisor == numero)
printf("%d es primo\n", numero);
else
printf("%d no es primo\n", numero);
}
main()
{
int x, y;
for( x = 0, y = 5; x + y < 7; ++x)
{
z = x - y;
printf(“%d \t”, z);
}
for( x = 0, y = 10; x < y ; x++, y--)
printf("\n %d \t %d \n", x, y);
}
FOR
Descargar