1. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M06 MICROCONTROLADORES I
Laboratorio: D-19
Duración: 2 Hs INSTRUCCIONES DE CONTROL
5.1. Instrucción if-else
Objetivos
1. Entender el funcionamiento de la estructura condicional if-else.
En la mayoría de los programas en C que hemos encontrado hasta el momento, las
instrucciones se ejecutaban en el mismo orden en que aparecían en el programa. Cada
instrucción se ejecutaba una única vez. Los programas que se suelen escribir en la prác-
tica no son tan sencillos como éstos, ya que los que hemos visto no incluyen ningún tipo
de elementos de control lógico. En particular, en estos programas no aparecen compro-
baciones de condiciones que sean verdaderas o falsas ni aparece la ejecución repetida de
grupos individuales de instrucciones de forma selectiva. La mayoría de los programas de
interés práctico hacen uso intenso de estos elementos.
Por ejemplo, muchos programas requieren que se efectúe una comprobación lógica
en algún punto concreto de los mismos. A continuación se realizará alguna acción que
dependerá del resultado del test lógico. Esto se conoce como ejecución condicional. Exis-
te también una clase especial de ejecución condicional, llamada selección, en la que se
selecciona un grupo de instrucciones entre varios grupos disponibles.
Introducción
Antes de considerar con detalle las instrucciones de control de las que se dispone en C,
revisemos algunos conceptos presentados en los Capítulos anteriores que se deben utilizar
en conjunción con estas instrucciones. Comprender estos conceptos es fundamental para
lo que sigue.
Primero necesitaremos formar expresiones lógicas que serán verdaderas o falsas. Para
hacer esto podemos utilizar los cuatro operadores relacionales, <, <=, >, >=, y los dos
operadores de igualdad, == y ! =.
EJEMPLO 5.1 A continuación se muestran varias expresiones lógicas.
cont <= 100
sqrt(a+b+c) > 0.005
respuesta == O
balance >= maximo
car1 < 'T'
letra != 'x'
Las cuatro primeras expresiones involucran operandos numéricos. Su signicado debe
resultar fácilmente comprensible.
En la quinta expresión, car1 se supone que es una variable de tipo carácter. Esta
expresión será verdadera si el carácter representado por car1 se encuentra antes de la
T en el juego de caracteres, esto es, si el valor numérico que se utiliza para codicar el
carácter es menor que el valor numérico utilizado para codicar la letra T.
Pedro Ramírez pedroramirez22@gmail.com 1
2. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M06 MICROCONTROLADORES I
Laboratorio: D-19
Duración: 2 Hs INSTRUCCIONES DE CONTROL
La última expresión hace uso de la variable de tipo carácter letra. Esta expresión
será verdadera si el carácter representado por letra es algún otro que no sea x.
Además de los operadores relacionales y de igualdad, C posee dos conectivas lógicas
(también llamadas operadores lógicos), (y) y || (o), y el operador unario de negación
!. Las conectivas lógicas se utilizan para combinar expresiones lógicas, formándose así
expresiones más complejas. El operador de negación se utiliza para invertir el valor de
una expresión lógica (por ejemplo, de verdadero a falso).
EJEMPLO 5.2 A continuación se muestran algunas expresiones lógicas que ilustran
la utilización de conectivas lógicas y del operador de negación.
(cont = 100) (car1 != '*')
(balance 1000.0) || (estado == 'R')
(respuesta 0) || ((respuesta 5. O) (respuesta = 10.0))
!((pagos = 1000.0) (estado == 's'))
5.1.1. EJECUCIÓN CONDICIONAL: LA INSTRUCCIÓN if-else
La instrucción if-else se utiliza para realizar una comprobación lógica y a con-
tinuación llevar a cabo una de dos posibles acciones, dependiendo del resultado de la
comprobación (de que sea verdadera o falsa).
La parte else de la instrucción if-else es opcional. Por tanto, las instrucciones se
pueden escribir, en su forma general más simple,
if (expresión) instrucción
La expresión se debe encontrar entre paréntesis, como se ha indicado. De esta forma,
la instrucción se ejecutará sólo si la expresión tiene un valor no nulo (si expresión
es verdadera). Si la expresión tiene el valor cero (si expresión es falsa), entonces se
ignorará la instrucción.
La instrucción puede ser simple o compuesta. En la práctica suele ser una instruc-
ción compuesta que puede incluir otras instrucciones de control.
EJEMPLO 5.3 A continuación se muestran varias instrucciones if representativas.
if (x 0) printf (%f, x);
if (debito 0)
credito = 0;
if (x = 3.0) {
y = 3 * pow(x, 2);
Pedro Ramírez pedroramirez22@gmail.com 2
3. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M06 MICROCONTROLADORES I
Laboratorio: D-19
Duración: 2 Hs INSTRUCCIONES DE CONTROL
printf( %fn, y);
}
if ((balance 1000.) || (estado == 'R'))
printf ( %f, balance);
if ((a = 0) (b = 5)) {
xmid = (a + b) / 2;
ymid = sqrt(xmid);
}
La primera instrucción hace que se imprima (visualice) el valor de la variable en
coma otante x si su valor es negativo. En la segunda instrucción, se asigna el valor cero
a credito si el valor de debito es mayor que cero. La tercera instrucción involucra una
instrucción compuesta en la que se evalúa y y a continuación se visualiza, si el valor de
x no excede de 3. En la cuarta instrucción tenemos una expresión lógica compleja, que
hace que el valor de balance se visualice si su valor es menor de 1000 o si estado tiene
asignado el valor R .
La última instrucción involucra una expresión lógica compleja y una instrucción com-
puesta. A las variables xmid e ymid se les asignarán, pues, valores apropiados sólo si el
valor actual de a es no negativo y el valor actual de b no excede de 5.
La forma general de una instrucción if que incluye la cláusula else es
if(expresión) instrucción 1 else instrucción 2
Si la expresión tiene un valor no nulo (si expresión es verdadera), entonces se
ejecutará instrucción 1. En otro caso (expresión es falsa), se ejecutará instrucción
2.
EJEMPLO 5.4 A continuación presentarnos varios ejemplos como muestra del uso de
la instrucción if-else completa.
if (estado == 'S')
tasa = 0.20 * pago;
else
tasa = 0.14 * pago;
if (debito 0) {
printf(cuenta nº %d está en números rojos, no_cuenta) ;
credito = 0;
}
else
Pedro Ramírez pedroramirez22@gmail.com 3
4. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M06 MICROCONTROLADORES I
Laboratorio: D-19
Duración: 2 Hs INSTRUCCIONES DE CONTROL
credito = 100.0;
if (x = 3)
y = 3 * pow(x, 2);
else
y = 2 * pow((x - 3), 2);
printf{%fn, balance);
if (circulo) {
scanf(%f, radio);
area = 3.14159 * radio * radio;
printf(Area del circulo = %f, area);
}
else {
scanf(%f %f, longitud, anchura);
area = longitud * anchura;
printf(Area del rectángulo = %f, area);
}
En el primer ejemplo el valor de tasa se determina de dos formas posibles, dependien-
do del carácter que se le haya asignado a la variable estado. Observe el punto y coma al
nal de cada instrucción,especialmente en la primera (tasa = 0.20 * pago;). Una forma
más concisa de hacer lo mismo es la siguiente:
tasa = (estado == 'S') ? (0.20 * pago) : (0.14*pago);
si bien este estilo no queda tan claro.
El segundo ejemplo examina el estado de débito de una cuenta. Si el valor de debito
es mayor que cero, se visualiza un mensaje y el límite de crédito se establece en cero; en
cualquier otro caso, el límite de crédito se establece en 1000,0. En el tercer ejemplo se
calcula el valor de y de dos formas distintas, dependiendo de si el valor de x es mayor o
no que 3.
El cuarto ejemplo muestra cómo se puede calcular un área de dos guras geométricas.
Si a circulo se le asigna un valor no nulo, se lee el radio del círculo, se calcula el área y
luego se visualiza. Pero si el valor de circulo es cero, entonces se leen la longitud y la
anchura de un rectángulo, se calcula el área y luego se visualiza. En cada caso, se rotula
el tipo de gura geométrica junto al valor del área correspondiente.
Es posible anidar (incluir) instrucciones if-else una dentro de otra. Estas anidacio-
nes pueden tomar formas diferentes. La forma más general de anidamiento doble es
if e1 if e2 s1
else s2
else if e3 s3
else s4
Pedro Ramírez pedroramirez22@gmail.com 4
5. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M06 MICROCONTROLADORES I
Laboratorio: D-19
Duración: 2 Hs INSTRUCCIONES DE CONTROL
en donde e1, e2 y e3 representan expresiones lógicas y s1, s2, s3 y s4 instrucciones. En
esta situación se ejecutará una instrucción if-else completa si e1 es no nula (verdadera),
y se ejecutará otra instrucción if-else si e1 es cero (falsa). Es posible, por supuesto,
que s1, s2, s3 y s4 contengan otras instrucciones if-else. Tendríamos en este caso un
anidamiento múltiple.
EJEMPLO 5.5 A continuación se muestra un ejemplo de tres instrucciones if-else
anidadas.
if ((hora = 0.) (hora 12.))
printf(Buenos Días);
else if((hora = 12.) (hora 18.))
printf(Buenas Tardes);
else if((hora = 18.) (hora 24.))
else if printf(Buenas Noches);
else printf(Hora no válida);
Este ejemplo hace que se visualice un mensaje diferente a distintas horas del día. Con-
cretamente, se visualizará Buenos Días si hora tiene un valor entre 0 y 12; se visualizará
Buenas Tardes si hora tiene un valor entre 12 y 18; y se visualizará Buenas Noches si
hora tiene un valor entre 18 y 24. Si hora tiene un valor menor que cero, o mayor o igual
a 24, se visualizará un mensaje de error Hora no válida.
Cuestiones de Repaso
1. ¾Qué es ejecución condicional?
2. ¾Qué es selección?
3. Citar todas las reglas relacionadas con la utilización de los cuatro operadores re-
lacionales, los dos operadores de igualdad, las dos conectivas lógicas y el operador
unario de negación. ¾Qué tipos de operandos se utilizan con cada operador?
4. ¾Cómo se interpretan las variables y constantes de tipo carácter cuando se utilizan
como operandos de un operador relacional?
5. ¾Cuál es el propósito de la instrucción if-else?
6. Describir las dos formas diferentes de la instrucción if-else. ¾En qué se diferen-
cian?
7. Comparar el uso de la instrucción if-else con el del operador ? : . ¾De qué forma
se puede utilizar el operador ? : en lugar de una instrucción if-else?
8. Citar las reglas sintácticas asociadas con la instrucción if-else.
Pedro Ramírez pedroramirez22@gmail.com 5
6. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M06 MICROCONTROLADORES I
Laboratorio: D-19
Duración: 2 Hs INSTRUCCIONES DE CONTROL
9. ¾Cómo se interpretan las instrucciones if-else anidadas? En particular, ¾cómo se
interpreta la siguiente?
if e1 if e2 s1
else s2
¾Qué expresión lógica se encuentra asociada a la cláusula else?
10. ¾Qué ocurre cuando se encuentra una expresión con valor no nulo dentro de un
grupo de instrucciones if-else anidadas?
Problemas
1. Explicar qué ocurre cuando se ejecuta la siguiente instrucción.
if(abs(x) xmin) x = (x 0) ? xmin : -xmin;
2. Escribir una estructura de control que examine el valor de una variable en coma
otante llamada temp y escriba uno de los siguientes mensajes dependiendo de su
valor:
a) HIELO, si el valor de temp es menor que 0.
b) AGUA, si el valor de temp se encuentra entre O y 100.
c) VAPOR, si el valor de temp es mayor que 100.
Pedro Ramírez pedroramirez22@gmail.com 6