Documentos de Académico
Documentos de Profesional
Documentos de Cultura
p03 Condicionales PDF
p03 Condicionales PDF
Estructuras condicionales
GUIN DE PRCTICAS 3:
ESTRUCTURAS CONDICIONALES
Introduccin.
En este guin vamos a introducir aquellas estructuras en C que nos permiten
seleccionar qu parte del cdigo queremos que se ejecute. A este tipo de estructuras
se les denomina estructuras condicionales o selectivas.
Seleccin simple.
Vamos a comenzar con un ejemplo que nos calcula el valor absoluto de un entero.
#include <stdio.h>
#include <stdlib.h>
/* Programa que calcula el valor absoluto de un entero.*/
int main( void ){
/* ENTRADAS */
int valor;
/* SALIDAS */
int absoluto;
/* Leer entradas. */
printf( "Introduzca un numero entero:" );
scanf("%i", &valor);
/* Calcular el valor absoluto. */
absoluto = valor;
if( absoluto < 0 ){
absoluto = -absoluto;
}
/* Mostrar el valor. */
printf( "El valor absoluto de %i es %i\n", valor, absoluto);
system("PAUSE");
Pgina 1 de 9
Guin de prcticas
Estructuras condicionales
donde:
condicin: es cualquier expresin que genere un valor lgico (verdadero o
falso)
bloque_de_sentencias: puede ser:
Una nica sentencia terminada en punto y coma.
Una o ms sentencias encerradas entre llaves ({}).
Ejercicio:
valor absoluto. */
0 ){
-valor;
valor;
Pgina 2 de 9
Guin de prcticas
Estructuras condicionales
Esta estructura tiene una parte opcional, que es la parte SI_NO (else), esta parte se
ejecuta slo cuando la condicin es falsa.
La estructura de una sentencia if-else es:
if( condicin )
bloque_de_sentencias_1
else
bloque_de_sentencias_2
Ejercicios:
Haz un programa que lea dos nmeros 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 alfabtico.
Crea un programa que calcule la diferencia en valor absoluto de dos
nmeros.
Pgina 3 de 9
Guin de prcticas
Estructuras condicionales
system("PAUSE");
}
Este programa lee dos enteros por teclado y realiza una operacin con ellos (sumarlos
o restarlos), dependiendo del carcter dado como opcin (s o r). Si el usuario no
introduce una opcin vlida, 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.
Anidar condicionales en C es muy sencillo, aunque a veces no es fcil de visualizar.
Para ello, intenta siempre tener el mismo estilo de programacin. En este caso, la
sintaxis es la siguiente:
if (condicin_1)
bloque_de_sentencias_1
else if (condicin_2)
bloque_de_sentencias_2
...
else if (condicin_n)
bloque_de_sentencias_n
else
bloque_de_sentencias_n+1
Operador en C
==
!=
>
>=
<
<=
&&
||
!
Ejemplo en C
2==3
2!=3
2>3
2>=3
2<3
2<=3
(2<3) && (3<4)
(2<3) || (3<4)
!(2>3)
Pgina 4 de 9
Resultado
Falso
Verdadero
Falso
Falso
Verdadero
Verdadero
Verdadero
Verdadero
Verdadero
Guin de prcticas
Estructuras condicionales
Con esta informacin podemos cambiar el primer condicional para que tambin
compare con la S mayscula, dejndolo de la siguiente manera:
if( opcion == 's' || opcion == 'S' ){
Ejercicios:
Condicionales compuestos.
En muchas ocasiones tenemos que realizar una comparacin de un mismo valor con
varios elementos distintos. Hasta el momento la nica solucin 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 mltiples alternativas.
Observa el siguiente cdigo:
#include <stdio.h>
#include <stdlib.h>
int main( void ){
/* ENTRADAS */
int a=0, b=0;
char opcion;
/* 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 opcin del men:\n" );
fflush(stdin);
scanf("%c", &opcion);
/* Mostrar el resultado segn la opcin. */
switch( opcion ){
case 's':
printf( "%i + %i = %i\n", a, b, a+b);
break;
case 'r':
printf( "%i - %i = %i\n", a, b, a-b);
break;
case 'm':
printf( "%i * %i = %i\n", a, b, a*b);
break;
default:
printf( "La opcin elegida no es vlida\n");
}
system("PAUSE");
}
Pgina 5 de 9
Guin de prcticas
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
}
case 1:
printf( "%i + %i = %i\n", a, b, a+b);
break;
case 2:
En cada uno de los casos hay que indicar cundo se acaba, y para ello ponemos la
palabra reservada break. Si no pusiramos dicha palabra, continuara con la
ejecucin 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) segn nos
convenga. Modifica el primer caso incluyendo una nueva instruccin para que quede
as:
case 'S':
Pgina 6 de 9
Guin de prcticas
Estructuras condicionales
case 's':
printf( "%i + %i = %i\n", a, b, a+b);
break;
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:
Pgina 7 de 9
Guin de prcticas
Estructuras condicionales
Recuerda.
Ejercicios finales.
1. Necesitamos un programa que ordene 3 nmeros de mayor a menor.
2. Crear un programa capaz de leer un valor entero y de determinar si se trata de
un nmero par o impar.
3. Realizar un programa capaz de leer dos valores enteros, m y n, y determine si
m divide a n.
4. Disear un algoritmo que lea tres nmero enteros y muestre el mayor de ellos.
5. Disear un algoritmo que lea las longitudes de los tres lados de un tringulo
(L1,L2,L3) y determine qu tipo de tringulo 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 A>=B + C
No se trata de un tringulo
Si A2 = B2 + C2
Es un tringulo rectngulo
Si A2 > B2 + C2
Es un tringulo obtusngulo
Si A2 < B2 + C2
Es un tringulo acutngulo
x=
ce bf
ae bd
y=
af cd
ae bd
Pgina 8 de 9
Guin de prcticas
Estructuras condicionales
(expresado en pies por segundo), ignorando la resistencia del aire, viene dada
por la frmula:
Velocidad2seno2Angulo
Distancia=
32.2
Escribir un algoritmo que realice un juego en el que el usuario introduce
primero la distancia a una diana. Luego el usuario introduce el ngulo y la
velocidad de lanzamiento de un proyectil. Si el proyectil cae dentro de un diez
por ciento de la distancia a la diana, el usuario gana el juego. Si el proyectil no
se acerca lo suficiente, se le dice al usuario cunto se ha alejado el proyectil.
Para simplificar las entradas del usuario, el programa debe permitir que el
ngulo de la entrada se d en grados. La frmula para convertir los grados en
radianes es
Radianes = Grados * PI / 180.0
8. Un equipo de ftbol ha tenido una buena campaa y desea premiar a sus
jugadores con un aumento del salario para la siguiente campaa. Los sueldos
deben ajustarse de la siguiente forma:
Sueldo actual (en )
Aumento
0-6.000
20%
6.000-7.900
10%
7.900-12.000
5%
ms de 12.000
0%
Pgina 9 de 9