Estructuras, Arreglos, Cadenas y Punteros en C: Conceptos Básicos y Ejemplos
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 4,3 KB
1. Definición de una Estructura en C para Datos de un Automóvil
Problema: Definir una estructura en C adecuada para almacenar los siguientes datos de un automóvil:
- Marca
- Categoría (compacto, familiar, etc.)
- Modelo
- Tamaño del motor
- Año
Respuesta:
struct datos_auto {
char marca[30];
char modelo[10];
char categoria[30];
int anyo;
int tamano; // Tamaño del motor
};
2. Acceso a un Elemento Fuera de los Límites de un Arreglo
Pregunta: ¿Qué sucede si se asigna un valor a un elemento de un arreglo cuyo índice excede el tamaño del arreglo?
Respuesta: Se sobrescriben datos en la memoria, lo que puede llevar a comportamientos inesperados o errores en el programa.
3. Significado del Nombre de un Arreglo
Pregunta: Si se declara un arreglo de la siguiente manera: int lista[12];
, ¿qué representa la palabra "lista"?
Respuesta: "lista" representa el nombre del arreglo y, en el contexto de punteros, también puede interpretarse como la dirección de memoria del primer elemento del arreglo.
4. Definición de Cadena en C
Pregunta: En C, ¿qué es una cadena?
Respuesta: Una cadena es un tipo de dato compuesto, esencialmente un arreglo de caracteres, que termina con un carácter nulo ('\0' o NULL).
5. Extracción de una Subcadena
Problema: Asumiendo la siguiente declaración: char cadena[] = "Montenegro";
, ¿cuál sería el estatuto para escribir en la salida estándar "negro" (las últimas 5 letras)?
Respuesta:
int i;
for (i = 5; i <= 9; i++) {
printf("%c", cadena[i]);
}
6. Definición de Puntero
Pregunta: ¿Qué es un puntero?
Respuesta: Un puntero es una variable que almacena la dirección de memoria de otra variable. En otras palabras, un puntero "apunta" a la ubicación en memoria donde se almacenan los datos de una variable.
7. Razones para Usar Punteros
Pregunta: Mencione dos buenas razones para usar punteros.
Respuesta:
- Facilitan la manipulación de arreglos y estructuras de datos dinámicas.
- Permiten una gestión más eficiente de la memoria, especialmente al trabajar con grandes cantidades de datos.
8. Referencia a un Elemento de un Arreglo
Problema: Suponiendo la declaración de un arreglo de 10 elementos de nombre "tabla", escriba dos formas de hacer referencia al tercer elemento del arreglo.
Respuesta:
- Notación de arreglo:
tabla[2]
- Notación de puntero:
*(tabla + 2)
9. Referencia a un Elemento con Notación de Arreglo y Punteros
Problema: Dada la siguiente declaración: static int arr7[2][3] = {{10, 11, 12}, {13, 14, 15}};
, escriba una referencia al elemento del arreglo ocupado por el 14 con notación de arreglo y luego con notación de punteros.
Respuesta:
- Notación de arreglo:
arr7[1][1]
- Notación de punteros:
*(*(arr7 + 1) + 1)
10. Función para Intercambiar Dos Variables
Problema: Escriba el código de una función que intercambie dos variables de tipo int
.
Respuesta:
void intercambio(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
Nota: En este caso se pasan las variables por referencia, usando punteros.
11. Suma de Elementos de un Arreglo con Punteros
Problema: Asumiendo la declaración static float lista[] = {1.0, 2.0, 3.0, 4.0, 5.0};
, escriba el código para determinar la suma de los valores de los elementos del arreglo utilizando punteros (debe declarar las variables que requiera).
Respuesta:
float suma = 0.0;
float *ptr;
float lista[] = {1.0, 2.0, 3.0, 4.0, 5.0};
for (ptr = lista; ptr < lista + 5; ptr++) {
suma += *ptr;
}