PARTE I. DE LA PROGRAMACIÓN
Capítulo 5. Estructuras de selección: sentencias if y switch
5.9. Errores frecuentes de programación
Uno de los errores más comunes en una sentencia i f es utilizar un operador de asignación (=) 2. En una sentencia i anidada, cada cláusula s e se corresponde con la i precedente más
en lugar de un operador de igualdad
cercana. Por ejemplo, en el segmento de programa siguiente
if (a O ) O )
else
c = a
+
;es la sentencia i f asociada a se?
El sistema más fácil para evitar errores es el sangrado o indentación, con lo que ya se aprecia que la cláusula else se corresponde a la sentencia que contiene la condición b
if (a O )
if O )
else
164 Programación en Metodología, algoritmos y estructura de datos
3. Las comparaciones con operadores == de cantidades algebraicamente iguales pueden producir una expresión lógica falsa, debido u que la mayoría de los números reales no se almacenan exactamente. Por ejemplo, aunque las expresiones reales siguientes son equivalentes:
a *
1 . 0
son algebraicamente iguales, la expresión
a * 1 . 0
puede ser falsa debido a que a es real.
4.
en una sentencia s w i t c h en un bloque de sentencias falta una de las llaves ( aparece mensaje de error tal como:Error
. . .
statement missing inSi no se tiene cuidado con la presentación de la escritura del código, puede ser muy difícil
5. El selector de una sentencia t ch debe ser de tipo entero o compatible entero. Así las localizar la llave que falta.
constantes reales
2 . 4 , - 4 . 5 , 3 . 1 4 1 6
no pueden ser utilizadas en el selector.
6. Cuando se utiliza una sentencia s w i t ch, asegúrese que el selector de s w i t ch y las etiquetas
c a s e son del mismo tipo (in t , c h a r pero no f o a t ) . Si el selector se evalúa a un valor listado en ninguna de etiquetas c a s e , la sentencia s w i t ch no gestionará ninguna acción;
por esta causa se suele poner etiqueta t pura resolver este problema.
Múltiples alternativas
5.10. RESUMEN
Sentencia i f Una alternativa resultado = Dos alternativas if (a O ) f = f 0.5; if puts "Negativo") ; = else if == puts "Cero" = O ; else puts ("positivo") ; = x;Estructuras de selección: sentencias L y t
case 'A' : case 'a :
puts ; break; puts ; break; puts ; break; puts ; break; puts no válida") ; case case 'b': case ' : case 'c ' : case 'D': case default: Sentencia switch I
5.1
EJERCICIOS
5.1. errores de sintaxis tiene la siguiente sen- tencia?
if x 25.0
else y = x y = z;
5.2. valor se asigna a consumo en la senten- cia if siguiente si velocidad es
if (velocidad 80) consumo 10.00; else if (velocidad 100) consumo 12.00; else if (velocidad 120) consumo 15.00;
5.3. Explique las diferencias entre las sentencias de la columna de la izquierda y de la columna de la derecha. Para cada una de ellas deducir el valor final de x si el valor inicial de x es O.
if O) if O)
else if 1); if 1)
x++ ; ;
X+= 2; x+= 2;
5.4. salida producirá el código siguiente, cuan- do se empotra en un programa completo y primera-opcion vale vale int primera-opcion; switch (primera-opcion
+
1) case 1: puts ; break; puts ; break; puts ; puts de ; break; case 2: case 3: case 4: default: puts ;- -
166 Programación en Metodología, algoritmos y estructura de datos
5.5. 5.6. 5.7. 5.8. 5.9. 5.10. 5.11.
salida producirá el siguiente código, cuando se empotra en un programa completo?
int x = 2;
puts ("Arranque" ;
if 3)
if ! = O)
puts ("Hola desde el segundo if")
else
puts ( "Hola el else. ;
puts de nuevo'' ;
if 3)
if ! = O)
puts ("Hola desde el segundo
if ;
else
puts ("Hola desde el else. ;
puts nuevo ;
Escribir una sentencia f - e 1 se que visualice la palabra Alta si el valor de la variable nota es mayor que y Baja si el valor de esa nota es menor que 100.
hay de incorrecto en el siguiente código?
if (x O) =
else printf != ;
es el error del siguiente código?
if y
es error de este código?
printf ("Introduzca ;
scanf ;
if O)
número es negati- vo. Pruebe de nuevo.") ;
scanf , ;
printf n ;
Escribir un programa que lea tres enteros y emita un mensaje que indique si están o no en orden numérico.
else
Escribir una sentencia i f -e 1 se que clasifique un entero en una de las siguientes categorías
y escriba un mensaje adecuado:
5.12. 5.13. 5.14. 5.15. 5.16. 5.17. x o bien
o
x 100 o bien x 100Escribir un programa que introduzca el número de un mes (1 a 12) y visualice el número de días de ese mes.
Se trata de escribir un programa que clasifique enteros leídos del teclado de acuerdo a los siguientes puntos:
si el entero es 30 o mayor, o negativo, visualizar un mensaje en ese sentido; en caso contrario, si es un nuevo primo, potencia de 2, o un número compuesto, visualizar el mensaje correspondiente; si son cero o visualizar 'cero'o 'uni- dad'.
Escribir un programa que determine el mayor de tres números.
El domingo de Pascua es el primer domingo después de la primera luna llena posterior al equinoccio de primavera, y se determina mediante el siguiente cálculo sencillo:
A año mod 19 año mod 4 = año mod 7 D (19 * A
+
24) mod 3 0 E (2+
4 6*
D + 5 ) (22+
D+
E ) mod 7Donde indica el número de día del mes de marzo (si N es igual o menor que 3) o abril (si es mayor que 31). Construir un programa que determine fechas de domingos de Pascua.
Codificar un programa que escriba la cali- ficación correspondiente a una nota, de acuerdo con el siguiente criterio:
O a Suspenso
5 a Aprobado
6.5 a 8.5 Notable 8.5 a 10 Sobresaliente 10 Matrícula de honor.
Determinar si el carácter asociado a
introducido por teclado corresponde a un carácter alfabético, dígito, de puntuación, especial o no
Estructuras de selección: sentencias y 167
PROBLEMAS
5.1. 5.2. 5.3. 5.4. 5.5.Cuatro enteros entre O y 100 representan las pun- tuaciones de un estudiante de un curso de infor- mática. Escribir un programa para encontrar la media de estas puntuaciones y visualizar una tabla de notas de acuerdo al siguiente cuadro:
Media Puntuación 80-89
70-79
0-59
I
Escribir un programa que lea la hora de un día de notación de 24 horas y la respuesta en notación de 12 horas. Por ejemplo, si la entrada es la salida será
PM
El programa pedirá al usuario que intro- duzca exactamente cinco caracteres. Así, por ejemplo, las nueve en punto se introduce como
Escribir un programa que acepte fechas escri- tas de modo usual y las visualice como tres números. Por ejemplo, la entrada
producirá la salida
15, Febrero 1989
15 2 1989
Escribir un programa que acepte un número de tres dígitos escrito en palabra y a continuación los visualice como un valor de tipo entero. La entrada se termina con un punto. por ejemplo, la entrada
doscientos veinticinco producirá la salida
225
Escribir un programa que acepte un año escrito en cifras arábigas y visualice el año escrito en números romanos, dentro del rango a
Nota: Recuerde que V = 5 L = 50
MCM = MCMLX = 1960 = 1989 = 10 = 900 MCML = 1950 = 1940
5.6. Se desea redondear un entero positivo N a la centena más próxima y visualizar la salida. Para ello la entrada de datos debe ser los cuatro dígitos del entero N. Por ejemplo, si A es 2, I3 es 3, C es 6 y D es 2, entonces N será 2362 y el resultado redondeado Si N es 2342, el resultado será 2300, y si N = 2962, entonces el número será 3000. Diseñar el programa correspondiente.
Se quiere calcular la edad de un individuo, para ello se va a tener como entrada dos fechas en el formato día (1 a mes (1 a 12) y año (entero de cuatro dígitos), correspondientes a la fecha de nacimiento y la fecha actual, respec- tivamente. Escribir un programa que calcule y visualice la edad del individuo. Si es la fecha de un (menos de un año de edad), la edad se debe dar en meses y días; en caso contrario, la edad se calculará en años.
Escribir un programa que determine si un año es bisiesto. Un año es bisiesto si es múltiplo de 4 (por ejemplo, 1984). Sin embargo, los años múltiplos de 100 sólo son bisiestos cuando a la vez son múltiples de (por ejemplo, 1800 no es bisiesto, mientras que sí lo será).
5.9. Escribir un programa que calcule el número de días de un mes, dados los valores numéricos del mes y el año.
5.10. Se desea calcular el salario neto semanal de los trabajadores de una empresa de acuerdo a las siguientes normas:
Horas semanales trabajadas 38 a una tasa
Horas extras (38 o más) a una tasa 50 por
Impuestos O por 100, si el salario bruto es
Impuestos 10 por 100, si el salario bruto es
5.11. Determinar el menor número de billetes y
monedas de curso legal equivalentes a cierta cantidad de pesetas (cambio óptimo).
5.12. Escribir y ejecutar un programa que simule un calculador simple. Lee dos enteros y un carác- ter. Si el carácter es un
+,
se imprime la suma; si es un-, se imprime la diferencia; si es un se imprime el producto; si es un se imprime el cociente; y si es un se imprime el resto. Nota: utilizar la sentencia switch.5.7.
5.8.
dada.
superior a la ordinaria.
menor o igual a 50.000 pesetas.