Bolet´ın de ejercicios de la asignatura de INFORM´ATICA

Anuncio
Boletı́n de ejercicios de la asignatura de INFORMÁTICA
para la realización de las prácticas de laboratorio
Ejercicios de Estructuras de Control
Escuela Técnica Superior de Ingenierı́a Geodésica, Cartográfica y
Topográfica (UPV)
Pedro Alonso Jordá
Fernando Garcı́a Granada
Laura Sebastiá Tarı́n
Miguel Vicente Ripollés
{palonso,fgarcia,lstarin,mvicente}@dsic.upv.es
Curso 2007-2008
Ejercicio 1. Escribir un programa que lea un número entero y diga si es par o impar.
Ejercicio 2. Implementar un programa en C que permita resolver el siguiente problema: determinar
la cantidad total a pagar por una llamada telefónica, teniendo en cuenta lo siguiente:
toda llamada que dure menos de 1 minuto tiene un coste de 10 céntimos,
cada minuto adicional a partir del primero cuesta 5 céntimos.
Ejercicio 3. Implementar un programa en C que dados tres números enteros calcule el máximo y el
mı́nimo.
Ejercicio 4. Escribir un programa que lea un año y diga si es o no bisiesto. Un año es bisiesto cuando
es divisible por 4 y no lo es por 100. Alternativamente, tambié es bisiesto cuando es divisible por
400.
Ejercicio 5. Escribir un programa que determine si un atleta es seleccionado para correr una maratón.
Para ser seleccionado, los tiempos de clasificación son 150 minutos para hombres menores de 40
años, 175 minutos para hombres mayores de 40 años, y 180 minutos para mujeres. Los datos a
introducir son: sexo (valores posibles: H, M), edad y tiempo. El programa visualizará el mensaje
“Seleccionado” o “No seleccionado”.
NOTA: Recordad que las constantes de tipo caracter se representan entre comillas simples, por
ejemplo, ’h’. Repasad también el Ejercicio 13 del Boletı́n1 para la introducción de caracteres por
teclado.
1
2
Ejercicio 6. Escribir un programa en C que sea equivalente al siguiente fragmento de programa, pero
sin utilizar la estructura de control de selección múltiple switch:
scanf ("%d", &a);
switch (a) {
case 2:
case 5:
case 8:
case 11: printf ("A\n");
break;
case 3:
case 6:
case 9:
case 12: printf ("B\n");
break;
case 4:
case 7:
case 10:
case 13: printf ("C\n");
break;
}
Ejercicio 7. Dado el siguiente programa en C:
main () {
int a,b,i,aux,resultado;
printf ("Introduce dos numeros enteros ");
scanf ("%d%d", &a, &b);
if (a > b) {
aux=a;
a=b;
b=aux;
}
resultado=1;
for (i=a+1; i<=b; i=i+1) {
resultado=resultado*i;
}
printf ("El resultado es: %d \n", resultado);
}
responder a las siguientes cuestiones:
¿Cuál serı́a el resultado del programa si los datos introducidos fuesen 3 y 6?. Demostrarlo
con una traza.
¿Y si los datos introducidos fuesen 7 y 7 ?. No se pide traza.
¿El resultado del programa depende del orden en que son introducidos los datos?. Responder
SI o NO y explicar brevemente por qué.
Expresar con una fórmula qué cálculo hace este programa cuando a <= b.
Boletı́n de ejercicios de INFORMÁTICA
3
Ejercicio 8. ¿Qué se visualiza en los siguientes programas?
main () {
int i;
i=0;
while (i<6) {
printf ("El valor de i es %d \n", i);
i=i+1;
}
}
main () {
int i;
i=0;
while (i<6) {
i=i+1;
printf ("El valor de i es %d \n", i);
}
}
Ejercicio 9. Implementar un programa en C que lea un número entero correspondiente a un mes del
año, validando la corrección del mismo. El programa debe solicitar un nuevo número si el valor
introducido no está en el intervalo [1, 12]. Cuando el valor sea correcto, el programa mostrará el
nombre del mes correspondiente.
Ejercicio 10. Escribir un programa en C para calcular el cociente y resto de la división entera de dos
números enteros, utilizando para ello la operación de resta o sustracción.
Ejercicio 11. Escribir un programa en C para determinar si un número entero es primo o no.
Ejercicio 12. Escribir un programa en C para calcular la suma de los números enteros comprendidos
entre N y M , siendo N y M valores introducidos por el usuario.
Ejercicio 13. Realizar un programa en C para leer 10 números y calcular, independientemente, la suma
de los números pares e impares.
Ejercicio 14. Dado un número N , escribir un programa en C que genere todos los números múltiplos
de 7 que hay entre 1 y N .
Modificar el programa anterior para que visualize sólo aquellos múltiplos de 7 entre 1 y N que no
son divisibles entre 3.
Ejercicio 15. Escribir un programa que genere la secuencia de números: 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2,
3, 4, 5, . . . , 1, 2, 3, . . .
Ejercicio 16. Escribir un programa en C que lea una serie de números positivos y distintos de 0
y obtenga el mayor de ellos. Introducir un número negativo para detectar el final de la serie
numérica.
Ejercicio 17. Escribir un programa en C que lea un conjunto de 100 números naturales almacenados
en un fichero y determine:
Boletı́n de ejercicios de INFORMÁTICA
4
¿Cuántos son menores o iguales que 15?
¿Cuántos son mayores o iguales que 50?
¿Cuántos están comprendidos entre 25 y 45, ambos inclusive?
Para gerenar dicho fichero se puede utilizar el siguiente código:
int i;
FILE *fp;
fp = fopen("Fichero.txt","w");
srand(1234);
for( i=0; i<100; i++ ) {
fprintf(fp,"%d\n",rand()%100);
}
fclose(fp);
que crea el fichero Fichero.txt con 100 números enteros comprendidos entre 0 y 100 (es necesario incluir los ficheros de cabecera stdio.h y stdlib.h). Tomando ese fichero como entrada, el
resultado del ejercicio es:
Menores de 15 = 23
Mayores de 50 = 45
Entre 25 y 45 = 17
Ejercicio 18. Implementar un programa en C que lea 100 números reales almacenados en un fichero y
calcule la media de los números positivos y la de los negativos.
Para gerenar dicho fichero se puede utilizar el siguiente código:
int i;
FILE *fp;
fp = fopen("Fichero.txt","w");
srand(1234);
for( i=0; i<100; i++ ) {
fprintf(fp,"%lf\n",((double) rand())/((double) RAND_MAX) - 0.5);
}
fclose(fp);
que crea el fichero Fichero.txt con 100 números reales comprendidos entre -0.5 y 0.5. (es necesario
incluir los ficheros de cabecera stdio.h y stdlib.h). El resultado en este caso es de 0.233231 de
media para los positivos y -0.260781 de media para los negativos.
Ejercicio 19. Implementar un programa en C que, dados dos números enteros, devuelva si uno es
divisor del otro. (Hay que detectar cual es el más pequeño; no se puede utilizar la operación de
división ni de resto; se suponen que los dos números son > 0). La salida del algoritmo debe ser del
tipo:
xxx [no] es divisor de yyy
Ejercicio 20. Escribir un programa que encuentre el primer valor N para el que la suma 1 + 2 + 3
+... + N exceda a un valor LIMITE que se introduce por teclado.
Boletı́n de ejercicios de INFORMÁTICA
5
Ejercicio 21. El siguiente programa en C lee un número N y devuelve un número M . Describir en dos
lı́neas cuál es la relación que existe entre N y M y poner un ejemplo de un dato de entrada y otro
de salida. Realizar una traza para N = 2341.
main () {
int A, B, D, N, M=0, i=0, j, k;
printf ("Introduce un numero entero: ");
scanf ("%d", &N);
A=N;
while ((A/10) != 0) {
A=A/10;
i=i+1;
}
B=N;
for (j=i; j>= 0; j--) {
D=1;
for (k=0; k<j; k++ ) D=D*10;
M=M+(B%10)*D;
B=B/10;
}
printf (" El resultado es %d", M);
}
Ejercicio 22. Escribir un programa en C que lea las calificaciones de los alumnos de una determinada
asignatura hasta que el usuario introduzca una calificación negativa, y al final escriba el número
de aprobados, el número de suspendidos, y la calificación media.
Ejercicio 23. Escribir un programa en C que dado un número entero N 1, devuelva otro número entero
N 2 que sea el resultado de eliminar la primera y última cifra de N 1. (Nota: Si N 1 tiene 2 cifras o
una sola, entonces N 2 deberá ser 0) Ejemplos: N1=42635 → N2=263; N1=23 → N2=0
Ejercicio 24. Una persona dispone de una cantidad de X euros que quiere repartir a un conjunto de
personas. A cada persona le da una cantidad de dinero proporcional a la edad de la misma; ası́ por
ejemplo, si una persona tiene 17 años recibirá 1.700 euros y si tiene 32 años, recibirá 3.200 euros.
El problema consiste en hacer un programa que devuelva el número de personas que podrán recibir
una cantidad de dinero.
Nota: Cuando la cantidad de dinero ya no es suficiente para dársela a una persona, se supone que
no existen más personas y que, por tanto, el algoritmo finaliza.
Ejercicio 25. Un número se dice que es capicúa si leı́do de derecha a izquierda da el mismo resultado
que leı́do de izquierda a derecha. Por ejemplo, los números 22, 343, 5665 o 12321 son capicúas.
Implementar un programa en C que lea desde teclado un número entero mayor de 9 y devuelva si
el número es capicúa o no.
Ejercicio 26. Implementar un programa en C que calcule el máximo, el mı́nimo y la media de una lista
indefinida de números enteros positivos introducidos desde el teclado. En el caso de introducir un
número negativo dicho número deberá ser rechazado indicando el motivo (a través de la pantalla)
por el que ha sido rechazado (”es negativo”). La entrada de datos finalizará cuando se introduzca
el valor 0.
Boletı́n de ejercicios de INFORMÁTICA
6
Ejercicio 27. Implementar un programa en C que, dado un número entero N mayor que cero, calcule
los múltiplos de 3 que hay entre 3 y N y, para cada múltiplo, calcule los divisores del mismo.
Ejemplo: para N = 10 el resultado será
múltiplo=3 divisores del 3 = {1,3}
múltiplo=6 divisores del 6 = {1,2,3,6}
múltiplo=9 divisores del 9 = {1,3,9}
Ejercicio 28. Se dispone de un conjunto de N alumnos y para cada uno de ellos las calificaciones
correspondientes a 7 asignaturas (numeradas del 1 al 7). Implementar un programa en C para
calcular el tanto por ciento de aprobados de cada asignatura.
Ejercicio 29. Se dispone de un conjunto de N familias, cada una de las cuales tiene un número de
hijos. Escribir un programa en C capaz de averiguar la media de edad de los hijos de todas las
familias.
Ejercicio 30. Un número entero se puede descomponer en una suma de números primos. Por ejemplo
el número 8 se puede poner como 7+1, el número 9 como 7+2, el número 6 como 5+1 y un
número primo se descompone únicamente en sı́ mismo. Escribe un programa en C que devuelva
los números primos en los que se puede descomponer un número entero.
Nota: Algunos números como el número 9 también se podrı́a descomponer como 3+3+3 o 5+3+1,
pero el algoritmo debe usar siempre los números primos mayores posibles y el menor número de
ellos.
Boletı́n de ejercicios de INFORMÁTICA
Descargar