Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ESTRUCTURAS DE CONTROL
Ejercicio 1
Ejercicio 2
#include <stdio.h>
main(){
int a, b, i, aux, resultado;
Ejercicio 3
#include <stdio.h>
main(){
int A, B, D, N, M=0, i=0, j, k;
A=N;
while ((A/10) != 0) {
A=A/10;
i++;
}
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\n", M);
}
Ejercicio 4
#include <stdio.h>
void main(){
int a,b,i,aux,resultado;
a) ¿Cuál sería el resultado del programa si los datos introducidos fuesen 3 y 6?. Demuéstralo con una
traza.
b) ¿Y si los datos introducidos fuesen 7 y 7?.
c) ¿El resultado del programa depende del orden en que son introducidos los datos?
d) Expresa con una fórmula qué cálculo hace este programa cuando a<=b
Boletín de ejercicios (4)
Ejercicio 5
#include <stdio.h>
void main() {
float radio, resultado;
resultado = 200;
printf (“Introduzca dato: “);
while (dato>0) {
if (dato < 100) dato = dato + 200;
else if (dato < 200) dato = dato + 100;
if (dato > resultado) resultado = dato;
printf (“Introduzca dato: “);
scanf (“%f”, &dato);
}
printf (“El resultado es: %f\n”, resultado);
}
Ejercicio 6
#include <stdio.h>
void main(){
int numeroX, numeroY, misterioA, misterioB, misterioC;
Ejercicio 7
Hacer un programa en C que permita determinar la cantidad total a pagar por una llamada telefónica de
N pasos (introducido por el usuario), teniendo en cuenta lo siguiente:
a) toda llamada que sea menor o igual a 5 pasos tiene un coste de 10 pesetas.
b) cada paso adicional a partir de los 5 primeros cuesta 5 pesetas
Boletín de ejercicios (5)
Ejercicio 8
El número de individuos de una población animal afectada por una epidemia se reduce a la quinta parte
cada año. Escribe un programa en C que lea el número de individuos inicial y un número de años N y
escriba el número de individuos que quedarán en cada uno de los siguientes N años (al cabo de 1 año, a
cabo de 2 años, ..., al cabo de N años)
Ejercicio 9
En una industria se fabrican planchas rectangulares que se venden en lotes de 10 planchas. Una plancha
se considera defectuosa si su superficie es inferior a 4.4 metros cuadrados, y se considera buena si es
superior. Un lote se considera defectuoso si tiene una o más planchas defectuosas, y bueno si todas sus
planchas son buenas. Se dispone de los datos sobre el ancho y el largo de 500 planchas correspondientes
a 50 lotes. Escribe un programa en C que lea el ancho y el largo de las planchas y escriba:
- el número de lotes buenos
- la superficie media de todas las planchas de los lotes buenos
Nótese que no se pide la superficie media de todas las planchas buenas. El programa debe diseñarse
para que cuando se detecte que una plancha de un lote es defectuosa, no se incluyan los datos de las
planchas de este lote para calcular la superficie media. No se admite una solución que emplee vectores.
Ejercicio 10
Ejercicio 11
Los pacientes con síntomas de una cierta enfermedad son ingresados en el hospital si tienen un valor
superior a 0.6 en la medición de un determinado índice, y son operados si el valor es superior a 0.9.
Escribe un programa en C que lea desde teclado el número de pacientes seguido de la edad y el índice
de cada paciente, y calcule la edad media de los pacientes analizados así como de los ingresados y de
los operados.
Ejercicio 12
Una persona dispone de una cantidad de X pesetas que quiere repartir a un conjunto de personas. A
cada persona le da una cantidad de dinero proporcional a la edad de la misma. Por ejemplo, si una
persona tiene 17 años recibirá 17000 ptas y si tiene 32 años recibirá 32000. El problema consiste en
diseñar un algoritmo que devuelva el número de personas que podrán recibir una cantidad de dinero.
Cuando la cantidad de dinero ya no es suficiente para dársela a una persona, suponemos que no existen
más personas y que por tanto el programa finaliza.
Ejercicio 13
Se conocen los gastos en vivienda, alimentación, energía, vestuario y transportes de una familia durante
cada uno de los 12 meses del año. Escribe un programa en C que lea dichos datos y muestre por
pantalla el gasto total en cada trimestre, el gasto total anual y el porcentaje de gasto de cada concepto
sobre el total anual.
Boletín de ejercicios (6)
Ejercicio 14
Escribe un programa que calcule la composición de un capital a interés compuesto, según la fórmula:
Y = X ∗ (1 +1 / 100 ) N
El programa debe solicitar al usuario el capital prestado X y el tipo de interés I (un número real entre 5
y 12), y debe mostrar por pantalla el valor de Y (que es el capital equivalente a interés compuesto) para
N=1,2,...,15 años. El programa debe permitir al usuario repetir los cálculos con otros datos si lo desea,
terminando cuando se introduzca un valor 0 para X.
Ejercicio 15
Un autobús hace un recorrido por una ciudad desde un punto inicial donde suben N personas hasta un
punto final donde descienden todas. El autobús realiza X paradas intermedias. Se sabe que en las
paradas intermedias suben siempre 3 personas más que en la parada anterior y que desciende el 50% de
la gente del autobús (sin contar los que suben en dicha parada). ¿Cuántas personas llegarán hasta el
final del trayecto? Pedir al usuario los valores de N y X. Por ejemplo:
N = 10 X = 3
Inicio : nºpersonas = 10
Parada 1 : bajan = 5
suben = 13
nºpersonas = 18
Parada 2 : bajan = 9
suben = 16
nºpersonas = 25
Parada 3 : bajan = 12
suben = 19
nºpersonas = 32
Ejercicio 16
Dada la fecha de hoy, calcular la fecha del día siguiente. (Suponga que el año no es bisiesto).
Ejercicio 17
Hacer un programa que lea la población inicial de bacterias, un límite de crecimiento deseado y diga
cuántos días se necesitan para alcanzar esa población, teniendo en cuenta los esquemas de crecimiento
especificados.
Ejercicio 18
Construir un programa que calcule y presente por pantalla el signo del zodiaco a partir de la
introducción por teclado del día y mes de nacimiento como números enteros.
Boletín de ejercicios (7)
DATOS
Ejercicio 19
Escribir un programa que, dada la hora en un reloj digital de 24 horas, y el tiempo de cocción, calcule a
qué hora estará lista la comida.
VECTORES
Ejercicio 1
Escribe un programa que, dado un vector de N elementos (que se introducen por teclado), almacene en
un vector auxiliar cuántas veces aparecen cada uno de los elementos. Por ejemplo:
- vector leído : 2 5 1 4 2 1 2
- vector obtenido : 2 3 0 1 1
(el valor 1 aparece dos veces en el vector leído y por tanto la componente en la posición 1 del vector
obtenido vale 2; el valor 2 aparece tres veces en el vector leído y por tanto la componente en la
posición 2 del vector obtenido vale 3; el valor 3 no aparece en el vector leído y por tanto la componente
en la posición 3 del vector obtenido vale 0, ...)
Ejercicio 2
Una agencia de viajes lanza una oferta de 10 viajes para el verano del 99. La agencia desea poner en
marcha sólo aquellos viajes en los que el número de personas menores de 10 años no supere el 10% de
la gente apuntada a dicho viaje. Realiza un programa en C que lea la edad y el número de viaje elegido
por cada persona y diga qué viajes se ponen en marcha.
Ejercicio 3
a) La Escuela de Topografía de Marte dispone de 100 ordenadores para uso de los alumnos. Escribe
un programa en C que permita a los alumnos reservar el número de terminal deseado. Si el terminal
solicitado ya ha sido reservado por otro alumno, se le permitirá al alumno solicitar otro si lo desea.
b) Modificar el programa anterior para que cuando un alumno solicita un terminal se le pida su
número de matricula y se le deniegue la solicitud si ya tiene otra reserva realizada.
MATRICES
Ejercicio 1
Tenemos un tablero de ajedrez de 64 casillas (8*8). Las casillas que se encuentran en fila par y columna
impar tienen un número positivo (por ejemplo, las casillas (2,1), (4,5)) y las casillas de fila impar y
columna par tienen un número negativo (por ejemplo, las casillas (1,2), (3,6)). El problema consiste en
Boletín de ejercicios (8)
diseñar un algoritmo que pida los valores que contendrán las casillas y que diga si la suma de los
números positivos es superior a la de los negativos o viceversa.
Ejercicio 2
Se llama “punto de silla” de una matriz M cuadrada a un elemento Mij que es mínimo en su fila y
máximo en su columna, es decir
Mkj < Mij < Mik ∀k, 1<k<n
Escribe un programa en C que lea una matriz de enteros y determine si tiene puntos de silla,
escribiéndolos en tal caso mediante sus coordenadas i,j.
Nota : Considerar que no hay elementos repetidos en la matriz.
Ejercicio 3
Un cuadrado mágico es una matriz cuadrada con un número impar de filas y columnas, cuyas filas y
columnas (e incluso sus diagonales) suman el mismo valor. Por ejemplo, la matriz siguiente es un
cuadrado mágico de 3 por 3:
6 1 8
7 5 3
2 9 4
La técnica que se utiliza para generar los cuadrados mágicos es la siguiente:
- se comienza fijando un valor de 1 en el elemento central de la primera fila
- luego se van escribiendo los sucesivos valores (2, 3, etc) desplazándose desde la posición anterior
una fila hacia arriba y una columna a la izquierda.
- estos desplazamientos se tratan como si la matriz estuviera envuelta sobre sí misma, de forma que
moverse una posición hacia arriba en la fila superior lleva a la fila inferior y moverse una posición
hacia la izquierda desde la primera columna conduce a la última.
- si una nueva posición ya está ocupada, en lugar de hacer el movimiento habitual, nos desplazamos
una fila hacia abajo en la misma columna.
Escribir un programa que pregunte al usuario qué cuadrado mágico desea generar (introducirá el rango
de la matriz), generarlo y escribirlo en pantalla. Tener en cuenta que el rango de la matriz debe ser
impar.
Ejercicio 4
Escribir un programa que normalice los 20 números almacenados en un vector. Para ello, hay que
averiguar cuál es el mayor de los números y luego dividir cada número por dicho valor máximo, de
forma que los valores resultantes estén comprendidos en el intervalo del 0 al 1.
Ejercicio 5
a) El circuito siguiente es un circuito paralelo. Desarrollar un programa que calcule la resistencia total
de la rama que seleccione el usuario. La resistencia total de una rama es: RT = R1 + R2 + R3.
Permitir al usuario que introduzca los valores correspondientes a cada resistencia.
b) Modificar el programa anterior para que calcule la resistencia total de las ramas que seleccione el
usuario. La resistencia total se determina calculando la resistencia de las ramas implicadas y, a
continuación, aplicando la fórmula de la resistencia de un circuito paralelo: RT = 1/(1/Rt1 +
1/Rt2 + ... + 1/Rtn)
Ejercicio 6
La siguiente figura muestra los movimientos válidos del caballo de ajedrez. Escribir un programa que,
dadas la posición actual del caballo (fila, col) y la posición a la que se desea mover (filanue, colnue),
valide el movimiento devolviendo 1 si es correcto y 0 en caso contrario.
Ok Ok
Ok Ok
Caballo
Ok Ok
Ok Ok
VECTORES DE CARACTERES
Ejercicio 1
Dado un vector de N caracteres (letras y blancos), escribe un programa en C que sustituya en el mismo
vector los caracteres “ny” que encuentre por una “ñ”.
Ejercicio 2
Dadas dos cadenas S y T, cuyos caracteres se encuentran en orden alfabético, hacer una función en C
que pasándole como argumento ambas cadenas, almacene en otro vector la cadena resultante al ordenar
alfabéticamente los caracteres de las dos cadenas S y T.
Ejercicio 3
Ejercicio 4
Se tiene una matriz de N*M caracteres que contiene los nombres de N países, pudiendo éstos estar
repetidos. Los países NO están ordenados alfabéticamente y sus nombres pueden contener varias
palabras (es decir, espacios en blanco en el medio). Se pide un programa en C que realice las siguientes
funciones:
Boletín de ejercicios (10)
- Escribir todos los países que comienzan con una determinada letra.
- Obtener el nombre del país de mayor longitud y situarlo en la última fila de la matriz,
desplazando el resto de los países que estén situados después del país encontrado.
- Devolver el número de países que están repetidos. Un país sólo puede estar repetido una vez.
Ejercicio 5
Se tiene una matriz de caracteres que tiene ya almacenados los nombres de 100 países (máximo 50
caracteres) que están ordenados por orden alfabético. Se pide un programa en C que realice tantas veces
como sea requerido por el usuario la siguiente operación: buscar un país en la matriz de caracteres
(aplicar búsqueda binaria) y añadir al final del nombre del país el prefijo telefónico de dicho país (2
caracteres para el prefijo de teléfono) dejando un espacio en blanco entre el nombre y el código
telefónico. Si el país no existe, dar un mensaje de error.
ESTRUCTURAS DE DATOS
Ejercicio 1
Se dispone de un vector con información relativa a un conjunto de ciudades. Cada elemento del vector
contiene los siguientes datos:
nombre de la ciudad : 40 caracteres
número de habitantes : entero largo
código de la provincia a la que pertenece la ciudad : entero
Se pide definir las estructuras de datos necesarias y funciones que desempeñen estas tareas:
generar los datos del vector leyendo la información desde teclado, suponiendo que hay 100
ciudades.
la suma total de habitantes de todas las ciudades que pertenecen a una provincia determinada
(identificada por su código)
Ejercicio 2
Se pretende gestionar el padrón de habitantes de un pequeño pueblo de 300 habitantes. De cada uno de
ellos se tiene:
nombre y apellidos : cadena de 50 caracteres
dirección : cadena de 40 caracteres
edad : entero
DNI : cadena de 8 caracteres
estado civil : carácter (‘c’/’s’/’v’/’d’)
Se pide:
a) definir las estructuras de datos necesarias
b) una función de lectura de habitantes (que lea hasta 300 lecturas o hasta que el usuario escriba un
blanco cuando se pida el nombre). Esta función debe devolver un entero que será el número de
habitantes introducidos.
c) una función que, dada una dirección, nos liste en pantalla el nombre de los habitantes que viven en
la misma.
d) una función que cambie el estado civil de un habitante, del que conocemos su DNI, a un nuevo
estado dado (suponiendo el vector ordenado por DNI, la búsqueda debe ser lo más eficiente posible)
Ejercicio 3
Se quiere llevar el control de las medallas de los JJ.OO. Para cada uno de los 192 países se desea
guardar:
- nombre del país : 20 caracteres
- número de participantes
- número de medallas de oro
Boletín de ejercicios (11)
Ejercicio 4
Se quiere realizar un programa para almacenar en un vector las quinielas jugadas por un aficionado al
fútbol. Para cada quiniela la información a guardar será:
- la columna jugada : 15 caracteres (por ejemplo, 1X121XX212X2121)
- el número de aciertos
- fecha del día al que corresponde
Ejercicio 5
Se quiere guardar información sobre una guardería a la que acuden 20 niños y lo que se desea es
mantener una ficha sobre cada uno de ellos con los siguientes datos: nombre y apellidos, sexo y edad.
Además se dispondrá de dos campos, que indicarán la hora en la que vino y la hora en la que recogieron
al niño.
El programa deberá tener una función para leer los datos de todos los niños, otra que sirva para dejar al
niño en la guardería (se deberá indicar nombre y apellidos del niño y hora) y otra función para saber,
dada una hora determinada, cuántos niños han llegado a la guardería antes de la hora indicada. Una
última función visualizará todos los datos almacenados.
El programa principal deberá tener un menú que permita llamar a cada una de las funciones
especificadas. El menú dispondrá de una opción para salir del programa.
Ejercicio 6
El programa debe tener una función para introducir los datos iniciales, otra para actualizar los datos por
jornada, indicando los goles encajados y marcados por cada equipo (el programa deducirá si ha ganado
(3 puntos), empatado (1 punto) o perdido (0 puntos)) y una última función que permita mostrar la
clasificación (ordenada, por supuesto)
Ejercicio 7
Una casa de subastas sólo admite 15 compradores por sesión. Por cada comprador se guarda su nombre,
dirección, cantidad total comprada y puja por el producto actual. Se pide un programa que primero
pedirá los datos de los compradores. Luego a partir de un menú se llamará a una serie de funciones:
visualizar toda la información, realización de una puja por un objeto (cada comprador introducirá
cuánto ofrece) y finalmente, una función que determine quién ha ofrecido más y adjudique el objeto a
Boletín de ejercicios (12)
ese comprador incrementando su cuenta de gastos. El menú dispondrá de una opción para salir del
programa.
Ejercicio 8
En una aerolínea muy conocida desean tener una ayuda con sus vuelos. Todos sus aviones tienen una
capacidad de 100 pasajeros y de cada uno se tiene la siguiente información:
- Nombre: máximo se almacenan 30 caracteres.
- Fumador o no
- Precio que pagó por el pasaje
- Peso del equipaje
-
La aerolínea desea que le entregue los siguientes informes:
- Información completa de todos los pasajeros
- Cuántos fumadores hay
- Total recaudado con los pasajes
- Peso total del equipaje