2010
UNAN – LEONFACULTAD 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
(SENTENCIA 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.
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.
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.
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).
//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); }
Ejemplo #3:
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;
default:
printf("%c no es una vocal\n", car); }
Ejemplo #4:
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.
#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”); }
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(); 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); }
Ejemplo #6:
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; 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 #7:
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. Además, utilice break y una opción por defecto que imprima “El modelo no es válido”.
//modelo.c #include <stdio.h> #include <stdlib.h> void main() { enum modelo { cutlass = 1, cavalier = 2, chevy = 3, century = 4 };
float precio, nuevoprecio; enum modelo tipocar; printf("Modelos\n"); printf("---\n"); printf("1. Cutlass\n"); printf("2. Cavalier\n"); printf("3. Chevy\n"); printf("4. Century\n");
printf("\n Introduzca el modelo:"); scanf("%d",&tipocar); printf("Precio: "); scanf("%f",&precio); switch(tipocar) { case cutlass:
nuevoprecio = precio - (precio * 0.08); break;
case cavalier:
nuevoprecio = precio - (precio * 0.05); break;
case chevy:
nuevoprecio = precio - (precio * 0.06); break;
case century:
nuevoprecio = precio - (precio * 0.09); break;
default:
printf("El modelo no es valido"); exit(1);
}
printf("Precio con descuento = %.2f\n",nuevoprecio); }
Ejercicios propuestos
1. Escriba un programa que realice las conversiones: • De pulgadas a milímetros.
• De yardas a metros. • De millas a kilómetros. Use un tipo enumerado.
2. Diseñe 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. 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)
4. 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.
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
Realice un 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, 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. 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.