1.9. SENTENCIAS DE CONTROL DE PROGRAMA En C todas las instrucciones o sentencias terminan en punto y coma (;) Un bloque se compone de varias instrucciones o sentencias encerradas entre llaves. Las estructuras secuencial, alternativas y repetitivas se les denomina estructuras de control debido a que controlan el modo de ejecución del programa. 1.9.1. Estructura Secuencial La estructura secuencial puede estar formada por sentencias o instrucciones simples o por bloques de instrucciones. EJEMPLO: instrucción 1; instrucción 2; instrucción 3; instrucción 4; instrucción 5; 1.9.2. Estructuras Alternativas: if, if-, switch 1.9.2.1.- Estructura Alternativa Simple: if SINTAXIS 1: if (exp_logica) sentencia; sentencia sólo se ejecutará cuando sea cierta (es decir, se cumpla) la expresión lógica exp_logica. SINTAXIS 2:
if (exp_logica) sentencia_2;... sentencia_n; En este caso las sentencias de la 1 a la n (simples o compuestas) sólo se ejecutan cuando se cumpla la expresión lógica exp_logica ; en otro caso, no se ejecutan, las salta. Si la expresión lógica del if es cierta (DISTINTO DE 0), la sentencia o sentencias que incluya el if se ejecutarán. Si la expresión lógica del if es falsa (CERO), el if se salta y se continúa la ejecución con la siguiente sentencia del programa. Dentro del if y del, en C si hay más de una instrucción, éstas deben ir entre llaves. La expresión debe ir escrita SIEMPRE entre PARÉNTESIS EJEMPLO DE USO void main(void ) char x; printf( Introduzca una letra--> ); x=getchar( ); if ((x>= A ) && (x<= Z )) printf( HAS ESCRITO UNA LETRA MAYÚSCULA ); printf( \nintroduzca otra letra--> ); scanf( %c,&x); if (x== m ) printf( HAS ESCRITO UNA %c,x);
1.9.2.2. Estructura Alternativa Doble: if- SINTAXIS 1: if (exp_logica) sentencia_2; Se ejecuta la sentencia_1 (simple o compuesta) si se cumple la expresión lógica y se ejecuta la sentencia_2 si no se cumple la expresión lógica. SINTAXIS 2: if (exp_logica) sentencia_2;... sentencia_n; sentencia_a;... sentencia_z; En este caso, se ejecutan las sentencias desde la sentencia_1 a la sentencia_n si se cumple la expresión lógica y se ejecutan las sentencias desde la sentencia_a a la sentencia_z si no se cumple la expresión lógica. Dentro del if y del, en C si hay más de una instrucción, éstas deben ir entre llaves. La expresión debe ir escrita SIEMPRE entre PARÉNTESIS Los if pueden ir anidados, es decir, uno dentro de otro Ejemplo: Programa que escribe la palabra POSITIVO si el valor de una variable A es mayor que 0, NEGATIVO si es menor que 0 y NULO si es 0.
int A; printf( Introducir el valor de A ); scanf( %d, &A); if (A>0) printf( POSITIVO ); if (A<0) printf( NEGATIVO ); printf( NULO ); EJEMPLO DE USO char x; printf( Introduzca una letra--> ); x=getchar( ); if ((x>= A ) && (x<= Z )) printf( HAS ESCRITO UNA LETRA MAYÚSCULA ); printf( HAS ESCRITO UN CARÁCTER QUE NO ES UNA LETRA MAYÚSCULA ); EJEMPLO DE USO 2: sentencias IF anidadas: char x; printf( Introduzca una letra--> ); x=getchar( ); if (x== a ) printf( Has tecleado la primera letra del alfabeto\n ); if (x== z )
printf( Has tecleado la última letra del alfabeto\n ); if ((x>= A ) && (x<= Z )) printf( Has tecleado una letra mayúscula\n ); printf( Has tecleado otra letra\n ); 1.9.2.3. Estructura Alternativa Múltiple: switch La sentencia switch hace que se seleccione un grupo de sentencias entre varios grupos disponibles. SINTAXIS: donde: switch (expresión) case constante1:... sentencia_n; case constante2: sentencia_a;... sentencia_z;... default: sentencias; 1) Expresión: debe ser una expresión que nos devuelva un ENTERO O CARÁCTER. 2) Constante1, constante2,...: deben ser constantes ENTERAS O CARÁCTER.
CÓMO FUNCIONA EL switch?: 1º) La sentencia SWITCH evalúa la expresión escrita entre paréntesis y compara su valor con las constantes de cada CASE. 2º) Si encuentra un CASE cuya constante coincida con el valor de la expresión entre paréntesis del switch, empieza a ejecutar las sentencias de ese CASE y no para al llegar al siguiente CASE, sino que sigue ejecutando las sentencias que haya hasta el final del switch, o hasta encontrar un BREAK. Por eso es muy importante poner BREAK al final de cada CASE. 3º) Si no encuentra ningún CASE cuya constante coincida, intentará ejecutar las sentencias que hubiese bajo la etiqueta DEFAULT. Si no existe la etiqueta DEFAULT, entonces, no hace nada el switch y pasaría a ejecutarse la sentencia que se encuentre después del switch. EJEMPLO DE USO: void main(void ) int mes; printf( INTRODUZCA UN MES CON Nº: ); scanf( %d,&mes); switch (mes) case 1: case 2: case 3: case 4: default: printf( Su mes es ENERO\n ); printf( Su mes es FEBRERO\n ); printf( Su mes es MARZO\n ); printf( Su mes es ABRIL\n ); printf( SÓLO LE INFORMO HASTA ABRIL\n );
OTRO EJEMPLO DE USO: Programa que lee un carácter y escribe la palabra ROJO si el carácter leído es R, BLANCO si el carácter leído es B y AZUL si el carácter leído es A. Si no se introduce ninguno de estos caracteres, debe visualizar un mensaje de error: char color; printf( Introducir un color ); color=getchar(); switch (color) case R : printf( ROJO ); case B : printf( BLANCO ); case A : printf( AZUL ); default : printf( Carácter erróneo ); 1.9.3. Estructuras Repetitivas: while, do-while, for Las estructuras repetitivas se utilizan para generar bucles, es decir, para repetir la ejecución de una o más sentencias varias veces. 1.9.3.1.- Estructura Repetitiva: while o mientras La sentencia o sentencias incluidas en este bucle se ejecutarán repetidamente, MIENTRAS el valor de expresión sea verdadero (es decir, distinto de CERO). La sentencia incluida en el bucle puede ser simple o compuesta y debe incluir algún elemento que altere el valor de expresión lógica, proporcionando así la condición de salida del bucle.
SINTAXIS 1: while (expr_logica) sentencia; SINTAXIS 2: while(expr_lógica)... sentencia_n; CÓMO FUNCIONA EL BUCLE WHILE? 1º) Se evalúa la expresión_lógica de la cabecera del bucle. 2º) Si la expresión lógica es CIERTA (distinta de 0), se ejecutan la/s sentencia/s del CUERPO del while. Tras la última sentencia del cuerpo del bucle, se vuelve a la CABECERA a COMPROBAR DE NUEVO la expresión lógica o condición. 3º) Si la expresión lógica es FALSA (vale 0), el bucle while se salta y se pasa a ejecutar la instrucción siguiente al while. EJEMPLO DE USO: Programa que imprime los números del 1 al 100: int cont; cont=0; while(cont <100) cont++; printf( %d \n,cont);
OTRO EJEMPLO DE USO: Programa que pide y escribe caracteres hasta que se pulse la j : char a; a= \0 ; printf( INTRODUCE CARACTERES (j para terminar): ); while (a!= j ) a=getchar( ); putchar(a); 1.9.3.2.- Estructura Repetitiva: do-while o repetir-mientras Cuando se construye un bucle utilizando la sentencia while descrita en el apartado anterior, el test para la continuación del bucle se realiza al comienzo de cada pasada. Sin embargo, a veces es deseable disponer de un bucle en el que se realice el test al final de cada pasada. Esto se puede hacer mediante la sentencia do-while. SINTAXIS 1: do sentencia; while (expr_logica); SINTAXIS 2: do... sentencia_n; while (expr_lógica);
La sentencia o sentencias incluidas en el cuerpo del bucle se ejecutarán repetidamente, mientras el valor de expresión sea CIERTO (es decir, sea distinto de cero). La sentencia incluida en el bucle puede ser simple o compuesta y debe incluir algún elemento que altere el valor de expresión lógica, proporcionando así la condición de salida del bucle. Nótese que sentencia siempre se ejecutará al menos una vez, ya que el test de comprobación de la expresión_lógica que controla el bucle no se realiza hasta el final de la primera pasada por el bucle. CÓMO FUNCIONA EL BUCLE DO - WHILE? 1º) Se ejecutan la/s sentencia/s del CUERPO del bucle 2º) Se evalúa la expresión lógica que aparece al final del bucle. 3º) Si la expresión lógica es CIERTA (distinta de CERO), se ejecutan la/s sentencia/s del CUERPO del while OTRA VEZ. 4º) Si la expresión lógica es FALSA (es CERO), se pasa a ejecutar la instrucción siguiente al do-while. PERO EL CONTENIDO DEL CUERPO DEL DO-WHILE SE HABRÁ EJECUTADO UNA VEZ. EJEMPLO DE USO: Programa que imprime los números del 1 al 100: int cont; cont=0; do cont++; printf( %d \n,cont); while (cont<100); OTRO EJEMPLO DE USO: Programa que pide y escribe caracteres hasta que se pulse la j :
char a; a= \0 ; printf( INTRODUCE CARACTERES (j para terminar): ); do a=getchar( ); putchar(a); while (a!= j ); 1.9.3.3.- Estructura Repetitiva: for o para La sentencia for es quizá la más frecuentemente usada para crear bucles en C. Esta sentencia incluye: una expresión o inicialización que especifica el valor inicial de un índice; otra expresión o condición que determina cuando se continúa o no el bucle y una tercera expresión o actualización que permite que el índice se modifique al final de cada pasada. Su formato o sintaxis es: for(inicialización; condición; actualización) sentencia_2;... sentencia_n; CÓMO FUNCIONA EL BUCLE for? 4º) Si la expresión lógica es FALSA (es CERO), se pasa a ejecutar la instrucción siguiente al do-while. PERO EL CONTENIDO DEL CUERPO DEL DO-WHILE SE HABRÁ EJECUTADO UNA VEZ. 1º) Se ejecuta la INICIALIZACIÓN 2º) Se evalúa la CONDICIÓN. 3º) Si la condición es CIERTA (distinto de 0):
- Ejecuta las sentencias del CUERPO del for - Ejecuta la expresión de ACTUALIZACIÓN - Vuelve a evaluar la CONDICIÓN. 4º) Si la condición es FALSA (vale 0): el cuerpo del for no se ejecuta y se sale del for. Por tanto, la sentencia o sentencias incluidas en el cuerpo del bucle se ejecutarán repetidamente, mientras el valor de la condición que lleva el for en la cabecera sea CIERTO (es decir, sea distinto de cero). En un for se puede omitir: la inicialización, la condición y la actualización. Pero LOS ; DEBEN DEJARSE SIEMPRE. Por ejemplo, se podría poner: for (; ;) printf( hola ); EJEMPLO DE USO: Programa que imprime los números del 1 al 100: int cont; for (cont=0; cont<100; cont++) printf( %d \n,cont); OTRO EJEMPLO DE USO: Programa que pide y escribe caracteres hasta que se pulse la j : char a; printf( INTRODUCE CARACTERES (j para terminar): ); for (a= \0 ; a!= j ; a=getchar( )) putchar(a);