PROGRAMACIÓN ALGORITMOS Y ESTRUCTURAS DE DATOS PRACTICA Nº 4 PUNTEROS Y ARREGLOS 1. Analice, ejecute y verifique el siguiente código: #include <stdio.h> int j, k; int *ptr; int main(void) { j = 1; k = 2; ptr = &k; printf("\n"); printf("j tiene el valor %d y está almacenado en %p\n",j,&j); printf("k tiene el valor %d y está almacenado en %p\n",k,&k); printf("ptr tiene el valor %p y está almacenado en %p\n",ptr,&ptr); printf("El valor del entero al que apunta ptr is %d\n", *ptr); return 0; } 2. Realice un programa que modifique un número y un carácter ingresados por el usuario utilizando punteros. 3. El siguiente código forma parte de un programa …………… long int *pl; char *pc; long int num = 0xFEDCA987; pl = &num; …………. Relice utilizando punteros, el código necesario para poder imprimir en pantalla cada uno de los bytes que conforman la variable num. 4. Dado el siguiente fragmento de código float a = 23.56; float *b; float *c; b = &a; c = b; a = *c + *b; 4. 1 Indique las afirmaciones correctas a) Las variables b y c se almacenan en la misma dirección de memoria b) La sentencia *c = 4; modifica el contenido de a. c) a tomará un valor indeterminado. d) c almacena la dirección de la variable b. 4. 2 Cuál es el valor final de la variable a? 1 5. Realice un programa que: Defina un arreglo formado por los enteros 2,10,9,4,90 y 56. Defina un puntero ptr al primer elemento del arreglo. Recorra y muestre el valor de cada elemento del arreglo a) utilizando índices. b) utilizando el puntero ptr. 6. Hacer un programa que: a) Cree un arreglo unidimensional de 30 elementos de tipo numérico entero y nombre números. b) Cargue el vector con valores positivos, negativos y ceros. c) Recorra el arreglo de izquierda a derecha mostrando el contenido de cada elemento, usando las estructuras de control repetitivas (while, do-while, y for). d) Contabilice el número de valores positivos, negativos y ceros almacenados en el proceso de carga. e) Muestre en pantalla los resultados obtenidos. 7. Hacer un programa que: a) Lea una secuencia de 20 valores numéricos reales y los almacene en un array de nombre “numeros”. b) Muestre en pantalla cuál es el valor máximo, así como la posición que ocupa en el array. En caso de aparecer repetido el valor máximo se muestra el de menor índice. 8. Escribir un programa que calcule y visualice la media aritmética de un vector de 10 elementos numéricos enteros entrados por teclado, utilizando la variable puntero a dicho vector. 9. Realice un programa que : a. Cargue un arreglo con 9 valores enteros. b. Los ordene según el método de la burbuja, mostrando en pantalla como se va ordenando el arreglo en cada iteración externa. c. Busque en el arreglo ordenado por el método dicotómico ó binario, un número que el usuario entre por teclado. Contemple con mensajes de error valores que queden fuera del rango que maneja el arreglo. 10. Analice el siguiente código: #include <stdio.h> char strA[40] = "Solamente una cadena de prueba"; char strB[40]; int main(void) { char *pA; char *pB; puts(strA); pA = strA; puts(pA); pB = strB; putchar('\n'); while(*pA != '\0') { *pB++ = *pA++; } *pB = '\0'; puts(strB); return 0;} 2 a) Ejecute el programa, utilice el debugger en su opción paso a paso, mire las variables strA, strB, pA y pB. b) Inicialice strB[40] con la cadena “0123456789012334567890123456789012345678901234567890 ”, Saque conclusiones. c) Reemplace el código necesario con la función de librería de C strcpy( ). Problema Especial grupos Miércoles y Viernes: Existen funciones de librería en C para la conversión de un entero a cadena de caracteres ASCII y viceversa. itoa(); atoi(); a) Implemente un programa que utilice cada una de estas funciones. b) Implemente el código en C que reemplaza a cada una de las funciones en el programa anterior. 3