Вы находитесь на странице: 1из 4

Guía de ejercicios de punteros y memoria dinámica v.

2020

Programación

Guía de Ejercicios de punteros y memoria dinámica

Punteros
1. Considere las siguientes instrucciones:

int *p;
int i;
int k;
i = 42;
k = i;
p = &i;

Luego de esas instrucciones, ¿cuál de las siguientes cambia el valor de i a 75?

A. k = 75;
B. *k = 75;
C. p = 75;
D. *p = 75;
E. Dos o más de las anteriores.

2. Explicar qué está mal en el siguiente fragmento de código:

char c = 'A';
double *p = &c;

3. Escribir un programa que imprima los elementos de un vector de enteros en orden


inverso utilizando punteros (no usar subíndices []).

int v[10] = {1,2,3,4,5,6,7,8,9,10};


int *p;

// Escribir el codigo aca

4. Escribir una función que reciba un vector de enteros y su tamaño, y devuelva la


cantidad de números impares que contiene.

int impares (int *v, int tam);

5. Escribir una función que devuelva un puntero al máximo valor de un vector de


“doubles”. Si el vector está vacío (cant = 0) la función debe retornar NULL.

double* max (double *v, int cant);

6. Suponga que se ejecutan las siguientes instrucciones:

UNSAM – Programación – Docentes: A. Alonso – D. López – J. Bertinat página 1/4


Guía de ejercicios de punteros y memoria dinámica v.2020

int a = {5, 15, 34, 54, 14, 2, 52, 72};


int *p = &a [1], *q = &a [5];

a. ¿Cuál es el valor de *(p+3)?


b. ¿Cuál es el valor de *(q-3)?
c. ¿Cuál es el valor de q-p?
d. ¿La condición p<q es verdadera o falsa?
e. ¿La condición *p<*q es verdadera o falsa?

7. Suponga que primero, ultimo y medio son punteros del mismo tipo y
primero y ultimo apuntan al primer y último elemento de un vector. Si quiere
que medio apunte al elemento que está en la mitad del vector ¿por qué la siguiente
instrucción es inválida y cómo se podría solucionar?

medio = (primero + ultimo) / 2;

8. Implemente una función que reciba un vector de números en punto flotante y un


entero que representa el tamaño del vector y devuelva el promedio.

Usar notación aritmética de punteros (no subíndices []) para recorrer el vector.

9. Implemente la siguiente función para calcular el producto escalar de dos vectores:

double prod_esc (const double *a, const double *b, int n);

Donde a y b apuntan a vectores de longitud n.

La función debe retornar a[0]*b[0]+a[1]*b[1]+ … + a[n-1]*b[n-1]

Usar notación aritmética de punteros (no subíndices []) para recorrer los vectores.

10. Escriba un programa que permita al usuario ingresar valores enteros en una
matriz de 3x3 y luego imprima los elementos de la diagonal principal.

Usar notación aritmética de punteros (no subíndices []) para recorrer la matriz.

11. Suponga que el puntero p está declarado como sigue:

struct mi_estructura {
char a, b;
int c;
int e [5];
};

struct mi_estructura me;


struct mi_estructura *p = &me;

UNSAM – Programación – Docentes: A. Alonso – D. López – J. Bertinat página 2/4


Guía de ejercicios de punteros y memoria dinámica v.2020

¿Cuáles de las siguientes instrucciones son válidas?

a) p->b = ’ ’;
b) p->e [3] = 10;
c) (*p).a = ’*’;
d) *p.b = ’?’;
e) me.c = 1;
f) p.c = 1;

12. Suponga que f y p están declarados como sigue:

struct {
union {
char a, b;
int c;
} d;
int e [5];
} f, *p = &f;

¿Cuáles de las siguientes instrucciones son válidas?

g) p->b = ’ ’;
h) p->e [3] = 10;
i) (*p).d.a = ’*’;
j) p->d->c = ’x’;

Memoria dinámica
13. Escribir un prog. en el que el usuario informa la cantidad de elementos que va a
ingresar y luego los valores de los elementos (enteros).

Los elementos deben almacenarse en un vector y luego en el archivo vector.dat. No


se debe limitar la cantidad de elementos.

14. Escribir un programa para leer el archivo vector .dat del ejercicio anterior y
almacenarlo en un vector. No se conoce la cantidad de elementos y no se puede
limitar.
15. Escriba la función duplicar que reserve memoria dinámicamente para
duplicar un string que se le pasa como argumento. Por ejemplo, la llamada:

p = duplicar (str);

debe reservar memoria para un string de la misma longitud que str, copiar los datos
y retornar un puntero a la nueva cadena de caracteres. Si la reserva de memoria falla,
entonces duplicar debe retornar un puntero nulo.

UNSAM – Programación – Docentes: A. Alonso – D. López – J. Bertinat página 3/4


Guía de ejercicios de punteros y memoria dinámica v.2020

16. Escriba la siguiente función:

int *crear_vector (int n, int valor_inicial);

La función debe retornar un puntero a un vector de enteros de tamaño n creado


dinámicamente cuyas posiciones son inicializadas con valor_inicial. La
función debe retornar NULL si no se puede reservar la memoria.

17. Suponga que se ejecutan las siguientes instrucciones:

struct punto {
int x;
int y;
};
struct rectangulo {
struct punto superior_izq;
struct punto inferior_der;
};
struct rectangulo *p;

Escriba las líneas necesarias para que p apunte a una estructura rectangulo
válida que tenga (10,25) como esquina superior izquierda y (20,15) como esquina
inferior derecha.

18. Investigue y explique el uso de las funciones memset () y memcpy ().

UNSAM – Programación – Docentes: A. Alonso – D. López – J. Bertinat página 4/4

Вам также может понравиться