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