6

Click here to load reader

Ejercicios punteros cadenas-vectores

Embed Size (px)

DESCRIPTION

Pequeña conjunto de ejercicios para entender el funcionamiento de los punteros en C/C++ y su relación con vectores y cadenas de texto

Citation preview

Page 1: Ejercicios punteros cadenas-vectores

Prácticas con punteros, vectores y cadenas. Por Salvador Fernández

1. Declara una cadena de caracteres de nombre palindromo y asígnale la constante

literal “AEREA” en la misma línea de declaración. Hazlo de dos maneras diferentes.

2. Suponiendo que tienes dos cadenas de caracteres, cad1 y cad2 tales que

strlen(cad1)==10 y strlen(cad2)==5, indica cómo se declara una tercera cadena cad3 y

se le asigna memoria dinámica (en el heap o montón) , teniendo en cuenta que cad3

va a contener la concatenación de cad1 y cad2 sin que sobre ninguna posición de

memoria.

3. Si tienes declarada e inicializada una cadena de caracteres cad, indica dos maneras de

leer o acceder al carácter de la primera posición.

4. Si en un programa que funciona adecuadamente aparece la sentencia delete s;

podemos adivinar que s es un puntero a

a. Un char, un int, o cualquier otra variable de tipo simple

b. Una cadena de elementos char, int, o de cualquier otro tipo simple

c. Es imposible que s sea un puntero.

5. ¿Cómo puedes averiguar lo que ocupa un puntero a un char en tu computadora y

usando tu compilador de C++?

6. Si ptrLetra es un puntero a un char, ¿qué hace la instrucción *ptrLetra++=3;? ¿y la

instrucción (*ptrLetra)++=3;? ¿son iguales?

7. Si quiero incrementar en una unidad el contenido de la variable a la que apunta un

puntero p, indica cuáles de las siguientes instrucciones serían válidas:

*p = *p + 1;

*p += 1;

++*p;

*p++;

8. Utilizando la notación de vectores puedes acceder a la quinta posición (posición 4, ya

que los índices empiezan en 0) de un vector v mediante la expresión v[4]. ¿Cómo

harías referencia a dicha posición usando notación y aritmética de punteros?

9. Dadas las siguiente declaraciones:

char *p;

char c;

Indica de dos maneras diferentes cómo expresar en C++ cada una de las siguientes

comprobaciones, donde carácter nulo se refiere a la marca de fin de cadena:

Si c es el carácter nulo…

Page 2: Ejercicios punteros cadenas-vectores

Prácticas con punteros, vectores y cadenas. Por Salvador Fernández

Si p apunta a un carácter nulo…

Si p es un puntero nulo…

10.

Indica los valores de las siguientes expresiones atendiendo a la disposición del vector

de enteros lista que se representa en la figura:

lista[2]

*(lista+3)

&lista[1]

lista

lista+2

lista+1<&lista[1]

11. Crea una función para intercambiar dos números enteros usando punteros

equivalente al paso mediante referencias de C++ que se indica. Para ello debes

sustituir los parámetros de entrada por punteros a enteros y cambiar el código para

adaptarlo a la lógica de los mismos. Asimismo, indica cómo sería la llamada a la

función para dos variables enteras x e y.

void intercambiar(int &a, int &b)

{

int temp=a;

a=b;

b=temp;

}

Page 3: Ejercicios punteros cadenas-vectores

Prácticas con punteros, vectores y cadenas. Por Salvador Fernández

12. ¿Puedes averiguar qué hace el siguiente código? ¿Qué contendrán letra1 y letra2 tras

la ejecución del código?

char letra1 = 'A';

char letra2 = 'B';

char* puntero = &letra1;

letra1 = 'C';

letra2 = *puntero;

13. Teniendo el código.

char letra = 'A';

char* puntero = &letra;

Indicar cuáles de las siguientes asignaciones son incorrectas y podrían producir

errores:

letra = *puntero;

letra = &letra;

letra = &puntero;

puntero = *puntero;

puntero = *(&puntero);

puntero = *letra;

*puntero = letra;

&puntero = letra;

14. ¿Contenidos de letra1 y letra2 al final del código? ¿A quién apuntan los punteros al

final?

char letra1 = 'A';

char letra2 = 'B';

char* puntero1 = &letra1;

char* puntero2 = &letra2;

puntero1 = puntero2;

letra1 = 'C';

letra2 = 'D';

letra1 = *puntero1;

15. Indica los valores que tendrán al final de la ejecución del siguiente código las variables

letra1, letra2 y letra3 en cada caso.

a.

char* cadena = "Hola";

char letra0 = *cadena;

char letra1 = *(cadena+1);

char letra2 = *(cadena+2);

char letra3 = *(cadena+3);

Page 4: Ejercicios punteros cadenas-vectores

Prácticas con punteros, vectores y cadenas. Por Salvador Fernández

b.

char* cadena = "Hola";

char letra0 = *cadena;

char letra1 = *cadena+1;

char letra2 = *cadena+2;

char letra3 = *cadena+3;

16. Reescribe el siguiente programa para calcular la media aritmética de un vector de N

valores reales mediante notación y aritmética de punteros:

float media (float datos[], int N)

{

int i;

float suma = 0;

for (i=0; i<N; i++)

suma = suma + datos[i];

return suma/N;

}

17. Representa mediante instrucciones lo que se representa en las figuras del estado de

memoria teniendo en cuenta las siguientes declaraciones de partida que se

corresponden con la primera instantánea. Todas los cambios de valor de las variables y

y z deben realizarse mediante punteros, nunca directamente. Si para un mismo estado

se te ocurren varias posibilidades indícalas como otras alternativas:

int y = 5;

int z = 3;

int *nptr;

int *mptr;

Page 5: Ejercicios punteros cadenas-vectores

Prácticas con punteros, vectores y cadenas. Por Salvador Fernández

18. Aquí tienes algunos códigos que presentan errores. Trata de identificarlos y explica el

motivo del error:

int a = 10;

int *ptri = NULL;

double x = 5.0;

double *ptrf = NULL;

...

ptri = &a;

ptrf = &x;

ptrf = ptri;

char *ptr;

*ptr = ‘a’;

int n;

int *ptr = &n;

ptr = 9;

int *ptr = NULL;

*ptr = 9;

19. ¿Qué valor tendrá la variable a tras la ejecución de este programa? main ()

{

int a = 5;

int *p; int **q;

p = &a;

q = &p;

a = *p*2+**q;

}

Page 6: Ejercicios punteros cadenas-vectores

Prácticas con punteros, vectores y cadenas. Por Salvador Fernández

20. Se pretende desarrollar tres fragmentos de código que sumen los elementos de un

vector de enteros v de diferentes maneras. Completa dicho código siguiendo las

instrucciones de los comentarios:

int i, suma;

int *ptr, *ptrfin;

/* Alternativa 1 */

suma = 0;

for (i=0 ; i<N ; i++)

suma = suma + ____________; //Utilizando notación de vectores

/* Alternativa 2 */

suma = 0;

for (i=0 ; i<N ; i++)

suma = suma + ____________; //Utilizando notación de punteros

//pero sin echar mano de ptr ni

//ptrFin

/* Alternativa 3 */

suma = 0;

ptrfin = ptr + __________; //Completa la expression para que

//ptrFin apunte al último elemento

//del vector

for (ptr=v ; ____________ ; ptr++) //Completa la condición

suma = suma + *ptr; //del bucle