1.introducción

Preview only show first 6 pages with water mark for full document please download

Transcript

1.Introducción Las estructuras de control son instrucciones que nos permiten controlar el flujo de ejecución del programa. Las instrucciones de control se pueden agrupar en instrucciones condicionales e instrucciones de iteración o repetición. Condicionales: en estas estructuras el programa ejecutará una instrucción y otra dependiendo de la evaluación de una condición. Se dividen a su vez en simples, dobles y múltiples.  Simples: Es el caso de la instrucción if (punto 1.1).  Dobles: Es el caso de la instrucción if-else (punto 1.2).  Múltiples: Es el caso de las instrucciones if-else if (punto 1.3) y del switch (punto 1.4). Instrucciones de iteración y de repetición: mediante este tipo de instrucciones podemos representar procesos repetitivos o iterativos, también conocidos como bucles. Existen diferentes tipos de bucles:  Bucle para: bucle utilizado cuando conocemos el número de veces que ha de repetirse una serie de instrucciones. (punto 1.5).  Bucle mientras: mediante este bucle podemos representar un proceso repetitivo que se ejecutará mientras se cumpla una condición. (punto 1.6)  Bucle hacer mientras: a diferencia del bucle mientras, la condición se evalúa al final de la ejecución del cuerpo del bucle. Por esta razón, las instrucciones se ejecutan al menos una vez. (punto 1.7). 1 2.Tipos de estructuras de control Cada una de las estructuras de control las representaremos de dos formas: con pseudocódigo y con diagramas de flujo:  Pseudocódigo: Es una aproximación a la codificación final de la solución al problema planteado sin utilizar ningún lenguaje de programación específico.  Diagramas de flujo: Conjunto de símbolos que detallan la secuencia de instrucciones que debe realizar el ordenador para resolver un problema. Básicamente se utilizan dos símbolos: el rombo (simboliza una condición) y el cuadrado (simboliza una sentencia). Finalmente para cada una de las estructuras se dará un ejemplo en lenguaje C. 2.1.Sentencia if Si sentencia es compuesta tenemos: if (expresión) { sentencia 1 sentencia 2 . sentencia N } Expresión NO Sentencias 2 Funcionamiento: Si la expresión es verdadera se ejecuta el conjunto de sentencias, en caso contrario no se ejecuta ninguna. Notas:  Es obligatorio introducir la expresión entre paréntesis.  Si sólo hay una sentencia no son necesarias las llaves. Ejemplo: Pedir un número por teclado y comprobar si el número es positivo. #include int main() { int a; printf("dame un entero\n"); scanf("%d",&a); if (a>0) { printf("El número es mayor que 0\n"); } } Explicación:  Se incluye la librería stdio.h porque se utilizan las funciones printf y scanf para escribir datos por pantalla y leer datos del teclado respectívamente.  La variable a será en la que leamos el entero.  En la instrucción scanf se pone un %d porque lo que se va a leer es un entero. 3 2.2.Sentencia if-else La forma general de esta sentencia es: if (expresión) { Sentencias A } Else { Sentencias B } Expresión NO Sentencias A Sentencias B Funcionamiento:  Si la expresión es verdadera (valor distinto de 0), entonces se ejecuta las sentencias A y en caso contrario se ejecutan las sentencias B. Nota:  Es obligatorio introducir la expresión entre paréntesis.  Si las sentencias A o las sentencias B son sólo una instrucción no son necesarias las llaves. 4 Ejemplo: Vamos a mejorar el ejemplo de la estructura if, pero en este caso si el número es menor o igual que 0 se lanzará un mensaje informando al usuario. #include int main() { int a; printf("dame un entero\n"); scanf("%d",&a); if (a>0) { printf("El número es mayor que 0\n"); } Else { printf("El número es menor o igual que 0\n"); } } Explicación:  Si se cumple la primera condición se mostrará el primer mensaje (el número es mayor o igual que 0) y ya se acabará el programa.  En caso de no cumplirse la condición será cuando se entre en el bloque del else. Es entonces cuando se mostrará el mensaje indicando que el número es menor o igual que 0. 5 2.3.Sentencia if – else if La forma general de esta sentencia es: if (expresión A) { Sentencias A } Else if (expresión B) { Sentencias B } . . . Else { Sentencias C } Exp. A SI NO Sentencias A Exp. B NO SI Sentencias B Sentencias C 6 Funcionamiento:  Si la expresión A es verdadera (valor distinto de 0), entonces se ejecuta las sentencias A.  En caso contrario se comprueba la expresión B y si es verdadera se ejecutan las sentencias B.  Se podrían encadenar tantas sentencias else-if como se desease.  Finalmente si ninguna se cumple se ejecutarán las sentencias C Nota:  Se pueden encadenar tantos if – else if como se deseen.  Si una expresión se cumple ya no se evaluarán el resto de expresiones. 7 Ejemplo: Realizar un programa en el que se le pida al usuario una nota y la devuelva según el siguiente formato: [0-5): suspenso [5-6): aprobado [6-7): bien [7-9): notable [9-10]: sobresaliente #include void main() { Float nota; printf("Dame la nota\n"); scanf("%f",¬a); if (nota>=0 && nota<5 ) { printf (“Suspenso\n"); } else if (nota>=5 && nota<6) { printf (“Aprobado\n"); } else if (nota>=6 && nota<7) { printf (“Bien\n"); } else if (nota>=7 && nota<9) { printf (“Notable\n"); } else if (nota>=9 && nota<=10) { printf (“Sobresaliente\n"); } else { printf (“Introduzca la nota correctamente\n"); } } 8 Explicación:  En cada una de las expresiones se tiene en cuenta si los extremos están incluidos. Para entendernos, si tomamos como ejemplo el caso del aprobado, como el 6 se considera como bien en la expresión se pone <. Sin embargo como el 5 si se considera aprobado se pone >=.  En el ejemplo se puede ver que si un usuario introduce un número que no está comprendido entre 0 y 10 como no se cumplirá ninguno mostrará el mensaje del bloque “else” informando qué introduzca el número correctamente. 9 2.4.Sentencia switch La forma general de esta sentencia es: switch (expresión) { case valor 1: { sentencias A; break; } case valor 2: { sentencias B; break; } case valor N: { sentencias C; break; } default: { sentencias por defecto. } } Exp. Valor 1 Sentencias A Valor 2 Sentencias B Valor N Sentencias N Sentencias Por defecto 10 Funcionamiento:  expresión puede ser un valor entero, pero también puede ser de tipo char.  Si la expresión tiene el valor 1 entonces se ejecutan las sentencias A, si tiene el valor 2 se ejecutan las sentencias B, si tiene el valor N se ejecutan las sentencias N y finalmente, si no tiene ningún valor se ejecutan las sentencias por defecto. Notas:  Siempre hay que poner al final de cada “case” la instrucción “break”, ya que en caso contrario se seguirán ejecutando las sentencias interiores.  En cada bloque “case” se pueden o no poner llaves englobando el código.  El bloque default no es obligatorio. Se puede prescindir de él. 11 Ejemplo: Programa que pida un número al usuario comprendido entre el 1 y el 7 e informe del día de la semana que corresponde (1-lunes, 2-martes y así sucesivamente hasta el 7-domingo). #include int main() { int a; printf("dame el número de la semana:\n"); scanf("%d",&a); switch (a) { case 1: printf("Lunes\n"); break; case 2: printf("Martes\n"); break; case 3: printf("Miércoles\n"); break; case 4: printf("Jueves\n"); break; case 5: printf("Viernes\n"); break; case 6: printf("Sábado\n"); break; case 7: printf("Domingo\n"); break; default: printf("Has introducido un número incorrecto"); } } 12 2.5.Sentencia for La forma general de esta sentencia es: for (expresión 1; expresión 2; expresión 3) { sentencias; } Expresión 1 Expresión 3 .2 No Si Sentencias Funcionamiento:  Inicialmente se ejecuta expresión 1, se hace para inicializar algún parámetro que controla la repetición del bucle.  expresión 2 es una condición que debe ser cierta para que se ejecute sentencia.  expresión 3 se utiliza para modificar el valor del parámetro.  El bucle se repite mientras expresión 2 sea cierto.  Si sentencia es compuesta se encierra entre { }.  Si se omite expresión 2 se asumirá el valor permanente de 1 y el bucle se ejecutará de forma indefinida (bucle infinito). 13 Ejemplo: Mostrar la palabra hola n veces, siendo n un número leído por teclado. #include int main() { int i,n; printf("dame el número de veces:\n"); scanf("%d",&n); for (i=1;i<=n;i++) { printf("hola\n"); } } Explicación:  La variable i se utiliza como contador, va desde 1 hasta n, siendo n el número que se pide por teclado.  Se inicializa en 1 y en cada iteración se incrementa en una unidad.  Se ejecutará la sentencia printf mientras se cumpla la condición i<=n. 14 2.6.Sentencia while La forma general de esta sentencia es: while (expresión) { sentencias; } Si Sentencias Exp Funcionamiento:  Sentencias se ejecutará mientras el valor de expresión sea verdadero.  Primero se evalúa expresión.  Lo normal es que sentencia incluya algún elemento que altere el valor de expresión proporcionando así la condición de salida del bucle.  Si no se cumple la condición las sentencias nunca se ejecutarán. 15 Ejemplo: Mostrar los números de 3 cifras que sean múltiplos de 7. #include int main() { int i; i=100; while (i<=999) { if (i%7==0) { printf("el numero %d es múltiplo de 7\n",i); } i=i+1; } } Explicación:  Los números de 3 cifras son aquellos que van desde 100 hasta 999, por eso la i empieza en 100 y siempre se comprueba en la expresión que sea menor que 999.  En cada paso incrementamos el valor de i en 1. De esta forma iremos recorriendo todos los números desde 100 hasta 999 uno a uno.  Para saber si un número es múltiplo de 7 utilizamos el operador %, que nos da el resto de la división entera. Si ese resto es cero, entonces se cumple la condición. 16 2.7.Sentencia do-while La forma general de esta sentencia es: Do { sentencias; } while (expresión); Sentencias Si Valor defecto No Funcionamiento:  sentencias se ejecutará mientras el valor de expresión sea verdadero.  sentencias siempre se ejecuta al menos una vez. Para la mayoría de las aplicaciones es mejor y más natural comprobar la condición antes de ejecutar el bucle, por ello se usa más la sentencia while, si bien esta sentencias es muy utilizada para validar la entrada de ciertos números o para crear menús. 17 Ejemplos: Pedir un número positivo por teclado. #include int main() { int n; do { printf("dame número positivo"); scanf("%d",&n); } while (n<=0); } Funcionamiento:  El número se pide hasta que sea positivo, es decir, mientras sea negativo hay que seguir pidiéndolo.  Las sentencias se ejecutan al menos una vez, al contrario que con la estructura while, en la que si la expresión no era verdadera no se ejecutaban ninguna vez las expresiones. 18