Está en la página 1de 19

UNIDAD V: ESTRUCTURAS DE

CONTROL EN LENGUAJE C
Estructuras Condicionales en Lenguaje C

DEPARTAMENTO DE COMPUTACIÓN
Ing. Karina Esquivel
Unidad V: Estructuras de Control en Lenguaje C

UNIDAD V: ESTRUCTURAS DE CONTROL

5.1 INTRODUCCIÓN:

Las estructuras de control controlan la secuencia o flujo de ejecución de un programa o


función. Permiten combinar instrucciones o sentencias individuales en una simple unidad
lógica con un punto de entrada y un punto de salida. Las estructuras de control se dividen
en tres grandes categorías en función del flujo de ejecución: secuencia, selección
(decisión) y repetición.

Las estructuras lógicas selectivas se encuentran en la solución algorítmica de casi todo tipo
de problemas. Estas estructuras se utilizan cuando se debe tomar una decisión en el
desarrollo de la solución de un problema. La toma de decisión se basa en la evaluación
de una o más condiciones que nos señalarán como consecuencia la rama a seguir.

Es frecuente que nos encontremos con situaciones en las que debemos tomar varias
decisiones. Cuando esto ocurre, decimos que se realizan en cascada. Es decir, se toma
una decisión, se señala el camino a seguir, nos encontramos con otra decisión, se marca
el siguiente camino, y así sucesivamente. En estos casos prácticamente debemos construir
un árbol de decisión para plantear la solución.

La estructura decisión lógica o selectiva está formada por una condición de tipo lógico
que puede ser simple o compuesta, de la que salen dos posibles caminos: un conjunto de
acciones o secuencias a ejecutar, si el resultado de la condición es verdadera; u otro
conjunto de acciones o secuencias a realizar, si el resultado de la condición es falsa. Se
puede dar el caso de que falte uno de los grupos de instrucciones, pero nunca los dos;
esto sería un camino nulo que implica no tomar ninguna acción.

5.2 TIPOS DE ESTRUCTURAS CONDICIONALES:

Existen tres tipos de decisiones lógicas: simples, dobles y múltiples.

5.2.1 La sentencia Condicional Simple: if

La estructura selectiva if permite que el flujo del diagrama siga por un camino específico
si se cumple una condición determinada. Si al evaluar la condición el resultado es
verdadero, entonces se sigue por un camino específico —hacia abajo— y se ejecuta una
operación o acción o un conjunto de ellas. Por otra parte, si el resultado de la evaluación
es falso, entonces se pasa(n) por alto esa(s) operación(es). En ambos casos se continúa
con la secuencia normal del diagrama de flujo.
Unidad V: Estructuras de Control en Lenguaje C

Observemos la representación gráfica de esta estructura:

En Lenguaje C, la estructura selectiva if se escribe de la siguiente forma:

EJERCICIOS RESUELTOS:

Ejemplo 01: Programa en C lee dos números enteros y comprueba que el primer número
ingresado es divisible por el segundo número.
Solución:

#include <stdio.h>
int main()
{
int n1, n2;
printf("Introduzca el Primer Numero: ");
scanf("%d", &n1);
printf("Introduzca el Segundo Numero: ");
scanf("%d", &n2);
if (n1 % n2== 0)
printf("\n\t%d es divisible por %d\n",n1,n2);
return 0;

}
Unidad V: Estructuras de Control en Lenguaje C

Ejemplo de Ejecución:

Ejemplo 02: Programa en C que, al recibir como dato el salario de una persona, incremente
en un 10% el mismo si es menor a C$15,000 e imprima el nuevo salario.

Solución:
#include <stdio.h>
int main()
{
float salario,nsal,incremento;
printf("Introduzca el Salario en Cordobas: ");
scanf("%f", &salario);
if (salario < 15000)
{
incremento=salario*0.10;
nsal=salario+incremento;
printf("El Nuevo Salario es: %.2f",nsal);
}
return 0;
}

Ejemplo de Ejecución:
Unidad V: Estructuras de Control en Lenguaje C

Ejemplo 03: Programa en C que lee un número entero positivo y verifica si dicho número
es positivo, negativo o nulo.

