View
216
Download
0
Category
Preview:
Citation preview
2009
UNAN – LEON
FACULTAD DE CIENCIA Y TECNOLOGIA
Departamento de Computación
Autor: MSc. Ana María Salgado G.
Asignatura:
Programación II
Ingeniería en Sistemas Sabatino
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 MsC. Ana María Salgado G. y completado con ejercicios obtenidos de otros textos e Internet.
Sentencias de control
MSc. 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
MSc. 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
MSc. 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.
Pseudocódigo:
Inicio Leer p_int, cap interes = cap * p_int Si int > 7000 entonces capf = cap + interes Fin-si Imprimir capf Fin
Solución en Lenguaje C:
//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);
}
Sentencias de control
MSc. Ana María Salgado G. 5
Ejecución:
Ejemplo #2:
Este programa lee dos números enteros y comprueba 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)
Pseudocódigo:
Inicio Leer n,d Si (n mod d = 0) entonces
Imprimir n, “es divisible por “,d Fin-si Fin
Solución en Lenguaje C:
//divisibilidad.c
#include <stdio.h>
void main(void)
{
int n, d;
printf("Introduzca dos enteros:");
scanf("%d %d",&n,&d);
if(n % d = = 0)
printf("%d es divisible por %d \n",n,d);
}
Sentencias de control
MSc. Ana María Salgado G. 6
Ejecución:
Ejemplo #3: El siguiente programa determina si un número es positivo, negativo o nulo.
Pseudocódigo:
Inicio Leer numero Si (numero > 0) entonces
Imprimir numero, “es mayor que cero “ Fin-si Si (numero < 0) entonces
Imprimir numero, “es menor que cero “ Fin-si Si (numero = 0) entonces
Imprimir numero, “es igual a cero “ Fin-si Fin
Sentencias de control
MSc. Ana María Salgado G. 7
Solución en Lenguaje C:
//comparacion.c
#include <stdio.h>
void main()
{
float numero;
/* comparar numero introducido por el usuario */
printf("Introduzca un numero positivo o negativo: ");
scanf("%f", &numero);
/* comparar numero */
if(numero > 0)
printf("%f es mayor que cero\n",numero);
if(numero < 0)
printf("%f es menor que cero\n",numero);
if(numero = = 0)
printf("%f es igual a cero\n",numero);
}
Ejemplo #4:
El siguiente ejercicio, 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
Sentencias de control
MSc. Ana María Salgado G. 8
Pseudocódigo:
Inicio TARIFA1 = 1.2 TARIFA2 = 1.0 TARIFA3 = 0.9 Leer gasto Si(gasto < 1000) entonces tasa = TARIFA1; Fin-si Si(gasto >= 1000 and gasto <= 1850) entonces tasa = TARIFA2; Fin-si Si(gasto > 1850) tasa = TARIFA3; Fin-si Imprimir "Tasa que le corresponde a “,gasto, “Kw x h es de “, tasa Fin
Solución en Lenguaje C:
//tarifaluz.c
#include <stdio.h>
#define TARIFA1 1.2
#define TARIFA2 1.0
#define TARIFA3 0.9
void main()
{
float gasto, tasa;
printf("\n Gasto de corriente: ");
scanf("%f",&gasto);
if(gasto < 1000)
tasa = TARIFA1;
Sentencias de control
MSc. Ana María Salgado G. 9
if(gasto >=1000 && gasto <= 1850)
tasa = TARIFA2;
if(gasto > 1850)
tasa = TARIFA3;
printf("\n Tasa que le corresponde a %.1f Kw x h es de %f \n",gasto, tasa);
}
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. 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.
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.
Sentencias de control
MSc. Ana María Salgado G. 10
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.
Diagrama de flujo de la representación de una sentencia if-else
Ejemplo #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.
Pseudocódigo:
Inicio Leer calif1, calif2, calif3 prom = (calif1 + calif2 + calif3)/3.0 Si (prom >= 70) entonces Imprimir “promedio = “, prom, “alumno aprobado” si no Imprimir “promedio = “, prom, “alumno reprobado” Fin-si Fin
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 rd a d e ra fa ls a
Sentencias de control
MSc. Ana María Salgado G. 11
Solución en Lenguaje C:
//aprobado_rep.c
#include <stdio.h>
int calif1, calif2, calif3;
float prom;
void main(void)
{
printf("Favor introduzca tres calificaciones:\n");
scanf("%d %d %d",&calif1, &calif2, &calif3);
prom = (calif1 + calif2 + calif3) / 3.0;
if(prom >= 70)
printf("\npromedio = %.2f, alumno aprobado\n", prom);
else
printf("\npromedio = %.2f, alumno reprobado\n", prom);
}
Ejemplo #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.
Pseudocódigo:
Inicio Leer ht Si ht > 40 entonces he = ht - 40 ss = he * 20 + 40 * 16 si no ss = ht * 16 Fin-si Imprimir “Salario semanal = ", ss Fin
Sentencias de control
MSc. Ana María Salgado G. 12
Solución en Lenguaje C:
//salariosemanal.c
#include <stdio.h>
void main(void)
{
int ht, he;
float ss;
printf("Horas trabajadas: ");
scanf("%d", &ht);
if(ht > 40)
{
he = ht - 40;
ss = he * 20 + 40 * 16;
}
else
ss = ht * 16;
printf("Salario semanal = %.2f\n",ss);
}
Ejemplo #3: 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.
El fabricante cobra por concepto de intereses un 20% sobre la cantidad que se le
pague a crédito. Realice el pseudocódigo correspondiente al programa en
Lenguaje C presentado:
Sentencias de control
MSc. Ana María Salgado G. 13
//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
MSc. Ana María Salgado G. 14
Ejemplo #4: 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.
Al pseudocódigo presentado, realizar su programa en Lenguaje C: Inicio Leer act, tiemp Si act = “dormido” entonces cg = 1.08 * tiemp si no cg = 1.66 * tiemp fin-si Imprimir cg Fin
Ejemplo #5: Escriba un programa que determine si un número entero, es divisible por otro
número entero, leídos ambos del teclado. Al programa presentado en Lenguaje C,
realizar su pseudocódigo.
//divisibilidad2.c
#include <stdio.h>
void main(void)
{
int n, d;
printf("Introduzca dos enteros:");
scanf("%d %d",&n,&d);
if(n % d = = 0)
printf("%d es divisible por %d \n",n,d);
else
printf("%d no es divisible por %d \n",n,d);
}
Sentencias de control
MSc. Ana María Salgado G. 15
Ejemplo #6: 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);
}
f(x)=
Sentencias de control
MSc. Ana María Salgado G. 16
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
Ejercicios propuestos
1. Que lea dos números y los imprima en forma ascendente.
2. Calcular el mayor de dos números leídos del teclado y visualizarlo en
pantalla.
3. Hacer un algoritmo que 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%
4. 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.
5. 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
6. 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 período
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.
7. 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
Sentencias de control
MSc. Ana María Salgado G. 17
obtener cuanto debe pagar un comprador por concepto de enganche y
cuanto por cada pago parcial.
8. Una persona desea iniciar un negocio, para lo cual piensa verificar cuánto
dinero le prestará el banco por hipotecar su casa. Tiene una cuenta bancaria,
pero no quiere disponer de ella a menos que el monto por hipotecar su casa
sea muy pequeño. Si el monto de la hipoteca es menor que $1 000 000
entonces invertirá el 50% de la inversión total y un socio invertirá el otro
50%. Si el monto de la hipoteca es de $ 1 000 000 o más, entonces invertirá el
monto total de la hipoteca y el resto del dinero que se necesite para cubrir la
inversión total se repartirá a partes iguales entre el socio y él.
9. El gobierno del estado de México desea reforestar un bosque que mide
determinado número de hectáreas. Si la superficie del terreno excede a 1
millón de metros cuadrados, entonces decidirá sembrar de la sig. manera:
Porcentaje de la superficie del bosque Tipo de árbol
70% pino
20% oyamel
10% cedro
Si la superficie del terreno es menor o igual a un millón de metros
cuadrados, entonces decidirá sembrar de la siguiente manera:
Porcentaje de la superficie del bosque Tipo de árbol
50% pino
30% oyamel
20% cedro
El gobierno desea saber el número de pinos, oyameles y cedros que tendrá
que sembrar en el bosque, si se sabe que en 10 metros cuadrados caben 8 pinos, en
15 metros cuadrados caben 15 oyameles y en 18 metros cuadrados caben 10 cedros.
También se sabe que una hectárea equivale a 10 mil metros cuadrados.
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.
Sentencias de control
MSc. Ana María Salgado G. 18
Sintaxis:
if(condición1)
sentencia1
else if(condición2)
sentencia2
.
.
. else if(condición n)
sentencia n
else
sentencia e
Ejemplo #1:
/* 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
if (x > 0) num_pos = num_pos + 1; else
if(x < 0) num_neg = num_neg + 1; else num_ceros = num_ceros + 1;
Sentencias de control
MSc. Ana María Salgado G. 19
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 #2: Leer tres números enteros diferentes e imprimir el número mayor de los tres.
Pseudocódigo:
Inicio
Leer num1, num2, num3 Si (num1 > num2) and (num1 > num3) entonces mayor = num1 si no Si (num2 > num1) and (num2 > num3) entonces mayor = num2 si no mayor = num3 Fin-si Fin-si Imprimir mayor Fin
Solución en Lenguaje C:
//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
MSc. Ana María Salgado G. 20
Ejemplo #3: 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.
//operaciones.c
#include <stdio.h>
void main()
{
int num1, num2, resul;
printf("Ingrese dos numeros enteros:\n");
scanf("%d %d",&num1,&num2);
if(num1 = = num2)
resul = num1 * num2;
else if(num1 > num2)
resul = num1 - num2;
else
resul = num1 + num2;
printf("resul = %d\n",resul);
}
Ejemplo #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
Sentencias de control
MSc. Ana María Salgado G. 21
Pseudocódigo: Inicio Leer sm, antig Si antig < 1 entonces util = sm * 0.05 si no Si (antig > = 1) and (antig < 2) entonces util = sm * 0.07 si no Si (antig > = 2) and (antig < 5) entonces util = sm * 0.10 si no Si (antig > = 5) and (antig < 10) entonces util = sm * 0.15 si no util = sm * 0.20 Fin-si Fin-si Fin-si Fin-si Imprimir “Utilidad = “, util Fin Solución en Lenguaje C: //antiguedad.c
#include <stdio.h>
int antig;
float sm, util;
void main(void)
{
printf("Salario mensual: ");
scanf("%f",&sm);
printf("Antiguedad: ");
scanf("%d",&antig);
Sentencias de control
MSc. Ana María Salgado G. 22
if(antig < 1)
util = sm * 0.05;
else if((antig >= 1) && (antig < 2))
util = sm * 0.07;
else if((antig >=2) && (antig < 5))
util = sm * 0.10;
else if((antig >= 5) && (antig < 10))
util = sm * 0.15;
else
util = sm * 0.20;
printf("Utilidad = %.2f\n",util);
}
Ejemplo #5: 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 sólo hay bolitas de los colores mencionados. Se presenta su psudocódigo, realice el programa correspondiente en Lenguaje C: Inicio leer tc, b si b = “blanca” entonces d = 0 si no si b = “verde” entonces d = tc*0.10 si no si b = “amarilla” entonces d = tc*0.25 si no si b = “azul” entonces d = tc*0.50 si no d = tc Fin-si
Sentencias de control
MSc. Ana María Salgado G. 23
Fin-si Fin-si Fin-si Fin
Ejemplo #6: 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.
Se presenta el programa escrito en Lenguaje C, realice el pseudocódigo
correspondiente:
//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
Sentencias de control
MSc. Ana María Salgado G. 24
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");
}
Ejercicios propuestos
1. 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.
2. 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 más se les da un 40% de descuento. El precio de cada computadora es de $11,000
3. 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 por el total de la compra.
4. 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 kilos de manzanas es esa frutería.
Sentencias de control
MSc. Ana María Salgado G. 25
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
MSc. Ana María Salgado G. 26
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
MSc. Ana María Salgado G. 27
Ejemplo #1:
1. 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 en del 20% (solo existen dos claves).
Pseudocódigo: Inicio Leer nomb, cve, prec_orig Seleccionar (cve) caso 1: prec_desc = prec_orig - prec_orig * 0.10 caso 2: prec_desc = prec_orig - prec_orig * 0.20 en otro caso: Imprimir “Clave invalida” Fin seleccionar Imprimir nomb, cve , prec_orig, prec_desc
Fin
Solución en Lenguaje C:
//clave.c #include <stdio.h> #include <stdlib.h> char nomb[40]; int cve; float prec_orig,prec_desc ; void main(void) { printf("Ingrese el nombre del articulo:"); gets(nomb); printf("Introduzca la clave:"); scanf("%d",&cve); printf("Ingrese el precio original:"); scanf("%f",&prec_orig);
Sentencias de control
MSc. Ana María Salgado G. 28
switch(cve) { 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\nNombre del articulo: %s\nClave: %d\n", nomb, cve); printf("Precio original = %.2f\nPrecio con descuento= %.2f\n", prec_orig, prec_desc); }
Ejemplo #2: Se necesita saber si un determinado carácter car es una vocal.
//vocal.c
#include <stdio.h>
void main()
{
char car;
printf("Ingrese un caracter:");
car = getchar();
switch(car)
{
case 'a': case 'A':
case 'e': case 'E':
case 'i': case 'I':
case 'o': case 'O':
case 'u': case 'U':
printf("%c es una vocal\n", car);
break;
Sentencias de control
MSc. Ana María Salgado G. 29
default:
printf("%c no es una vocal\n", car);
}
}
Ejemplo #3: Dada una nota de un examen mediante un código escribir el literal que le
corresponde a la nota. La calificación está dada de la A – F.
Pseudocódigo:
Inicio Leer nota Seleccionar(nota) caso ‘A’: Imprimir “Excelente. Examen superado.”
caso ‘B’: Imprimir “Notable. Suficiencia.” caso ‘C’:
Imprimir “Aprobado.”
caso ‘D’: caso ‘F’: Imprimir “Suspendido.” en otro caso: Imprimir “No es posible esa nota.” Fin seleccionar
Fin
Sentencias de control
MSc. Ana María Salgado G. 30
Solución en Lenguaje C:
#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
MSc. Ana María Salgado G. 31
Ejemplo #4: El siguiente programa hace las conversiones:
• De pulgadas a milímetros.
• De yardas a metros.
• De millas a kilómetros.
Use un tipo enumerado. Realice su pseudocódigo.
//pulgmilim.c
#include <stdio.h>
enum tipo
{
pulgmilim=1,
yardmetros=2,
millakm=3
};
enum tipo conversion;
float pulg, milim, yardas, metros, millas, km;
void main(void)
{
printf("1. Conversion de pulgadas a milimetros\n");
printf("2. Conversion de yardas a metros\n");
printf("3. Conversion de millas a kilometros\n");
scanf("%d",&conversion);
switch(conversion)
{
case pulgmilim:
printf("Cuantas pulgadas quiere convertir?\n");
scanf("%f",&pulg);
milim = 25.40 * pulg;
printf("%.1f pulgadas equivalen a %.1f milimetros\n",pulg,milim);
break;
Sentencias de control
MSc. Ana María Salgado G. 32
case yardmetros:
printf("Cuantas yardas quiere convertir?\n");
scanf("%f",&yardas);
metros = 0.9144 * yardas;
printf("%.1f yardas equivalen a %.1f metros\n",yardas,metros);
break;
case millakm:
printf("Cuantas millas quiere convertir?\n");
scanf("%f",&millas);
km = 1.6093 * millas;
printf("%.1f millas equivalen a %.1f kilometros\n",millas,km);
break;
default:
printf("Opcion invalida");
exit(1);
}
}
Ejemplo #5:
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
Sentencias de control
MSc. Ana María Salgado G. 33
/* Importe a pagar por un vehículo al circular por una autopista
* switch.c */
#include <stdio.h>
#include <stdlib.h>
void main()
{
typedef enum tipo_vehiculo
{
bicicleta = 1,
moto,
coche,
camion
} tvehiculo;
tvehiculo vehiculo;
int km, tm, importe;
printf("\t1 - bicicleta\n");
printf("\t2 - moto\n");
printf("\t3 - coche\n");
printf("\t4 - camión\n");
printf("\n\tPulse la opción deseada ");
scanf("%d", &vehiculo);
switch (vehiculo)
{
case bicicleta:
importe = 100;
break;
case moto:
case coche:
printf("\n¿Kilómetros? ");
scanf("%d", &km);
importe = 30 * km;
break;
Sentencias de control
MSc. Ana María Salgado G. 34
case camion:
printf("\n¿Kilómetros y toneladas? ");
scanf("%d %d", &km, &tm);
importe = 30 * km + 25 * tm;
break;
default:
printf("\nLa opción no es correcta\n");
return; /* error; salir de main */
}
printf("\nImporte = %d\n", importe);
}
Ejercicios propuestos
1 Realizar un programa que permita ingresar un número correspondiente a
los días de una semana y muestre el nombre del día. Use switch.
2 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”. 3 El costo de las llamadas telefónicas internacionales, depende de la zona geográfica
en la que se encuentre el país destino, y del número de minutos hablados. En la siguiente tabla se presenta el costo por minuto, por zona. A cada zona se le ha asociado una clave.
Sentencias de control
MSc. Ana María Salgado G. 35
Clave Zona Precio 12 América del Norte 2 15 América Central 2.2 18 América del Sur 4.5 19 Europa 3.5 23 Asia 6 25 Africa 6 29 Oceanía 5
4 Realice un pseudocódigo y programa en Lenguaje C que permita calcular e
imprimir el costo total de una llamada.
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 14 y 22 años
implican un costo adicional del 10%. La siguiente tabla expresa los costos
diarios, según el tipo de enfermedad.
Tipo de enfermedad Costo/Paciente/Día
1 25
2 16
3 20
4 32
Construya un programa que calcule e imprima el costo total que representa
un paciente.
Recommended