Documente Academic
Documente Profesional
Documente Cultură
GUIÓN DE PRÁCTICAS 3:
ESTRUCTURAS CONDICIONALES
Introducción.
En este guión vamos a introducir aquellas estructuras en C que nos permiten
seleccionar qué parte del código queremos que se ejecute. A este tipo de estructuras
se les denomina estructuras condicionales o selectivas.
Selección simple.
Vamos a comenzar con un ejemplo que nos calcula el valor absoluto de un entero.
#include <stdio.h>
#include <stdlib.h>
/* Leer entradas. */
printf( "Introduzca un numero entero:" );
scanf("%i", &valor);
system("PAUSE");
}
Página 1 de 9
Guión de prácticas Estructuras condicionales
A estas alturas debes ser capaz de diferenciar las partes más simples del código,
como:
• La inclusión de librerías (include).
• La declaración del programa principal (main).
• La declaración de variables (entradas y salidas).
• Las instrucciones de entrada y salida (scanf, printf).
• La asignación (=).
• Los comentarios.
Además de todas esas secciones, podemos comprobar que se ha utilizado una nueva:
if( condición )
bloque_de_sentencias
donde:
condición: es cualquier expresión que genere un valor lógico (verdadero o
falso)
bloque_de_sentencias: puede ser:
Una única sentencia terminada en punto y coma.
Una o más sentencias encerradas entre llaves ({}).
Ejercicio:
Página 2 de 9
Guión de prácticas Estructuras condicionales
Esta estructura tiene una parte opcional, que es la parte SI_NO (else), esta parte se
ejecuta sólo cuando la condición es falsa.
if( condición )
bloque_de_sentencias_1
else
bloque_de_sentencias_2
Ejercicios:
• Haz un programa que lea dos números y los muestre por pantalla de forma
ordenada (primero el mayor de ellos).
• Haz otro programa que lea dos letras y las muestre por orden alfabético.
• Crea un programa que calcule la diferencia en valor absoluto de dos
números.
#include <stdio.h>
#include <stdlib.h>
/* Leer entradas. */
printf( "Introduzca dos valores enteros: " );
scanf("%i %i", &a, &b);
printf( "Desea (s)umarlos o (r)estarlos: " );
fflush(stdin);
scanf("%c", &opcion);
/* Mostrar el resultado. */
if( opcion != 'n' ){
printf( "El resultado es: %i\n", resultado);
} else {
printf( "La opcion elegida no es valida\n");
}
Página 3 de 9
Guión de prácticas Estructuras condicionales
system("PAUSE");
}
Este programa lee dos enteros por teclado y realiza una operación con ellos (sumarlos
o restarlos), dependiendo del carácter dado como opción (‘s’ o ‘r’). Si el usuario no
introduce una opción válida, el programa dará un mensaje de error. Para ello hemos
anidado dos if, es decir, dentro de la parte else del primer condicional hemos
incluido otro condicional.
if (condición_1)
bloque_de_sentencias_1
else if (condición_2)
bloque_de_sentencias_2
...
else if (condición_n)
bloque_de_sentencias_n
else
bloque_de_sentencias_n+1
¿Has probado a introducir una ‘S’ mayúscula?. ¿Qué ocurre en dicho caso?.
En la primera condición del código dado se puede observar una comparación entre
una variable (opcion) y un valor constante ('s'):
NOTA: Un error muy frecuente es poner “=” a la hora de comparar. En C el símbolo ‘=’
se utiliza para asignar valores, por lo que el compilador no señalaría dicho error.
Página 4 de 9
Guión de prácticas Estructuras condicionales
Con esta información podemos cambiar el primer condicional para que también
compare con la ‘S’ mayúscula, dejándolo de la siguiente manera:
Ejercicios:
• Modifica el código para que también acepte la ‘R’ mayúscula para restar.
• Añade las instrucciones necesarias para que además se pueda elegir entre
sumar, restar, multiplicar o dividir.
Condicionales compuestos.
En muchas ocasiones tenemos que realizar una comparación de un mismo valor con
varios elementos distintos. Hasta el momento la única solución viable es realizar varios
condicionales simples (if) de forma anidada (o sin anidar si las condiciones son muy
estrictas).
Existe otra estructura condicional que nos puede solucionar el problema. Se trata de la
sentencia switch que se utiliza para seleccionar una de entre múltiples alternativas.
Observa el siguiente código:
#include <stdio.h>
#include <stdlib.h>
/* Leer entradas. */
printf( "Introduzca dos valores enteros: " );
scanf("%i %i", &a, &b);
printf( "\n(s) Sumar.\n");
printf( "(r) Restar.\n");
printf( "(m) Multiplicar.\n");
printf( "Elija una opción del menú:\n" );
fflush(stdin);
scanf("%c", &opcion);
Página 5 de 9
Guión de prácticas Estructuras condicionales
Con esta nueva estructura (switch), podemos comparar un elemento con varios
valores. En este caso el elemento que se compara, denominado selector, es la
variable opcion. La sintaxis es la siguiente:
switch (selector)
{
case etiqueta_1: sentencias_1;
case etiqueta_2: sentencias_2;
...
case etiqueta_n: sentencias_n;
default: sentencias_d; //opcional
}
Se utiliza la palabra case para indicar el valor con el que queremos comparar, es
decir, el caso que queremos procesar. En este caso, los valores van entre comillas
simples porque son caracteres, si fueran valores constantes enteros pondríamos
simplemente el número, por ejemplo:
…
case 1:
printf( "%i + %i = %i\n", a, b, a+b);
break;
case 2:
…
En cada uno de los casos hay que indicar cuándo se acaba, y para ello ponemos la
palabra reservada break. Si no pusiéramos dicha palabra, continuaría con la
ejecución de los siguientes casos hasta que se encontrara con el fin del switch o
con un break. Por este motivo, no hace falta poner break en el último de los casos.
Por tanto, la sintaxis del switch con break, es la siguiente:
switch (selector)
{
case etiqueta_1: sentencias_1;
break;
case etiqueta_2: sentencias_2;
break;
...
case etiqueta_n: sentencias_n;
break;
default: sentencias_d; //opcional
}
Podemos utilizar esta forma de actuar (poniendo o quitando el break) según nos
convenga. Modifica el primer caso incluyendo una nueva instrucción para que quede
así:
case 'S':
Página 6 de 9
Guión de prácticas Estructuras condicionales
case 's':
printf( "%i + %i = %i\n", a, b, a+b);
break;
Ejercicio:
default:
printf( "La opción elegida no es válida\n");
Este es el caso por defecto, y como le ocurre a la parte SI_NO del condicional, es
totalmente opcional. Este caso se ejecuta solamente si no se ha ejecutado ninguno de
los casos anteriores.
Ejercicios:
Página 7 de 9
Guión de prácticas Estructuras condicionales
Recuerda.
● Es útil utilizar identación (tabulado) del código, para poder observar qué
instrucciones dependen de otras.
• La parte “SI_NO” (else) de un condicional “SI” (if) es opcional.
• Para realizar una comparación de igualdad se utiliza un doble igual (==).
• La estructura switch sólo permite realizar comparaciones de igualdad.
• El caso default de la instrucción switch es opcional.
Ejercicios finales.
1. Necesitamos un programa que ordene 3 números de mayor a menor.
4. Diseñar un algoritmo que lea tres número enteros y muestre el mayor de ellos.
5. Diseñar un algoritmo que lea las longitudes de los tres lados de un triángulo
(L1,L2,L3) y determine qué tipo de triángulo es, de acuerdo a los siguientes
casos. Suponiendo que A determina el mayor de los tres lados y B y C
corresponden con los otros dos, entonces:
Si A2 = B2 + C2 Es un triángulo rectángulo
ax + by = c
dx + ey = f
ce − bf af − cd
x= y=
ae − bd ae − bd
Página 8 de 9
Guión de prácticas Estructuras condicionales
(expresado en pies por segundo), ignorando la resistencia del aire, viene dada
por la fórmula:
Velocidad2∗seno2∗Angulo
Distancia=
32.2
0-6.000 20%
6.000-7.900 10%
7.900-12.000 5%
más de 12.000 0%
Página 9 de 9