#include <stdio.h>
int main()
{
int numero;
printf("Numero?");
scanf("%d", &numero);
if (numero < 0)
printf("\n%d es NEGATIVO",numero);
if (numero > 0)
printf("\n%d es POSITIVO",numero);
if (numero == 0)
printf("\n%d es NULO",numero);
return 0;
}

Ejemplo de Ejecución:

EJERCICIOS PROPUESTOS:

1. Realice un programa en C que, al recibir como dato el promedio de un alumno en


la clase de Programación Estructurada escriba aprobado si su promedio es mayor o
igual a 60 y reprobado en caso contrario.
2. Realice un programa en C que, al recibir como dato el precio de un producto,
incremente 11% el mismo si es inferior a 12,000 y 8% si fuera mayor o igual a dicho
precio; además, debe escribir el nuevo precio del producto.
3. Construye un programa en C que permita calcular el precio del billete ida y vuelta
en bus, conociendo tanto la distancia entre las dos ciudades como el tiempo de
estancia en la ciudad destino. Si el número de días de estancia es superior a 15 y la
distancia total (ida y vuelta) a recorrer es superior a 500 km, el precio del billete se
reduce 20%. El precio por km es de C$ 25.
Unidad V: Estructuras de Control en Lenguaje C

5.2.2 La sentencia Condicional Doble: if…else

La estructura selectiva doble if-else permite que el flujo del diagrama se bifurque por dos
ramas diferentes en el punto de la toma de decisión. Si al evaluar la condición el resultado
es verdadero, entonces se sigue por un camino específico -el de la izquierda- y se ejecuta
una acción determinada o un conjunto de ellas. Por otra parte, si el resultado de la
evaluación es falso, entonces se sigue por otro camino -el de la derecha- y se realiza(n)
otra(s) acción(es). En ambos casos, luego de ejecutar las acciones correspondientes, se
continúa con la secuencia normal del diagrama de flujo.

Observemos la representación gráfica de esta estructura:

En Lenguaje C, la estructura selectiva if se escribe de la siguiente forma:

Si las sentencias son compuestas se cierran entre { }, así:


Unidad V: Estructuras de Control en Lenguaje C

if (expresion)
{
Sentencia1;
Sentencia2;
...
SentenciaN;
}

else
{
Sentencia1;
Sentencia2;
...
SentenciaN;
}
EJERCICIOS RESUELTOS:

Ejemplo 04: Programa en C que lee un número entero positivo y verifica si dicho número
es par o impar.

Solución:

#include <stdio.h>
int main(int argc, char *argv[])
{
int numero;
printf("Ingrese un numero: ");
scanf("%d",&numero);
if (numero % 2 == 0)
printf("\nEl numero %d es par\n",numero);
else
printf("\nEl numero %d es impar\n",numero);
return 0;
}

Ejemplo de Ejecución:
Unidad V: Estructuras de Control en Lenguaje C

Ejemplo 05: Programa en C que lee dos números enteros e imprime el mayor de los dos
números leídos.

Solución:
#include <stdio.h>
int main(int argc, char *argv[])
{
int n1,n2;
printf("Numero 1: ");
scanf("%d",&n1);
printf("Numero 2: ");
scanf("%d",&n2);
if (n1 > n2)
printf("\nEntre %d y %d el Mayor es: %d\n",n1,n2,n1);
else
printf("\nEntre %d y %d el Mayor es: %d\n",n1,n2,n2);
return 0;
}

Ejemplo de Ejecución:

Ejemplo 06: Programa en C tal que dada la función f(x), calcula la función para un valor
dado de x y lo visualiza en pantalla.
Unidad V: Estructuras de Control en Lenguaje C

Solución:
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
float f,x;
printf("Valor X: ");
scanf("%f",&x);

if (x<=0)
f=pow(x,2)-x;
else
f=-pow(x,2)+3*x;

printf("\nf(%.1f) = %.3f",x,f);
return 0;
}
Ejemplo de Ejecución:

Ejemplo de Ejecución:

EJERCICIOS PROPUESTOS:

1. La ferretería Leiva está ofreciendo descuentos de acuerdo a las siguientes


