Boletín 2 - Estructuras de control selectivas

Anuncio
Boletín 2
1. Escriba el siguiente código , compílelo y ejecútelo. ¿Obtiene el resultado esperado?
Modifíquelo para que se comporte como debe:
#include <stdio.h>
int main ()
{
int i, j;
scanf("%d%d",&i,&j);
if (i = j)
printf("los números leídos son iguales\n");
else
printf("los números leídos son distintos\n");
return 0;
}
2. Escriba el siguiente código, compílelo y ejecútelo. Modifíquelo para que funcione
correctamente:
#include <stdio.h>
int main ()
{
int i, j, k=5;
scanf("%d%d",&i,&j);
if (i<k<j)
printf("k está entre los números leídos\n");
else
printf("k no está entre los números leídos\n");
}
3. Escriba el siguiente código, compílelo y ejecútelo. Modifíquelo para que funcione
correctamente:
#include <stdio.h>
int main ()
{
int i;
scanf("%d",&i);
switch(i){
case (1):
printf("i es igual a 1\n");
case (-1):
printf("i es igual a -1\n");
case (0):
printf("i es igual a cero\n");
default:
printf("i toma otro valor\n");
}
}
4. El siguiente código debería mantener el valor de a como 20, pero no lo hace. Explique
el porqué, y modifique el código para que funcione correctamente:
#include <stdio.h>
int main ()
{
int a = 20;
if (a > 0)
if (a < 15)
a = a * 2;
else
a = 0;
printf("a vale %d\n",a);
}
5. Escriba un programa que lea un dato de la entrada estándar y calcule e imprima su
inverso. Considere el caso especial del valor 0, en cuyo caso el programa (¡no el
sistema operativo!) deberá mostrar el mensaje “ERROR – división por cero”.
6. Escriba un programa que lea un número entero desde la entrada estándar y
compruebe si es correcto. En caso negativo, el programa imprimirá el mensaje “ERROR
– número incorrecto”. Considere los siguientes casos para decidir si un número es o no
correcto:
a) El número es correcto si se encuentra en el rango definido por dos valores
constantes MINIMO y MAXIMO.
b) El número es correcto si es uno de los tres valores constantes VALOR1, VALOR2 o
VALOR3.
c) El número es correcto si se encuentra en el rango definido por dos valores
constantes MINIMO y MAXIMO, o bien es igual al valor constante VALOR1.
d) El número es correcto si se encuentra en el rango definido por dos valores
constantes MINIMO1 y MAXIMO1, o bien en el definido por los valores constantes
MINIMO2 y MAXIMO2.
7. Escriba un programa que lea un instante de tiempo expresado en horas y minutos y
escriba como respuesta uno de los mensajes “Buenos días”, “Buenas tardes” o
“Buenas noches, de acuerdo con las siguientes reglas:
a) Se considera que es de día desde las 7:30 horas hasta las 14:00 horas.
b) Se considera que es por la tarde desde las 14:01 hasta las 20:30 horas.
c) Se considera que es de noche desde las 20:31 horas hasta las 7:29 horas.
8. El siguiente programa incompleto indica si un número que se ha leído desde la entrada
estándar es par:
#include <stdio.h>
int main ()
{
int numero;
scanf("%d", &numero);
if (?????)
printf("Es un número par");
else
printf("Es un número impar");
}
Reemplace los interrogantes por la expresión lógica adecuada para que el programa
cumpla su cometido.
9. Modifique el programa anterior para que compruebe si el número es múltiplo de un
número variable n, que se habrá leído previamente de la entrada estándar.
10. Escriba un programa que lea dos números de la entrada estándar y los escriba en la
salida estándar ordenados de mayor a menor.
11. Escriba un programa que lea un carácter de la entrada estándar e indique su tipo, que
podrá ser uno de los siguientes: letra mayúscula (de la ‘A’ a la ‘Z’), letra minúscula (de
la ‘a’ a la ‘z’), dígito (del ‘0’ al ‘9’) u otro. Si se trata de una letra minúscula escribirá,
además, la correspondiente letra mayúscula.
12. Desarrolle un programa que lea de la entrada estándar las coordenadas cartesianas
(x, y) de un punto del plano y calcule e imprima el cuadrante al cual pertenece el
punto. Hágalo de dos formas distintas:
a. Utilizando 4 estructuras selectivas simples.
b. Utilizando 2 estructuras dobles anidadas.
13. Generalice el programa anterior al espacio tridimensional. Cada punto tiene ahora 3
coordenadas (x, y, z) y puede estar situado en 8 cuadrantes diferentes. Finalmente
incluya la posible coincidencia con los ejes de coordenadas y el origen (0, 0, 0).
14. Escriba un programa que lea un número x de la entrada estándar y lleve a cabo las
siguientes operaciones:
a. Si es positivo, calculará e imprimirá su raíz cuadrada (use la función sqrt).
b. Si es distinto de cero, calculará e imprimirá su inverso (1/x).
c. Si es par, calculará e imprimirá su cociente entre 2 (x/2).
d. Si es positivo y menor que 10, imprimirá el mensaje “sólo tiene un dígito”.
e. Si está comprendido entre 32 y 127 (ambos inclusive) imprimirá el carácter
cuyo código ASCII representa.
15. Sea el siguiente programa incompleto:
#include <stdio.h>
int main ()
{
int ca, ce, ci, co, cu;
char caracter;
scanf("%c", &caracter);
...
printf("%d%d%d%d%d\n", ca, ce, ci, co, cu);
}
Complete el programa para que imprima 10000 si el carácter leído es una ‘a’, 01000 si
es una ‘e’, 00100 si es una ‘i’, 00010 si es una ‘o’, 00001 si es una ‘u’ y ‘00000’ en
cualquier otro caso. Hágalo en primer lugar con estructuras selectivas anidadas, y
posteriormente con una estructura switch.
16. Se desea escribir un programa para el cálculo del área de diversas superficies:
cuadrado, rectángulo, círculo, triángulo y trapecio. El programa mostrará al inicio el
siguiente menú:
============================================
CÁLCULO DE SUPERFICIES (versión 1.0)
============================================
1. Cuadrado
lado*lado
2. Círculo
pi*radio*radio
3. Rectángulo
base*altura
4. Trapecio
(base1+base2)*altura/2
5. Triángulo
(base*altura)/2
============================================
Seguidamente leerá de la entrada estándar un valor que estará comprendido entre 1 y
5, indicando el tipo de superficie cuya área se desea calcular. El programa leerá
entonces los datos que necesite para calcular el área en cuestión. El resultado se
mostrará en la salida estándar, tras lo cual el programa terminará.
17. El siguiente programa lee dos números enteros de la entrada estándar y calcula e
imprime el mayor de ellos. Complételo utilizando una estructura selectiva doble.
#include <stdio.h>
int main ()
{
int a, b, maximo;
scanf("%d%d", &a, &b);
?????
printf("\nEl máximo de %d y %d es %d", a, b, maximo);
}
18. Modifique el programa anterior para que, en caso de igualdad de los dos números
leídos, escriba el mensaje “ambos números son iguales”.
19. Escriba un programa que lea tres números a, b, c de la entrada estándar y los escriba
en la salida estándar ordenados de mayor a menor. Utilice el siguiente esquema como
ayuda:
{
{
20.
21.
22.
23.
24.
{
{
{
Considere ahora 4 números en lugar de 3. Construya un esquema similar al anterior
para ayudarse.
Escriba un programa que convierta de grados Fahrenheit a Celsius y viceversa. El
programa deberá leer en primer lugar un número entero que indicará si se va a
convertir de grados Fahrenheit a Celsius (1) o de grados Celsius a Fahrenheit (2).
Seguidamente leerá el valor de la temperatura, realizará la conversión aplicando la
fórmula adecuada y mostrará el resultado en la salida estándar.
Escriba un programa que lea dos fechas dadas por un día, mes y año e indique cuál de
ellas es anterior en el tiempo a la otra.
Escriba un programa que lea dos fechas de un mismo año dadas por un día y un mes y
calcule el número de días transcurridos entre ambas. Tenga en cuenta que el año
puede ser bisiesto.
Escriba un programa que lea dos instantes de tiempo expresados en horas, minutos y
segundos e indique cuál de ellos es anterior al otro. Hágalo de dos formas:
a. Calcule los segundos transcurridos desde las 00:00 horas hasta cada uno de
ellos y compárelos.
b. Compare directamente las horas, los minutos y los segundos de ambos
instantes de tiempo.
Escriba de la entrada estándar tres números enteros que representan las longitudes de
tres segmentos rectilíneos, e indique si dichos segmentos pueden formar o no un
triángulo (la condición necesaria pero no suficiente es que ninguno de los segmentos
tenga una longitud superior a la suma de los otros dos).
25. El siguiente programa en pseudocódigo obtiene las soluciones de una ecuación de
segundo grado (sin considerar las soluciones imaginarias). La ecuación es:
Y las soluciones vienen dadas por
√
Leer a, b, c
d  b2 – 4ac
si
d = 0:
x  -b / (2.0a)
| d > 0:
x1  (-b+raiz2(d))/(2.0a)
x2  (-b+raiz2(d))/(2.0a)
escribir x1, x2
| d < 0:
nula
fsi
Escriba el programa correspondiente en lenguaje C.
26. Modifique el programa anterior para que considere las soluciones imaginarias. Para
ello, considere el siguiente fragmento de código:
...
int signo = 0;
...
d = b*b - 4*a*c;
if (d > 0)
signo = 1;
else if (d < 0)
signo = -1;
...
Utilice la variable signo calculada de esta forma como la expresión de una estructura
switch (Pista: compare los tres posibles valores de signo con los tres casos a considerar
en el problema).
27. Escriba una sentencia switch que a partir de una nota expresada en forma numérica
imprima su correspondiente literal, según la siguiente correspondencia: 0 a 4
SUSPENSO, 5 y 6 APROBADO, 7 y 8 NOTABLE, 9 y 10 SOBRESALIENTE. Para cualquier
otro valor de la nota numérica se imprimirá el mensaje VALOR INCORRECTO.
Descargar