Está en la página 1de 9

Guin de prcticas

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");

NOTA: Para facilitar la visualizacin, compresin y el reconocimiento del cdigo


hemos utilizado varias tcnicas:

Resaltado de sintaxis: los colores usados para las palabras.


Identacin del cdigo (tabulado): escribir ms a la derecha las instrucciones
que estn dentro o dependen de otras, por ejemplo:
o La instruccin absoluto = -absoluto; est ms a la derecha que
el if anterior para resaltar que slo se ejecuta si ese if es
verdadero.
o Todo el cdigo del programa principal est ms a la derecha que la
declaracin de las libreras y la definicin del propio programa principal.
Comentarios. Comentar el cdigo nos ayuda a la compresin del mismo.

Pgina 1 de 9

Guin de prcticas

Estructuras condicionales

El resaltado de la sintaxis lo hace automticamente cualquier editor de cdigo C (por


ejemplo el C-Free o el Dev C++), sin embargo, la identacin del cdigo y los
comentarios los tenemos que realizar nosotros.
A estas alturas debes ser capaz de diferenciar las partes ms simples del cdigo,
como:
La inclusin de libreras (include).
La declaracin del programa principal (main).
La declaracin de variables (entradas y salidas).
Las instrucciones de entrada y salida (scanf, printf).
La asignacin (=).
Los comentarios.
Adems de todas esas secciones, podemos comprobar que se ha utilizado una nueva:
if( absoluto < 0 ){
absoluto = -absoluto;
}

Esto es lo que llamamos un condicional simple. Si se cumple la condicin dada entre


parntesis ( absoluto < 0 ) el cdigo que hay entre las llaves ({}) se ejecutar,
para despus continuar con lo que hay despus de cerrar la llave (}). Si no se cumple
continuar la ejecucin a partir de la llave de cierre (}).
La estructura de una sentencia if es:
if( condicin )
bloque_de_sentencias

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:

Modifica el cdigo anterior para convertir el bloque de sentencias del if en


una sola sentencia.

Seleccin simple con parte si no.


La seccin Calcular el valor absoluto del cdigo anterior podra reescribirse as:
/* Calcular el
if( absoluto <
absoluto =
} else {
absoluto =
}

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.

Anidamiento y operadores lgicos.


Observa el siguiente cdigo:
#include <stdio.h>
#include <stdlib.h>
int main( void ){
/* ENTRADAS */
int a=0, b=0;
char opcion;
/* SALIDAS */
int resultado=0;
/* Leer entradas. */
printf( "Introduzca dos valores enteros: " );
scanf("%i %i", &a, &b);
printf( "Desea (s)umarlos o (r)estarlos: " );
fflush(stdin);
scanf("%c", &opcion);
/* Seleccionar la operacin elegida. */
if( opcion == 's' ){
resultado = a + b;
} else {
if( opcion == 'r' ){
resultado = a - b;
} else {
opcion = 'n';
}
}
/* Mostrar el resultado. */
if( opcion != 'n' ){
printf( "El resultado es: %i\n", resultado);
} else {
printf( "La opcion elegida no es valida\n");
}

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

Compila, ejecuta y prueba el programa anterior.


Has probado a introducir una S mayscula?. Qu ocurre en dicho caso?.
En la primera condicin del cdigo dado se puede observar una comparacin entre
una variable (opcion) y un valor constante ('s'):
if( opcion == 's' ){

Como puedes comprobar la forma de comparar dos valores es utilizando la doble


igualacin (==). Esto significa que los dos valores van a compararse, dando como
resultado un valor lgico.
NOTA: Un error muy frecuente es poner = a la hora de comparar. En C el smbolo =
se utiliza para asignar valores, por lo que el compilador no sealara dicho error.
En la siguiente tabla se muestran los operadores lgicos y relacionales, y su
conversin a C:
Operador
Igualdad (=)
Distinto ()
Mayor (>)
Mayor o igual ()
Menor (<)
Menor o igual ()
Y (and)
O (or)
NO (not)

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:

Modifica el cdigo para que tambin acepte la R mayscula para restar.


Aade las instrucciones necesarias para que adems se pueda elegir entre
sumar, restar, multiplicar o dividir.

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
}

NOTA: Resaltar que con un switch slo podemos realizar comparaciones de


igualdad, por lo tanto, NO se puede comparar si el valor dado es mayor o menor que
otro o realizar operaciones lgicas.
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 pondramos
simplemente el nmero, 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 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;

El primer caso (el de la S mayscula) no tiene instrucciones, pero tampoco tiene


break, por lo tanto ejecutar las rdenes que hay en el siguiente caso (el de la s
minscula).
Ejercicio:

Modifica el cdigo para que permita elegir cualquier opcin indicando la


letra tanto en minscula como en mayscula.

El ltimo caso que hay en el cdigo es:


default:
printf( "La opcin elegida no es vlida\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:

Modifica el cdigo para que no muestre ningn resultado si la opcin


elegida es incorrecta.
Cambia las partes necesarias del cdigo para que las opciones se
seleccionen utilizando nmeros enteros.

Pgina 7 de 9

Guin de prcticas

Estructuras condicionales

Recuerda.

Es til utilizar identacin (tabulado) del cdigo, para poder observar qu


instrucciones dependen de otras.
La parte SI_NO (else) de un condicional SI (if) es opcional.
Para realizar una comparacin de igualdad se utiliza un doble igual (==).
La estructura switch slo permite realizar comparaciones de igualdad.
El caso default de la instruccin switch es opcional.

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

6. Un sistema de ecuaciones lineales de la forma:


ax + by = c
dx + ey = f
puede resolverse utilizando las siguientes frmulas:

x=

ce bf
ae bd

y=

af cd
ae bd

Disear un algoritmo para leer los dos conjuntos de coeficientes (a, b y c, y d, e


y f) e imprimir los valores que son solucin para x e y. Existen algunos casos
para los cuales este algoritmo no funcione?.
7. La distancia del punto de cada de un proyectil que es lanzado con un ngulo
Angulo (expresado en radianes) con una velocidad inicial de Velocidad

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%

Disear un algoritmo que lea el salario de un jugador, y que a continuacin


muestre el tanto por ciento de aumento, el sueldo actual y el sueldo
aumentado.
9. Disea un algoritmo al que se de como entradas dos enteros y un carcter. El
algoritmo deber sumar, restar, multiplicar o dividir los valores de los dos
primeros parmetros dependiendo del cdigo indicado en el tercer parmetro, y
devolver el resultado.

Pgina 9 de 9

También podría gustarte