condiciones: Si el monto de la compra es menor que C$ 10,000 el descuento será
del 5%, si el monto es mayor que C$ 10,000 el descuento será del 15%. El cajero desea
determinar cuál será el monto que debe pagar un cliente por su compra.

2. Calcular el número de pulsaciones que debe tener una persona por cada 10
segundos de ejercicio aeróbico; la fórmula que se aplica cuando el sexo es
femenino es: num_pulsaciones=(220-edad)/10 y si el sexo es masculino:
num_pulsaciones=(210-edad)/10.

3. Realice un programa en C que, al recibir como dato un número entero de cuatro


dígitos, determine si todos los dígitos del número son pares.
Por ejemplo, si el número fuera 5688, no cumpliría la condición ya que el dígito más
significativo —5— sería impar; si, por el contrario, el número fuera 6244, sí cumpliría,
ya que todos los dígitos son pares.
Unidad V: Estructuras de Control en Lenguaje C

5.2.3 La sentencia Condicional Múltiple: if…else if

En el desarrollo de la solución de problemas se encuentran frecuentemente casos en los


que, luego de tomar una decisión y señalar el correspondiente camino a seguir, es
necesario tomar otra decisión. Este proceso se puede repetir numerosas veces. Una forma
de solucionarlo es aplicando estructuras selectivas en cascada.

Una sentencia if es anidada cuando la sentencia de la rama verdadera o la rama falsa,


es a su vez una sentencia if. Una sentencia if anidada se puede utilizar para implementar
decisiones con varias alternativas.

La forma general de estas sentencias es:

if (expresion1)
Sentencia1;
else if (expresion2)
Sentencia2;
else if (expresión N)
Sentencia N;
else
Sentencia e;

EJERCICIOS RESUELTOS:

Ejemplo 07: Programa en C que permita determinar en qué estado está el agua en función
de su temperatura. Si la temperatura es negativa el estado será sólido, si es positiva y
menor que 100 será líquido y si es mayor que 100 será gaseoso. Pedir al usuario el valor de
la temperatura.

Solución:
#include <stdio.h>
int main(int argc, char *argv[])
{
int temperatura;
printf("Temperatura? ");
scanf("%d",&temperatura);

if (temperatura<0)
printf("Estado Solido");
else if (temperatura>0 && temperatura<=100)
printf("Estado Liquido");
else
printf("Estado Gaseoso");
return 0;
}
Unidad V: Estructuras de Control en Lenguaje C

Ejemplo de Ejecución:

Ejemplo 08: En una tienda departamental ofrecen descuentos a los clientes en la Navidad,
de acuerdo con el monto de su compra. El criterio para establecer el descuento se muestra
abajo. Construye un diagrama de flujo y el correspondiente pseudocódigo que, al recibir
como dato el monto de la compra del cliente, obtenga el precio real que debe pagar
luego de aplicar el descuento correspondiente.
 Compra < $500 ⇒ Descuento 0%.
 $500 > Compra < $1500 ⇒ Descuento 10%.
 $1500 > Compra < $5000 ⇒ Descuento 15%.
 $5000 > Compra ⇒ Descuento 20%.

Solución:
#include <stdio.h>
int main(int argc, char *argv[])
{
float compra, pagar;
printf("Valor de la compra del Cliente es de: ");
scanf("%g", &compra);
if (compra < 500)
pagar = compra;
else if (compra>=500 && compra <=1500)
pagar = compra - (compra * 0.10);
else if (compra>1500 && compra<=5000)
pagar = compra - (compra *0.15);
else
pagar = compra - (compra * 0.20);
printf("El cliente debe pagar la suma de: C$%.2f\n", pagar);
return 0;
}

Ejemplo de Ejecución:
Unidad V: Estructuras de Control en Lenguaje C

1. Ejemplo 09: Construye un programa en C que, al recibir como dato Y, calcule el


resultado de la siguiente función e imprima los valores de X y Y.

