Académique Documents
Professionnel Documents
Culture Documents
A continuacin se presentan ejercicios sobre: Funciones paso por valor, Punteros Funciones paso por referencia incluyendo vectores y cadenas. Funciones con estructuras. Los grupos de trabajo resolvern los ejercicios antes del da 26/04/2012. Ese da se realizar una o dos evaluaciones de 0.1 individual con ejercicios de la lista.
5. Conversin de Temperaturas. Realizar un programa para realizar la conversin de temperaturas. El programa pide al usuario que introduzca un valor y una letra, en la misma lnea (ver ejemplo, se recomienda usar scanf). El valor ser de tipo float. La letra indica la escala en la que se introduce esa temperatura. Si la letra es 'C', la temperatura se convertir de grados centgrados a Fahrenheit. Si la letra es 'F', la temperatura se convertir de grados Fahrenheit a grados Centgrados. El programa se repetir hasta que el usuario introduzca como letra una 'Z'. Si el usuario introduce una letra distinta a las mencionadas, lo indicar con un mensaje de error. Se usarn 2 funciones cent_fahr y fahr_cent,para convertir de una unidad a otra. Estas funciones aceptarn un parmetro (la temperatura en una escala) y retornarn el valor en la otra escala. (La relacin de escalas corresponde a C= (F-32) / 1.8 ).
float cent_fahr(float cent) float fahr_cent(float fahr)
6. Mximo de 3 valores. Programar una funcin maximo3 para calcular el mximo de tres valores a ,b y c de tipo entero, que se admiten como parmetros y se retorna el valor del mayor. Esta funcin usar a su vez a otra funcin maximo2 (que tambin debe programarse) que calcula el mximo entre 2 valores a y b, que se pasan como parmetros a la funcin. El programa principal pedir al usuario 2 valores, y usar la funcin maximo3 para calcular el mayor entre 0 y esos dos valores.
int maximo2(int a,int b)
7. Asteriscos. Programar una funcin que se encarga de pedir un valor entero por teclado al usuario. Si el valor es negativo o 0, vuelve a pedirlo. Cuando el valor es mayor que cero la funcin retorna ese valor. Programar una funcin que muestra una lnea de asteriscos '*' por pantalla. La funcin admitir un parmetro que ser el nmero de asteriscos. La lnea se finalizar con un carcter de fin de lnea. En el programa principal, usar las funciones anteriores para: pedir un nmero entero y mostrar varias lneas de asteriscos, de forma que la primera lnea tendr un asterisco, e ir sumando un asterisco ms en cada lnea hasta alcanzar el nmero introducido por el usuario.
int entrada(); void asteriscos(int num);
de una funcin con el siguiente prototipo, siendo n un nmero entero que se solicita al usuario desde el main() tantas veces como sea necesario, hasta que el usuario teclee un nmero mayor que cero.
float TerminoN (int);
i
n!
funciones con el siguiente prototipo. Para ello el main() solicitar un numero al usuario, realizar el calculo mediante las funciones e imprimir por pantalla el resultado final.
NOTA: El clculo del sumatorio tiene que hacerse obligatoriamente de forma algortmica mediante un bucle for.
int SumoN (int); int FactN (int); 10. Distancia. Realizar un programa para calcular la distancia entre dos puntos introducidos por
12. Suma. Realizar una funcin para retorne el valor de la siguiente suma
s = ( n i ) donde
i =a
de ab, donde a y b son dos nmeros enteros introducidos desde el teclado tal que a>0 y b>=0 (se supondr que el usuario introduce dos nmeros que cumplen estas condiciones).
Nota: no se pueden utilizar funciones de la librera de matemticas. El clculo de ab lo realizar la funcin teniendo en cuenta que ab=aaa.a (b veces) 14. Multiplos de 7. Hacer un programa que determine cuntos mltiplos de 7 hay entre los
nmeros enteros n y m, ambos inclusive. Los valores n y m sern introducidos desde el teclado (se supondr que ambos nmeros son positivos y que m es mayor o igual que n). El nmero de mltiplos ser calculado con una funcin a la cul se le pasan como argumentos los valores de n y m. El valor calculado ser devuelto a la funcin main() e impreso en la pantalla.
15. MDC. Hacer un programa que determine el mximo comn divisor de dos nmeros enteros a y b que se solicitan al usuario por teclado desde el main(). Dichos nmeros sern pasados a una funcin, que retorna el MCD de ambos, y el main() se encarga de sacar el resultado por pantalla. Si uno de los dos nmeros es negativo, se muestra un mensaje de error y no se invoca la funcin: int MCD( int a, int b);
Punteros
1. Realice la siguiente operacin utilizando punteros:
float x=25.2, y=45.7, c; c=x+y;
2. Indique si la printf() del cdigo se imprime o no en pantalla. Comente cada lnea del programa.
#include <stdio.h> void main() { int a, b; int *p1, *p2; a = 5; b = 5; p1 = &a; p2 = &b; if ( *p1 == *p2 ) printf( "Son iguales\n" ); }
#include <stdio.h> #include <conio.h> void main() { int a; int *b; a = 10; b = &a; *b += 5; }
8. Comente cada lnea del siguiente cdigo. Indique que imprimen las funciones printf(). Implemente el programa y verifique.
#include <stdio.h> void main(void) { int a, b, c; int *p1, *p2; void *p; p1 = &a; *p1 = 1; p2 = &b; *p2 = 2; p1 = p2; *p1 = 0; p2 = &c; *p2 = 3; printf("%d %d %d\n", a, b, c); p = &p2; *p2 = 1; printf("%d %d %d\n", a, b, c); }
#include <stdio.h> int main() { int vector[]={12,10,15}; int i, *pvector; pvector = vector; for( i=0;i<3; i++ ) { printf(El elemeto %d vector++; } return 0; } #include <stdio.h> int main() { int vector[]={12,10,15}; int i, *pvector; pvector = vector; for( i=0;i<3; i++ ) printf(El elemeto %d return 0; }
1. Introduzca dos nmeros enteros por teclado. Realice las operaciones de suma, multiplicacin, divisin y diferencia utilizando punteros. 2. Realice un programa para sumar las componentes de un vector de 4 elementos empleando un puntero al vector. (Ejemplo: [1 2 3 4 ] [3 7 ] ) 3. Dado un vector cualquiera con 5 elementos. Imprima en orden inverso los componentes. Utilice un puntero. 4. Dado un vector con un nmero arbitrario de elementos, cuente los dgitos pares. Utilice punteros. 5. Dada la frase: Programar en Lenguaje C durante las vacaciones utilice un puntero que contar las veces que se repite la letra u.
6.
Introduzca un vector de 5 elementos. Halle el valor mximo del vector. SOLAMENTE UTILIZANDO PUNTEROS
2. Producto Escalar. Realice un programa para calcular el producto escalar de dos vectores introducidos por el usuario. Para ello programe una funcin con el siguiente prototipo:
void PEsc(float vector1[], float vector2[], int dimension, int *pe);
3. Puntos del plano. Dados dos puntos en el espacio cuyas coordenadas son introducidas por el usuario en un vector como el siguiente float coord[4], se pide: a) Realizar una funcin para calcular la distancia entre los puntos. b) Realizar una funcin que verifique que los puntos estn en primer y tercer cuadrante. 4. Ordeno. Introduzca un vector de 4 elementos realice una funcin para intercambiar el orden de los elementos de manera descendente. 5. Par o Impar? Introduzca un vector de 5 elementos. Realice una funcin para detectar si los elementos son pares o impares. Recuerde que la funcin debe ser paso por valor. 6. Imprimo al revs. Introduzca una palabra por teclado y realice una funcin para imprimirla al revs. 7. Cuento Vocales. Defina la siguiente frase: En verano no planeo programar en Lenguaje C. Realice una funcin que permita contar la cantidad de vocales que tiene la frase. 8. Cuento A. Realizar un programa que cuente el nmero de veces que aparece la letras A o a en una frase introducida por el usuario, en la funcin main(). Para contar el nmero de apariciones, se utilizar una funcin a la cul se le pasan como argumentos la frase.El programa finalizar imprimiendo en pantalla desde la funcin main() el nmero de veces que aparece el carcter en la frase. void cuentoA(char cad[], int *cantA); 9. Formato. Realizar una funcin que imprima en una nueva lnea cada palabra de una frase introducida por el usuario. El prototipo de la funcin ser: void formato (char cad[]); La frase ser introducida por el usuario en el main().
NOTA: No se pueden utilizar funciones de string.h
10. Imprimo Impares. Realizar un programa con una funcin que slo imprima los elementos pares de un vector de 10 elementos introducido por el usuario, en la funcin main(). La funcin tendr el siguiente prototipo: void imprimopares (int a[]); 11. Miro Cadena. Realizar una funcin que cuente la cantidad de caracteres de una cadena introducida por el usuario y que adems sustituya los espacios en blanco por _ .
void mirocadena (char cad[], int *veces); 12. Convierte. Dado un nmero entero de segundos se desea pasar a horas, minutos y segundos mediante una funcin llamada convierte que reciba, como argumento, el nmero de segundos y devuelva las horas, minutos y segundos calculados, tambin como argumentos. void convierte (int,int *,int *,int *); 13. A Maysculas. Se pide escribir un programa que pida un texto por teclado (una cadena de caracteres). Es texto debe pasarse a una funcin cambiar_a_mayus, que cambia todas las letras minsculas del texto a maysculas. El programa principal mostrar la cadena ya cambiada. No se deben tener en cuenta las vocales acentuadas ni las ees, que tiene otros cdigos. Para leer la cadena de texto, puede emplearse scanf o gets. void cambiar_a_mayus(char* cadena); 14. Absoluto. Hacer un programa que calcule el valor absoluto de un vector de 5 nmeros reales introducidos desde el teclado, en la funcin main(). Para calcularlo se utilizar una funcin a la que se pasarn como argumentos el vector y su dimensin (la funcin debe servir para vectores de cualquier dimensin), y la funcin modificara el vector que se le pasa como parmetro. El programa finalizar imprimiendo en la pantalla, desde la funcin main(), dicho vector.
Nota: Slo se puntuarn las soluciones en las que las componentes del vector se manejen con la ayuda de bucles.
15. Permuto. Realice una funcin para permutar el valor de dos variables enteras introducidas en el programa principal. void Permuto(int *, int *);
Inicialice la estructura en el programa principal y realice una funcin que permita actualizar las unidades vendidas y las ganancias de la empresa. Luego realice otra funcin para realizar una copia de seguridad de la estructura. int ActulizaUnidades (vehiculos deportivos); int ActualizaGanancia (vehiculos deportivos); void CopiaSegu (vehiculos deportivos) 3. Media de Temperaturas. En una estacin meteorolgica de la Comunidad de Madrid desea implementar un programa informtico para calcular la media de temperaturas mensuales para luego calcular la media anual. Los datos estn almacenados en una estructura como la siguiente. struct datos{ float Tmensual[12]; float Tmedia; }TComMdrd; Realice una funcin que permita calcular el valor medio anual. Prototipo: float Tmedia (struct datos Tempe);
4. Puntos. Define la estructura struct punto con dos coordenadas x e y de tipo float. El usuario debe introducir los datos de dos puntos por pantalla sobre dos estructuras. Escribe una funcin con el siguiente prototipo que devuelva la distancia entre ambos
puntos y en qu cuadrante est cada uno. Finalmente la funcin main debe imprimir tanto la distancia como los cuadrantes para los puntos propuestos. float funcionPuntos (punto punto1, punto punto2, int *cuad1, int *cuad2); 5. Contactos. Define la estructura struct contacto con los campos nombre, e-mail, mes y ao de nacimiento. Escribe una funcin main que lea los datos de dos contactos en dos estructuras, y se los pase a una funcin que se encargue de comparar quin de los dos es mayor. Esta funcin devolver tres posibles resultados: 1 si el primero es mayor que el segundo; 0 si ambos nacieron en el mismo mes y ao; 2 si el segundo es mayor que el primero. La funcin main debe imprimir la informacin del contacto de mayor edad.
6. Empleados. Define la estructura struct empleado con los campos cdigo de empleado, categora y horas trabajadas. Escribe una funcin main que lea los datos de un empleado (cdigo, categora y horas trabajadas) y le pase esa estructura a una funcin para calcular el sueldo segn esta tabla: Categora A 27.5 /h. Categora B 20 /h. Categora C 18.2 /h. Finalmente la funcin main debe imprimir el sueldo de dicho empleado.