2010
UNAN – LEON
FACULTAD DE CIENCIA Y TECNOLOGIA
Departamento de Computación
Autor: M.Sc. Ana María Salgado G.
Asignatura:
Programación Estructurada
SENTENCIAS DE CONTROL (SENTENCIAS if Y switch)
Este documento es una extracción del libro Programación en C, metodología, estructura de datos y objetos, de Luis Joyanes Aguilar e Ignacio Zahonero Martínez. Fue recopilado por la M.Sc. Ana María Salgado G. y completado con ejercicios obtenidos de otros textos e Internet.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 2
ESTRUCTURAS DE CONTROL
Las estructuras de control controlan el flujo de ejecución de un programa o
función. Las estructuras de control permiten combinar instrucciones o sentencias
individuales en una simple unidad lógica con un punto de entrada y un punto de
salida.
Las instrucciones o sentencias se organizan en tres tipos de estructuras de control
que sirven para controlar el flujo de la ejecución: secuencia, selección y repetición.
Hasta este momento sólo se ha utilizado el flujo secuencial. Una sentencia
compuesta es un conjunto de sentencias encerradas entre llaves ({ y } ) que se
utiliza para especificar un flujo secuencial.
{
sentencia1;
sentencia2;
.
.
.
sentencian;
}
El control fluye de la sentencia1, a la sentencia2, y así sucesivamente. Sin embargo
existen problemas que requieren etapas con dos o más opciones o alternativas a
elegir en función del valor de una condición o expresión.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 3
LA SENTENCIA if
En C, la estructura de control de selección es una sentencia if. La sentencia if tiene
dos alternativas o formatos posibles. El formato más sencillo tiene la sintaxis
siguiente:
if(condición)
sentencia;
condición es una expresión entera lógica
sentencia es cualquier sentencia ejecutable, que se ejecutará sólo si la condición
toma un valor distinto de cero.
La sentencia if funciona de la siguiente manera:
Cuando se llega a la sentencia if dentro de un programa, se evalúa la condición
entre paréntesis que viene a continuación de if. Si condición es verdadera, se
ejecuta sentencia; en caso contrario no se ejecuta sentencia. En cualquier caso la
ejecución del programa continúa con la siguiente sentencia del programa.
Diagrama de flujo de una sentencia básica if
condición
sentencia
verdadera
falsa
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 4
Ejemplo #1:
Un hombre desea saber cuánto dinero se genera por concepto de intereses sobre
la cantidad que tiene en inversión en el banco. El decidirá reinvertir los intereses
siempre y cuando estos excedan a $7000, y en ese caso desea saber cuánto dinero
tendrá finalmente en su cuenta.
//if1.c
#include <stdio.h>
float p_int, cap, interes, capf;
void main(void)
{
printf("Introduzca su capital inicial: ");
scanf("%g", &cap);
printf("Cual es el porcentaje de interes?: ");
scanf("%g", &p_int);
interes = cap * p_int;
if(interes > 7000)
capf = cap + interes;
printf("El capital final es: %.2f\n",capf);
}
Ejecución:
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 5
Ejemplo #2:
Construya un programa tal, que dados como datos los valores enteros P y Q,
determine si los mismos satisfacen la siguiente expresión:
P3 + Q4 – 2P2 < 680
En caso afirmativo debe imprimir los valores de P y Q.
//expresion.c
#include <stdio.h>
#include <math.h>
int p,q,r;
void main(void)
{
printf("Introduzca dos enteros:");
scanf("%d %d",&p,&q);
r = pow(p,3) + pow(q,4) – 2 * pow(p,2);
if(r < 680)
printf("p = %d, q = %d, r = %d\n",p,q,r);
}
Ejemplo #3:
El número de sonidos emitidos por un grillo en un minuto, es una función de la
temperatura. Como resultado de esto, es posible determinar el nivel de la
temperatura haciendo uso de un grillito como termómetro. La fórmula para la
función es:
t = n/4 + 40
Escriba un programa que le permita calcular la temperatura, teniendo en cuenta
el número de sonidos emitidos por el grillo.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 6
//grilloif.c
#include <stdio.h>
float t;
int n;
void main(void)
{
printf("Introduzca el número de sonidos emitidos por el grillo:\n");
scanf("%d",&n);
if(n > 0)
{
t = n/4.0 + 40;
printf("La temperatura es:%.2f\n",t);
}
}
Ejemplo #4: La tangente de un ángulo se define como el cociente entre el seno y el coseno de
dicho ángulo.
tan(αααα) = sen(αααα)
cos(αααα)
Construya un programa, que permita calcular la tangente de un ángulo,
considerando que se conoce el valor del seno y del coseno del mismo.
//tang.c
#include <stdio.h>
float seno,coseno,tang;
void main(void )
{
printf("seno= ");
scanf("%f",&seno);
printf("coseno= ");
scanf("%f",&coseno);
if(coseno != 0)
{
tang=seno/coseno;
printf("El valor de la tangente es: %.4f",tang);
}
}
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 7
Ejercicios propuestos
1. En un almacén se hace un 20% de descuento a los clientes cuya compra
supere los $1000 ¿Cuál será la cantidad que pagará una persona por su
compra?
2. Realice un programa que lea dos números enteros y compruebe cuál es
el valor del resto de la división (n % d). Si el resto es cero, n es divisible
por d (en nuestro caso 36 es divisible por 4, ya que 36 / 4 = 9 y el resto es
0)
3. Escriba un programa que compare un número introducido por el
usuario y compruebe si el número es positivo, negativo o nulo.
SENTENCIA if DE DOS ALTERNATIVAS: if – else
Un segundo formato de la sentencia if es la sentencia if-else. Este formato de la
sentencia if tiene la siguiente sintaxis:
if(condición)
sentencia1
else
sentencia2
condición Expresión lógica que determina la acción a ejecutar.
sentencia1 Acción que realiza si la condición lógica es verdadera.
sentencia2 Acción que se ejecuta si la expresión lógica es falsa.
En este formato sentencia1 y sentencia2 son individualmente, o bien una única
sentencia que termina con punto y coma(;) o un grupo de sentencias encerrado
entre llaves. Se evalúa la condición. Si condición es verdadera, se ejecuta
sentencia1 y en caso contrario se ejecuta sentencia2.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 8
Diagrama de flujo de la representación de una sentencia if-else
Ejemplo #1: Calcule el total a pagar por la compra de camisas. Si se compran tres camisas o
más se aplica un descuento del 20% sobre el total de la compra y si son menos
de tres camisas un descuento del 10%.
//descuento.c
#include <stdio.h>
int numcamisas;
float prec, totcomp,totpag;
void main(void)
{
printf("Cuantas camisas comprara?");
scanf("%d",&numcamisas);
printf("Ingrese el precio:");
scanf("%f",&prec);
totcomp = numcamisas * prec;
if(numcamisas >= 3)
totpag = totcomp - totcomp * 0.20;
else
totpag = totcomp - totcomp * 0.10;
c o n d ic ió n
s e n te n c ia 1 s e n te n c ia 2
v e r d a d e r a fa ls a
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 9
printf("Total a pagar = %.2f \n",totpag);
}
Ejemplo #2:
En un supermercado se hace una promoción, mediante la cual el cliente obtiene
un descuento dependiendo de un número que se escoge al azar. Si el número
escogido es menor que 74 el descuento es del 15% sobre el total de la compra, si
es mayor o igual a 74 el descuento es del 20%. Obtener cuánto dinero se le
descuenta.
//descuento2.c
#include <stdio.h>
int numero;
float totcomp, descuento;
void main(void)
{
printf("Escoja un numero:");
scanf("%d",&numero);
printf("Ingrese el total de la compra:");
scanf("%f",&totcomp);
if(numero < 74)
descuento = totcomp * 0.15;
else
descuento = totcomp * 0.20;
printf("Descuento = %.2f \n",descuento);
}
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 10
Ejemplo #3:
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:
numpulsaciones = (220 - edad)/10
y si el sexo es masculino:
numpulsaciones = (210 - edad)/10
//pulsaciones.c
#include <stdio.h>
int edad, numpulsaciones;
char sexo;
void main(void)
{
printf("Sexo(F/M):");
sexo = getchar();
printf("Ingrese la edad:");
scanf("%d",&edad);
if(sexo == 'F' || sexo == 'f')
numpulsaciones = (220 - edad)/10;
else
numpulsaciones = (210 - edad)/10;
printf("Numero de pulsaciones = %d \n",numpulsaciones);
}
Ejemplo #4:
Una compañía de seguros está abriendo un dpto. de finanzas y estableció un
programa para captar clientes, que consiste en lo siguiente: Si el monto por el
que se efectúa la fianza es menor que $50 000 la cuota a pagar será por el 3% del
monto, y si el monto es mayor que $50 000 la cuota a pagar será el 2% del monto.
La afianzadora desea determinar cuál será la cuota que debe pagar un cliente.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 11
//fianza.c
#include <stdio.h>
float montofianza, cuota;
void main(void)
{
printf("Ingrese el monto de la fianza:");
scanf("%f",&montofianza);
if(montofianza < 50000)
cuota = montofianza * 0.03;
else
cuota = montofianza * 0.02;
printf("Cuota = %.2f \n",cuota);
}
Ejemplo #5:
Las raíces reales de la expresión ax2 + bx + c = 0 se obtienen a través de la fórmula:
Realice un programa para calcular las raíces reales, de ser posible, de una ecuación
de segundo grado.
a
acbbx
2
42−±−
= si 042
>=− acb
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 12
//raiz.c
#include <stdio.h>
#include <math.h>
float a,b,c,d,x1,x2;
void main(void)
{
printf("Introduzca los valores de a,b,c: ");
scanf("%f %f %f",&a,&b,&c);
d = b * b - 4 * a * c;
printf("d = %f\n",d);
if(d >= 0)
{
x1 = (-b + sqrt(d)) / (2 * a);
x2 = (-b - sqrt(d)) / (2 * a);
printf("Las raices de la ecuacion son: %f %f\n",x1,x2);
}
else
printf("No se pueden calcular las raices\n");
}
Ejemplo #6: Una empresa quiere hacer una compra de varias piezas de la misma clase a una
fábrica de refacciones. La empresa, dependiendo del monto total de la compra,
decidirá qué hacer para pagar al fabricante.
Si el monto total de la compra es $500 000 ó más, la empresa tendrá la
capacidad de invertir de su propio dinero un 55% del monto de la compra, pedir
prestado al banco un 30% y el resto lo pagará solicitando un crédito al fabricante.
Si el monto total de la compra no excede de $500 000, la empresa tendrá
capacidad de invertir de su propio dinero un 70% y el restante 30% lo pagará
solicitando crédito al fabricante.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 13
El fabricante cobra por concepto de intereses un 20% sobre la cantidad que se le
pague a crédito.
//refacciones.c
#include <stdio.h>
float costopza, totcomp, cantinv, prestamo, credito, interes;
int numpza;
void main( )
{
printf("Costo de la pieza: ");
scanf("%f", &costopza);
printf("Numero de piezas: ");
scanf("%d", &numpza);
totcomp = costopza * numpza;
if(totcomp >= 500000)
{
cantinv = totcomp * 0.55;
prestamo = totcomp * 0.30;
credito = totcomp * 0.15;
}
else
{
cantinv = totcomp * 0.70;
prestamo = 0;
credito = totcomp * 0.30;
}
interes = credito * 0.20;
printf("\nCantidad invertida: %.2f\nPrestamo:%.2f\n",cantinv, prestamo);
printf("Credito = %.2f\nIntereses = %.2f\n",credito, interes);
}
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 14
Ejemplo #7: Dada la función f(x) calcular la función para un valor dado x y visualizarlo en
pantalla.
x2 – x para x <= 0.0
-x2 + 3x para x > 0
//funcion.c
#include <stdio.h>
#include <math.h>
void main()
{
float f, x;
printf("Elige un valor de x: ");
scanf("%f",&x);
/* seleccion del rango en que se encuentra x */
if(x <= 0.0)
f = pow(x,2) - x;
else
f = -pow(x,2) + 3 * x;
printf("f(%.1f) = %.3f", x,f);
}
Comentario:
Una vez introducido x, se evalúa la condición x <= 0.0, si es cierta asigna a f, x2 – x;
en caso contrario asigna a f, -x2 + 3x
f(x)=
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 15
Ejercicios propuestos
1. Determinar si un alumno aprueba o reprueba un curso, sabiendo que
aprobará si su promedio de tres calificaciones es mayor o igual a 70; reprueba en
caso contrario. Para ambos casos, imprima también su promedio.
2. Un obrero necesita calcular su salario semanal, el cual se obtiene de la
siguiente manera:
Si trabaja 40 horas o menos se le paga $16 por hora
Si trabaja más de 40 horas se le paga $16 por cada una de las primeras 40 horas y
$20 por cada hora extra.
3. Calcular el mayor de dos números leídos del teclado y visualizarlo en
pantalla.
4. Escriba un programa que pueda determinar, dados dos números enteros, si
un número es divisor de otro.
5. Dados tres datos, enteros positivos, que representan las longitudes de los
lados de un triángulo; realice un programa que determine si el triángulo es:
Equilátero: tres lados iguales
Isósceles: dos lados iguales
Escaleno: tres lados diferentes
6. Que lea dos números y los imprima en forma ascendente.
7. Calcular el total que una persona debe pagar en una llantera, si el precio de
cada llanta es de $800 si se compran menos de 5 llantas y de $700 si se compran 5 o
más.
8. En una escuela la colegiatura de los alumnos se determina según el número
de materias que cursan. El costo de todas las materias es el mismo. Se ha
establecido un programa para estimular a los alumnos, el cual consiste en lo
siguiente: si el promedio obtenido por un alumno en el último periodo es mayor o
igual que 9, se le hará un descuento del 30% sobre la colegiatura y no se le cobrara
IVA; si el promedio obtenido es menor que 9 deberá pagar la colegiatura completa,
la cual incluye el 10% de IVA. Obtener cuánto debe pagar un alumno.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 16
9. Una empresa de bienes raíces ofrece casas de interés social, bajo las
siguientes condiciones: Si los ingresos del comprador son $8000 o más, el enganche
será del 15% del costo de la casa y el resto se distribuirá en pagos mensuales, a
pagar en diez años. Si los ingresos del comprador son menos de $8000, el enganche
será del 30% del costo de la casa y el resto se distribuirá en pagos mensuales a
pagar en 7 años. La empresa quiere obtener cuanto debe pagar un comprador
por concepto de enganche y cuanto por cada pago parcial.
10. El gobierno ha establecido el programa SAR (Sistema de Ahorro para el
Retiro) que consiste en que los dueños de la empresa deben obligatoriamente
depositar en una cuenta bancaria un porcentaje del salario de los trabajadores;
adicionalmente los trabajadores pueden solicitar a la empresa que deposite
directamente una cuota fija o un porcentaje de su salario en la cuenta del SAR, la
cual le será descontada de su pago. Un trabajador que ha decidido aportar a su
cuenta del SAR desea saber la cantidad total de dinero que estará depositado a esa
cuenta cada mes, y el pago mensual que recibirá.
SENTENCIAS if – else ANIDADAS
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 o multialternativas.
Sintaxis:
if(condición1)
sentencia1
else if(condición2)
sentencia2
.
.
. else if(condición n)
sentencia n
else
sentencia e
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 17
/* incrementar contadores de números positivos, números negativos o ceros */
La ejecución de la sentencia if anidada se realiza como sigue:
Se comprueba la primera condición (x > 0); si es verdadera, num_pos se incrementa
en 1 y se salta el resto de la sentencia if. Si la primera condición es falsa, se
comprueba la segunda condición (x < 0); si es verdadera num_neg se incrementa en
uno; en caso contrario se incrementa num_ceros en uno. Es importante considerar
que la segunda condición se comprueba sólo si la primera condición es falsa.
Ejemplo #1:
Haga un programa que permita calcular el valor de f(x), según la expresión: X2 si (x mod 4)=0 X/6 si (x mod 4)=1
√√√√x si (x mod 4)=2 x3 + 5 si (x mod 4)=3
if (x > 0) num_pos = num_pos + 1; else
if(x < 0) num_neg = num_neg + 1; else num_ceros = num_ceros + 1;
f(x)=
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 18
//if3.c #include <stdio.h> #include <math.h> int x; float y ; void main(void) { printf("x = "); scanf("%d",&x); if (x % 4 == 0) y = x * x; else if (x % 4 == 1) y = (float)x / 6; else if(x % 4 == 2) y = sqrt((double)x); else if(x % 4 == 3) y = pow(x,3) + 5; printf(" y = %.2f \n ",y); }
Ejemplo #2:
Una frutería ofrece las manzanas con descuento según la siguiente tabla:
NUM. DE KILOS COMPRADOS % DESCUENTO
0 - 2 0%
2.01 - 5 10%
5.01 - 10 15%
10.01 en adelante 20%
Determinar cuánto pagará una persona que compre manzanas es esa frutería.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 19
//manzanas.c
#include <stdio.h>
float nkilos,compra, pkilo,pago, descuento;
void main(void)
{
printf("Cuantos kilos de manzana comprara?:");
scanf("%f",&nkilos);
printf("Precio del kilo?:");
scanf("%f",&pkilo);
compra = nkilos * pkilo;
if(nkilos >= 0 && nkilos <= 2)
descuento = 0;
else if(nkilos >= 2.01 && nkilos <= 5)
descuento = compra * 0.10;
else if(nkilos >= 5.01 && nkilos <= 10)
descuento = compra * 0.15;
else
descuento = compra * 0.20;
pago = compra - descuento;
printf("Pago = %.2f\n",pago);
}
Ejemplo #3:
El IMSS requiere clasificar a las personas que se jubilaran en el año de 1997.
Existen tres tipos de jubilaciones: por edad, por antigüedad joven y por
antigüedad adulta. Las personas adscritas a la jubilación por edad deben tener
60 años o más y una antigüedad en su empleo de menos de 25 años. Las personas
adscritas a la jubilación por antigüedad joven deben tener menos de 60 años y
una antigüedad en su empleo de 25 años o más.
Las personas adscritas a la jubilación por antigüedad adulta deben tener
60 años o más y una antigüedad en su empleo de 25 años o más.
Determinar en qué tipo de jubilación, quedara adscrita una persona.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 20
//jubilacion.c
#include <stdio.h>
int edad,ant;
void main(void)
{
printf("Edad?:");
scanf("%d",&edad);
printf("Antiguedad?:");
scanf("%d",&ant);
if(edad >= 60 && ant < 25)
printf("La jubilacion es por edad\n");
else if(edad < 60 && ant >= 25)
printf("La jubilacion es por antiguedad joven\n");
else if(edad >= 60 && ant >= 25)
printf("La jubilacion es por antiguedad adulta.\n");
else
printf("No tiene por que jubilarse\n");
}
Ejemplo #4: Un individuo debe realizar un muestreo para determinar en qué categoría se encuentran las personas que viven en su zona habitacional. Se determinan las categorías con base en la siguiente tabla: CATEGORIA EDAD Niños 0 - 12 Jóvenes 13 - 29 Adultos 30 - 59 Viejos 60 en adelante
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 21
//edadcategoria.c
#include <stdio.h>
int edad;
void main(void)
{
printf("Edad?:");
scanf("%d",&edad);
if(edad >= 0 && edad <= 12)
printf("Te encuentras en la categoria Ninos\n");
else if(edad >= 13 && edad <= 29)
printf("Te encuentras en la categoria Jovenes\n");
else if(edad >= 30 && edad <= 59)
printf("Te encuentras en la categoria Adultos\n");
else
printf("Te encuentras en la categoria Viejos\n");
}
Ejemplo #5: Tomando como base los resultados obtenidos en un laboratorio de análisis clínicos, un médico determina si una persona tiene anemia o no, lo cual depende de su nivel de hemoglobina en la sangre, de su edad y de su sexo. Si el nivel de hemoglobina que tiene una persona no se encuentra el rango que le corresponde, se determina su resultado como positivo y en caso contrario como negativo. La tabla en la que el médico se basa para obtener el resultado es la siguiente: EDAD NIVEL HEMOGLOBINA 0 - 1 mes 13 - 26 g% > 1 y < = 6 meses 10 - 18 g% > 6 y < = 12 meses 11 - 15 g% > 1 y < = 5 años 11.5 - 15 g% > 5 y < = 10 años 12.6 - 15.5 g% > 10 y < = 15 años 13 - 15.5 g% mujeres > 15 años 12 - 16 g% hombres > 15 años 14 - 18 g%
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 22
//hemoglobina.c
#include <stdio.h>
int tipoedad, meses, edad;
char sexo;
float nihem;
void main(void)
{
printf("Edad en meses o en anyos?:\n");
printf("1. Meses\n");
printf("2. Anyos\n");
scanf("%d",&tipoedad);
if(tipoedad == 1)
{
printf("Cuantos meses tiene el bebe?");
scanf("%d",&meses);
}
else
if(tipoedad == 2)
{
printf("Cuantos anyos tiene?");
scanf("%d",&edad);
printf("Sexo:");
fflush(stdin);
sexo = getchar();
}
printf("Nivel de hemoglobina?");
scanf("%f",&nihem);
if((meses >= 0 && meses <= 1) && (nihem >=13 && nihem <= 26 ))
printf("Negativo, no tiene anemia\n");
else if((meses > 1 && meses <= 6) && (nihem >= 10 && nihem <= 18))
printf("Negativo, no tiene anemia\n");
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 23
else if((meses > 6 && meses <= 12) && (nihem >=11 && nihem <= 15))
printf("Negativo, no tiene anemia\n");
else if((edad > 1 && edad <= 5) && (nihem >=11.5 && nihem <= 15))
printf("Negativo, no tiene anemia\n");
else if((edad > 5 && edad <= 10) && (nihem >=12.6 && nihem <= 15.5))
printf("Negativo, no tiene anemia\n");
else if((edad > 10 && edad <= 15) && (nihem >=13 && nihem <= 15.5))
printf("Negativo, no tiene anemia\n");
else if(((sexo == 'F' || sexo == 'f') && edad > 15) && (nihem >=12 && nihem <= 16))
printf("Negativo, no tiene anemia\n");
else if(((sexo == 'M' || sexo == 'm')&& edad > 15) && (nihem >=14 && nihem<= 18))
printf("Negativo, no tiene anemia\n");
else
printf("Positivo\n");
}
Ejemplo #6:
//tarifaluz.c
/* Visualiza la tarifa de luz según el gasto de corriente eléctrica. Para un gasto
menor de 1000Kw por hora, la tarifa es 1.2, entre 1000 y 1850Kw por hora es 1.0 y
mayor de 1850Kw por hora es 0.9
*/
#include <stdio.h>
#define TARIFA1 1.2
#define TARIFA2 1.0
#define TARIFA3 0.9
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 24
void main()
{
float gasto, tasa;
printf("\n Gasto de corriente: ");
scanf("%f",&gasto);
if(gasto < 1000)
tasa = TARIFA1;
else if(gasto >=1000 && gasto <= 1850)
tasa = TARIFA2;
else
tasa = TARIFA3;
printf("\n Tasa que le corresponde a %.1f Kw x h es de %f \n",gasto, tasa);
}
Ejemplo #7: Leer tres números enteros diferentes e imprimir el número mayor de los tres.
//mayor.c
#include <stdio.h>
void main(void)
{
int num1, num2, num3, mayor;
printf("Introduzca tres enteros diferentes: ");
scanf("%d %d %d", &num1, &num2, &num3);
if((num1 > num2) && (num1 > num3))
mayor = num1;
else if((num2 > num1) && (num2 > num3))
mayor = num2;
else
mayor = num3;
printf("El mayor es %d \n",mayor);
}
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 25
Ejemplo #8: Una persona enferma, que pesa 70 kg, se encuentra en reposo y desea saber
cuántas calorías consume su cuerpo durante todo el tiempo que realice una misma
actividad. Las actividades que tiene permitido realizar son únicamente dormir o
estar sentado en reposo. Los datos que tiene son que estando dormido consume
1.08 calorías por minuto y estando sentado en reposo consume 1.66 calorías por
minuto.
//enferma.c
#include <stdio.h>
#include <string.h>
int tiempo;
char actividad[30];
float calorias;
void main(void)
{
printf("Que actividad realiza, dormir o estar sentado en reposo?: \n");
gets(actividad); printf("\nIntroduzca el tiempo en minutos en que ejecuta una de las dos actividades: \n");
scanf("%d",&tiempo);
if (!strcmp(actividad,"dormir"))
{
calorias = 1.08 * tiempo;
printf("\nSu cuerpo consume %.2f calorias por minuto\n",calorias);
}
else
if (!strcmp(actividad,"estar sentado en reposo"))
{
calorias = 1.66 * tiempo;
printf("\nSu cuerpo consume %.2f calorias por minuto\n",calorias);
}
else
printf("\nactividad invalida\n");
}
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 26
Ejercicios propuestos
1. Leer 2 números enteros; si son iguales que los multiplique, si el primero es
mayor que el segundo que los reste y si no que los sume.
2. En una tienda de descuento se efectúa una promoción en la cual se hace un
descuento sobre el valor de la compra total según el color de la bolita que el cliente
saque al pagar en caja. Si la bolita es de color blanco no se le hará descuento
alguno, si es verde se le hará un 10% de descuento, si es amarilla un 25%, si es azul
un 50% y si es roja un 100%. Determinar la cantidad final que el cliente deberá
pagar por su compra. se sabe que solo hay bolitas de los colores mencionados.
3. En una fábrica de computadoras se planea ofrecer a los clientes un
descuento que dependerá del número de computadoras que compre. Si las
computadoras son menos de cinco se les dará un 10% de descuento sobre el total
de la compra; si el número de computadoras es mayor o igual a cinco pero menos
de diez se le otorga un 20% de descuento; y si son 10 o mas se les da un 40% de
descuento. El precio de cada computadora es de $11,000
4. Calcular la utilidad que un trabajador recibe en el reparto anual de
utilidades si este se le asigna como un porcentaje de su salario mensual que
depende de su antigüedad en la empresa de acuerdo con la sig. tabla:
Tiempo Utilidad
Menos de 1 año 5 % del salario
1 año o más y menos de 2 años 7% del salario
2 años o más y menos de 5 años 10% del salario
5 años o más y menos de 10 años 15% del salario
10 años o más 20% del salario
5. En una llantera se ha establecido una promoción de las llantas marca
“Ponchadas”, dicha promoción consiste en lo siguiente:
Si se compran menos de cinco llantas el precio es de $300 cada una, de $250
si se compran de cinco a 10 y de $200 si se compran más de 10.
Obtener la cantidad de dinero que una persona tiene que pagar.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 27
6. En un juego de preguntas a las que se responde “Si” o “No” gana quien
responda correctamente las tres preguntas. Si se responde mal a cualquiera de ellas
ya no se pregunta la siguiente y termina el juego. Las preguntas son:
1. Colon descubrió América?
2. La independencia de México fue en el año 1810?
3. The Doors fue un grupo de rock Americano?
7. Un proveedor de estéreos ofrece un descuento del 10% sobre el precio sin
IVA, de algún aparato si este cuesta $2000 o más. Además, independientemente de
esto, ofrece un 5% de descuento si la marca es “NOSY”. Determinar cuánto
pagará, con IVA incluido, un cliente cualquiera por la compra de su aparato.
8. La Cía. Automovilística Mexicana, S.A. de C.V premia anualmente a sus
mejores vendedores de acuerdo a la siguiente tabla:
Si vendió Le corresponde de Comisión
sobre ventas totales
1,000,000 <= v < 3,000,000 3%
3,000,000 <= v < 5,000,000 4%
5,000,000 <= v < 7,000,000 5%
7,000,000 <= v 6%
Diseñar un programa que lea las ventas de un vendedor y que escriba la comisión
que le corresponde.
9. Determinar la cantidad de dinero que recibirá un trabajador por concepto de
las horas extras trabajadas en una empresa, sabiendo que cuando las horas de
trabajo exceden de 40, el resto se consideran horas extras y que estas se pagan al
doble de una hora normal cuando no exceden de 8; si las horas extras exceden de 8
se pagan las primeras 8 al doble de lo que se pagan las horas normales y el resto al
triple.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 28
SENTENCIA DE CONTROL switch
La sentencia switch es una sentencia C que se utiliza para seleccionar una de entre
múltiples alternativas. La sentencia switch es especialmente útil cuando la
selección se basa en el valor de una variable simple o de una expresión simple
denominada selector. El valor de esta expresión puede ser de tipo int o char, pero
no de tipo float ni double.
Sintaxis:
switch(selector)
{
case etiqueta1:
sentencia1;
case etiqueta2:
sentencia2;
.
.
case etiquetan:
sentencian;
default:
sentenciad;
}
El selector se evalúa y se compara con cada una de las etiquetas del case. La
expresión selector debe ser un tipo ordinal, por ejemplo, int, char, pero no float, o
string. Cada etiqueta es un valor único, constante y cada etiqueta debe tener un
valor distinto de los otros. Si el valor de selector es igual a una de las etiquetas
case, por ejemplo, etiquetai, entonces la ejecución comenzará con la primera
sentencia de la secuencia sentenciai y continuará hasta que se encuentre el final de
la sentencia de control switch, o hasta encontrar la sentencia break. Es habitual
que después de cada bloque de sentencias correspondiente a una secuencia se
desee terminar la ejecución del switch, para ello se sitúa la sentencia break como
última sentencia del bloque; break hace que siga la ejecución en la siguiente
sentencia al switch.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 29
Sintaxis con break:
switch(selector)
{
case etiqueta1:
sentencia1;
break;
case etiqueta2:
sentencia2;
break;
.
.
.
case etiquetan:
sentencian;
break;
default:
sentenciad;
}
Si el valor de selector no está listado en ninguna etiqueta case, no se ejecutará
ninguna de las opciones a menos que se especifique una acción por defecto.
Una sentencia break consta de la palabra reservada break seguida por un punto y
coma. Cuando la computadora ejecuta las sentencias siguientes a una etiqueta
case, continúa hasta que se alcanza una sentencia break. Si la computadora
encuentra una sentencia break, termina la sentencia switch. Si se omiten las
sentencias break, después de ejecutar el código de case, la computadora ejecutará
el código que sigue a la siguiente case.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 30
Ejemplo #1:
//numero.c
#include <stdio.h>
int numero;
void main(void)
{
printf("Introduzca un entero: ");
scanf("%d",&numero);
switch(numero)
{
case 0:
puts("Cero");
break;
case 1:
puts("Uno");
break;
case 2:
puts("Dos");
break;
default:
puts("Fuera de rango");
}
}
Ejemplo #2:
Hacer un algoritmo que imprima el nombre de un artículo, clave, precio original y
su precio con descuento. El descuento lo hace en base a la clave, si la clave es 1 el
descuento es del 10% y si la clave es 2 el descuento es del 20% (solo existen dos
claves).
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 31
//clave.c
#include <stdio.h>
#include <stdlib.h>
char nombreart[30];
int clave;
float prec_orig,prec_desc;
void main(void)
{
printf("Introduzca el nombre de un articulo:");
gets(nombreart);
printf("Ingrese su clave:");
scanf("%d",&clave);
printf("Precio original?");
scanf("%f",&prec_orig);
switch(clave)
{
case 1:
prec_desc = prec_orig - prec_orig * 0.10;
break;
case 2:
prec_desc = prec_orig - prec_orig * 0.20;
break;
default:
printf("Clave invalida\n");
exit(0);
}
printf("\n\nClave = %d\n",clave);
printf("Articulo: %s \n", nombreart);
printf("Precio original = %.2f \n",prec_orig);
printf("Precio con descuento = %.2f\n\n",prec_desc);
}
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 32
Ejemplo #3: Dada una nota de un examen mediante un código escribir el literal que le
corresponde a la nota.
#include <stdio.h>
void main( )
{
char nota;
printf(“Introduzca calificación (A – F) y pulse Intro: “);
scanf(“%c”, ¬a);
switch(nota)
{
case ‘A’:
puts(“Excelente. Examen superado”);
break;
case ‘B’:
puts(“Notable. Suficiencia”);
break;
case ‘C’:
puts(“Aprobado”);
break;
case ‘D’:
case ‘F’:
puts(“Suspendido”);
break;
default:
puts(“No es posible esa nota”);
}
puts(“Final del programa”);
}
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 33
Ejemplo #4:
Realice un programa que haga las siguientes conversiones:
• De toneladas a kilogramos.
• De pie a metros.
Tome en cuenta las siguientes consideraciones:
• 1 tonelada equivale a 1000 kilogramos
• 1 pie equivale a 0.3047 metros
Cree un tipo enumerado. Utilice switch. //toneladakg.c
#include <stdio.h>
#include <stdlib.h>
float ton, metro, pie, kg;
void main()
{
enum tipo
{
toneladakg = 1,
piemt
};
enum tipo conversion;
printf("1 - De toneladas a kilogramos\n");
printf("2 - De pie a metros\n");
printf("\nPulse la opcion deseada: ");
scanf("%d", &conversion);
switch (conversion)
{
case toneladakg:
printf("Ingrese las toneladas:");
scanf("%f",&ton);
kg = ton * 1000;
printf("kg = %.2f\n",kg);
break;
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 34
case piemt:
printf("\n¿metros? ");
scanf("%f", &metro);
pie = metro * 0.3047;
printf("pie = %.3f\n",pie);
break;
default:
printf("\nLa opción no es correcta\n");
exit(0); /* error; salir de main */
}
}
Ejemplo #5:
Realice un programa 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.
//calculadora.c
#include <stdio.h>
#include <stdlib.h>
double num1, num2, resp;
char operacion;
void main(void)
{
printf("Esta es una calculadora...\n\n");
printf("Ingrese dos numeros: ");
scanf("%lf %lf",&num1,&num2);
printf("Operacion?");
fflush(stdin);
operacion = getchar();
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 35
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("%g %c %g = %g \n\n",num1,operacion,num2,resp);
}
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 36
Ejemplo #6:
Escriba un programa que permita lo siguiente:
� Convertir una temperatura de grados Fahrenheit a grados Centígrados
� Convertir una temperatura de grados Centígrados a grados Fahrenheit
F = 9/5 * C + 32 C = 5/9 * (F – 32)
//fahrcent.c
#include <stdio.h>
#include <stdlib.h>
int opcion;
float f, c;
void main(void)
{
printf("1 - Convertir de centigrados a fahrenheit\n");
printf("2 - Convertir de fahrenheit a centigrados\n");
printf("\nIngrese la opcion deseada: ");
scanf("%d", &opcion);
switch (opcion)
{
case 1:
printf("\nGrados centigrados:");
scanf("%f",&c);
f = 9.0/5.0 * c + 32;
printf("%.2f centigrados equivalen a %.2f grados fahrenheit\n\n",c,f);
break;
case 2:
printf("\nGrados fahrenheit? ");
scanf("%f", &f);
c = 5.0/9.0 * (f - 32);
printf("%.2f fahrenheit equivalen a %.2f grados centigrados\n\n",f,c);
break;
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 37
default:
printf("\nOpcion incorrecta\n");
exit(0); /* error; salir de main */
}
}
Ejercicios propuestos
1. Realice un programa que me permita saber si un determinado carácter car es
una vocal.
2. Escriba un programa que calcule el importe a pagar por un vehículo al
circular por una autopista. El vehículo puede ser una bicicleta, una moto, un
coche, o un camión. Para definir el conjunto vehículos utilizaremos un tipo
enumerado. El importe se calculará según los siguientes datos:
• Un importe fijo de 100 córdobas para las bicicletas.
• Las motos y los carros pagarán 30 córdobas por Km.
• Los camiones pagarán 30 córdobas por Km más 25 córdobas por Tm
La presentación en pantalla de la solución, será de la forma siguiente:
1 - bicicleta
2 – moto
3 – carro
4 - camión
5 – salir
Seleccione la opción deseada: 4
Kilómetros y toneladas? 100 50
Importe = 4250
3. Realizar un programa que permita ingresar un número correspondiente a
los días de una semana y muestre el nombre del día. Que se permita trabajar hasta
que el usuario indique lo contrario. Use switch.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 38
4. Escriba un programa tal, que dados como datos el modelo de un vehículo y
su precio, determine el valor final que debe pagar el comprador. El concesionario
está haciendo descuentos teniendo en cuenta el modelo, con base en la siguiente
tabla:
Modelo Descuento
Cutlass 8%
Cavalier 5%
Chevy 6%
Century 9%
Haga uso de una enumeración. Defínala como un nuevo tipo. Además, utilice
break y una opción por defecto que imprima “El modelo no es válido”.
5. En un hospital se ha hecho un estudio sobre los pacientes registrados
durante los últimos 10 años, con el objeto de hacer una aproximación de los costos
de internación por paciente. Se obtuvo un costo promedio diario según el tipo de
enfermedad que aqueja al paciente; además se pudo determinar que en promedio
todos los pacientes con edad entre 10 y 25 años implican un costo adicional del
20%. La siguiente tabla expresa los costos diarios, según el tipo de enfermedad.
Tipo de enfermedad Costo/Paciente/Día
1 25
2 40
3 20
4 32
Construya un programa que calcule e imprima el costo total que representa un
paciente.
6. El costo de las llamadas telefónicas nacionales, depende de la ciudad en la
que se encuentre y del número de minutos hablados. En la siguiente tabla se
presenta el costo por minuto, por ciudad. A cada ciudad se le ha asociado una
clave.
Sentencias de control if y switch
M.Sc. Ana María Salgado G. 39
Clave Ciudad Precio
1 León 2
5 Managua 2.2
8 Estelí 4.5
9 Matagalpa 3.5
13 Jinotega 6
2 Chinandega 6
15 Rivas 5
Realice un programa en Lenguaje C, que permita calcular e imprimir el costo total
de una llamada. Use enumerados.
8. Efectúe un programa que haga las siguientes conversiones:
• De pulgadas a milímetros.
• De yardas a metros.
• De millas a kilómetros.
Use un tipo enumerado.
1 milímetro = 25.40 pulgadas
1 metro = 0.9144 yardas
1 km = 1.6093 millas
Top Related