Solución:
#include<stdio.h>
#include <math.h>
int main(void)
{
float X;
int Y;
printf("Ingrese el valor de Y: ");
scanf("%d",&Y);
Ejemploifde Ejecución:
(Y>0 && Y<=10)
X=4/Y-Y;
else
if (Y>10 && Y<=25)
X=pow(Y,3)-12;
EJERCICIOS PROPUESTOS:
else
if (Y>25 && Y<=50)
X=pow(Y,2)+(pow(Y,3)-18);
else
X = 0;
printf("\nY = %d\tX = %.2f", Y, X);
return 0;
}

EJERCICIOS PROPUESTOS:

1. Realice un programa en C que, al recibir como datos de entrada tres valores enteros
diferentes entre sí, determine si los mismos están en orden creciente.

2. Realice un programa en C que, al recibir como datos las ventas de tres vendedores
de una librería, imprima las mismas en forma descendente.
Unidad V: Estructuras de Control en Lenguaje C

3. Construye un programa en C que, al recibir como dato el salario de un profesor de


una universidad, calcule el incremento del salario de acuerdo con el siguiente
criterio y escriba el nuevo salario del profesor:
 Salario < $18,000 -> Incremento 12%.
 $18,000 < Salario > $30,000 -> Incremento 8%.
 $30,000 < Salario > $50,000 -> Incremento 7%.
 $50,000 >= Salario -> Incremento 6%.

5.2.4 SENTENCIA switch

Selecciona entre varias alternativas dependiendo del valor de una variable. Comienza
con la palabra reservada switch seguida de una expresión entre paréntesis. Luego de esto
vienen las etiquetas de selección a través de la palabra reservada case, ésta palabra
debe tener como argumento obligatoriamente constantes enteras, por ejemplo, int, char,
enum, pero no float, o cadena.

En varios de los casos puede hacerse referencia a una misma acción, para ello se disponen
en secuencia y la última cláusula case es la que hará referencia a la secuencia de
instrucciones asociada.

La forma general de esta sentencia es:

switch (expresión)
{
case exp1:
sentencia 1;
sentencia 2;
break;
case exp2:
sentencia1;
sentencia2;
break;
case expN:
sentencia N;
break;
default:
sentencia D;
}
Unidad V: Estructuras de Control en Lenguaje C

Por lo común la última instrucción antes de la siguiente etiqueta es la instrucción break,


ésta palabra reservada provoca el abandono de la estructura switch. Si no existe una
proposición break la ejecución continúa con las instrucciones de la siguiente etiqueta. La
ausencia de instrucciones break es una causa de error frecuente en un switch.

Por último puede haber una instrucción etiquetada como default y representa el caso en
el que el valor de la expresión no coincida con ningún valor de las etiquetas utilizadas.

EJERCICIOS RESUELTOS CON switch:

Ejemplo 10: Realice un programa en C que simule una calculadora, de tal forma que:
• Si el usuario introduce +, sume dos números.
• Si el usuario introduce -, reste dos números.
• Si el usuario introduce *, multiplique dos números.
• Si el usuario introduce /, divida dos números. Asegúrese que el segundo operando
no sea cero, ya que la división por cero no está permitida.
Unidad V: Estructuras de Control en Lenguaje C

Solución:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int num1, num2, resp;
char operacion;
printf("Esta es una calculadora...\n\n");
printf("Ingrese dos numeros: ");
scanf("%d %d",&num1,&num2);
printf("Operacion?");
fflush(stdin);
operacion = getchar();
switch(operacion)
{
case '+':
resp = num1 + num2;
break;
case '-':
resp = num1 - num2;
break;
case '*':
resp = num1 * num2;
break;
case '/':
if(num2 != 0)
resp = num1 / num2;
else
{
printf("Division por cero no valida\n");
exit(0);
}
break;
default:
puts("Operacion invalida");
}
printf("%d %c %d = %d \n\n",num1,operacion,num2,resp);
return 0;
}

Ejemplo de Ejecución:
Unidad V: Estructuras de Control en Lenguaje C

Ejemplo 11: Realice un programa en C, que al recibir como datos la categoría académica
de un profesor de la UNAN-León y su salario, incremente éste último siguiendo las
especificaciones de la tabla e imprima tanto el nivel del profesor como su nuevo salario.
Use variables de tipo enumerado para declarar las categorías docentes.
Nivel Incremento
Profesor adjunto 4.5 %
Profesor auxiliar 2.5 %
Profesor asistente 5.5 %
Profesor titular 3.7 %
Unidad V: Estructuras de Control en Lenguaje C

Solución:
#include<stdio.h>
#include<stdlib.h>
enum profesor
{
adjunto=1,
auxiliar,
asistente,
titular
};

int main(void)
{
enum profesor nivel;
float sal;
printf("Categorias de profesor universitario:\n");
printf("---------------------------------------\n");
printf("1. Profesor adjunto\n");
printf("2. Profesor auxiliar\n");
printf("3. Profesor asistente\n");
printf("4. Profesor titular\n");
printf("Ingrese el nivel academico del profesor: ");
scanf("%d",&nivel);
printf("Ingrese el salario: ");
scanf("%f",&sal);
switch(nivel)
{
case adjunto:
sal = sal * 1.045;
Ejemplo de Ejecución:
break;
case auxiliar:
sal = sal * 1.025;
break;
Ejemplo 12:case asistente:
sal = sal * 1.055;
break;
case titular:
sal = sal * 1.037;
break;
default:
printf("Categoria incorrecta\n");
exit(0);
}
printf("\n\nNivel:%d\tNuevo salario:%.2f\n",nivel,sal);
return 0;
}
Unidad V: Estructuras de Control en Lenguaje C

Ejemplo 12: Realice un programa en C tal que al recibir un dato entero que corresponde
al día de una semana muestre por pantalla el día de la semana al que corresponde. Nota:
Si el número de día introducido es menor que 1 ó mayor que 7, se mostrará el mensaje:
"ERROR: Día incorrecto.".

Solución:

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int dia;
printf("Introduzca el dia de la semana: ");
scanf("%d",&dia);
switch(dia)
{
case 1:
printf("El dia 1 es:Lunes");
break;
case 2:
printf("El dia 2 es:Martes");
break;
case 3:
printf("El dia 3 es:Miercoles");
break;
case 4:
printf("El dia 4 es:Jueves");
break;
case 5:
printf("El dia 5 es:Viernes");
break;
case 6:
printf("El dia 6 es:Sabado");
break;
case 7:
printf("El dia 7 es:Domingo");
break;
default:
printf("Dia Incorrecto\n");
exit(-1);
}
return 0;
}
Unidad V: Estructuras de Control en Lenguaje C

Ejemplo de Ejecución:

EJERCICIOS PROPUESTOS:

1. Realice un programa en C del siguiente enunciado: El valor del descuento que se


le aplica a cada estudiante de la UCC depende de la ciudad de procedencia.
Tome en cuenta la siguiente tabla, que permita calcular el descuento que se realiza
a un estudiante e imprimir cuál es la cantidad de dinero que deja de percibir el
administrador de la Universidad en concepto de descuento.
Clave Ciudad Descuento
1 León 2%
2 Chinandega 10%
3 Managua 15%
4 Estelí 18%
5 Jinotega 20%
El valor de la mensualidad es de: C$ 250,67.

2. En un supermercado han realizado una campaña bastante original. En la caja, una


vez calculado el importe de la compra, se le solicita al cliente que extraiga de una
bolsa una de las 10 esquelas que hay dentro. Las esquelas están numeradas del 1
al 10 y tienen premio según la siguiente tabla:
• Esquelas 1, 2, 3 -----Se le descuenta al cliente un 2% de la compra.
• Esquela 7 ------Se le descuenta un 10%.
• Esquelas 9 y 10-----Se le descuenta un 4%.
• Esquela 8-------Se les descuenta 5%.
• Las restantes no tienen premio.
Nota: Resuelva utilizando la estructura switch.

REFERENCIAS BIBLIOGRÁFICAS:

1. Joyanes Aguilar Luis, Zahonero Martínez Ignacio. Programación en C. Metodología,


algoritmos y estructura de datos. Segunda Edición. Mc Graw Hill.
2. Castillo Sanz Andrés, Joyanes Aguilar Luis, Sánchez García Lucas, Zahonero Martínez
Ignacio. Programación en C. Libro de Problemas. Mc Graw Hill.
3. Byron S. Gottfried. Programación en C. Mc Graw Hill.

También podría gustarte