Documentos de Académico
Documentos de Profesional
Documentos de Cultura
OBJETIVO:
Crear nuevos tipos de datos haciendo uso de estructuras(con múltiples variables de tipos
diferentes), estructuras anidadas.
TEMPORIZACIÓN
Inicio de la práctica:
Sesión de laboratorio del 20-24 junio 2022.
Estructuras
Cuando estudiamos arreglos los definimos como una colección finita, homogénea y ordenada de
elementos. En esta unidad estudiaremos las estructuras que se distinguen de los arreglos porque
sus elementos pueden ser heterogéneos, es decir, pueden pertenecer – aunque no
necesariamente- a tipos de datos diferentes.
Las estructuras, conocidas generalmente con el nombre de registros, representan un tipo de dato
estructurado. Se utilizan tanto para resolver problemas que involucran tipos de datos
estructurados, heterogéneos, como para almacenar información en archivos. Las estructuras
tienen varios componentes, cada uno de los cuales puede constituir a su vez un tipo de dato
simple o estructurado. Sin embargo, los componentes del nivel más bajo de un tipo estructurado,
siempre son tipos de datos simple.
Cada componente de la estructura se denomina campo y se identifica con un nombre único. Los
campos de una estructura pueden ser de tipos de datos diferentes como ya hemos mencionado,
simples o estructurados; por lo tanto, también podrían ser nuevamente una estructura. Para
hacer referencia a un campo de una estructura siempre debemos utilizar tanto el nombre de la
variable tipo estructura como el nombre del campo. Gráficamente se representa de la siguiente
forma:
Consideremos que vamos a crear la agenda por cada profesor de una universidad. Para esto,
debemos almacenar la siguiente información:
Nombre(cadena de caracteres).
Edad(entero).
Estatura(real).
agenda
Se puede acceder a los miembros de una estructura de una de estas dos formas:
Ejemplo:
struct agenda
{
char nombre[30];
int edad;
float estatura;
};
El nombre de un miembro de una estructura es local a la misma y puede ser utilizado solamente
después del operador punto o del operador ->
La asignación de datos a los miembros de una variable estructura se puede hacer mediante el
operador punto. La sintaxis C es la siguiente:
Ejemplos:
El operador punto proporciona el camino directo al miembro correspondiente. Los datos que se
almacenan en un miembro dado deben ser del mismo tipo que el tipo declarado para ese
miembro.
Ejercicio resuelto # 1
Este programa lee del teclado los datos de una variable estructura “alumno” y otra variable
estructura “profesor” y luego los visualiza.
/* resuelto1_Estructuras */
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct agenda
{
char nombre[30];
int edad;
float estatura;
}alumno, profesor;
/* asignacion */
/* Datos del estudiante */
printf("Estudiante:\n");
printf("----------\n");
printf("Ingrese el nombre del alumno: ");
gets(alumno.nombre);
printf("Ingrese la edad del alumno: ");
scanf("%d",&alumno.edad);
printf("Ingrese la estatura del alumno: ");
scanf("%f",&alumno.estatura);
return 0;
}
Salida en pantalla:
Ejercicio resuelto # 2
Almacenar en una estructura el nombre y los apellidos de una persona por separado, y crear
otra estructura que contenga el nombre completo, además la edad, estatura, calificaciones y
promedio obtenido; agregar datos y mostrarlos.
/* resuelto2_Estructuras */
#include <stdio.h>
#include <stdlib.h>
struct nombreComp
{
char nombre[30];
char apellidopat[15];
char apellidomat[15];
};
struct estudiante
{
nombreComp nombrec;
int edad;
float estatura;
int calificacion[3];
float promedio;
}alumno;
int main()
{
int i;
float suma = 0;
/* asignacion */
/* Datos del estudiante */
printf("Estudiante:\n");
printf("----------\n");
printf("Ingrese el 1er. nombre del alumno: ");
gets(alumno.nombrec.nombre);
printf("Ingrese el apellido paterno: ");
gets(alumno.nombrec.apellidopat);
/* Ingresar calificaciones */
for(i = 0; i <3; i++)
{
printf("Calificacion %d: ",i+1);
scanf("%d",&alumno.calificacion[i]);
suma = suma + alumno.calificacion[i];
}
alumno.promedio = suma / 3.0;
El operador puntero -> sirve para acceder a los elementos de la estructura a partir de un puntero.
Para utilizar este operador se debe definir primero una variable puntero para apuntar a la
estructura. A continuación, utilice el operador puntero para apuntar a un miembro dado.
struct nombreComp
{
char nombre[30];
char apellidopat[15];
char apellidomat[15];
};
struct estudiante
{
nombreComp nombrec;
int edad;
float estatura;
int calificacion[3];
float promedio;
}alumno;
Ejercicio resuelto # 3
Usando punteros a estructuras.
/* resuelto3_Estructuras */
#include <stdio.h>
#include <stdlib.h>
struct nombreComp
{
char nombre[30];
char apellidopat[15];
char apellidomat[15];
};
struct estudiante
{
nombreComp nombrec;
int edad;
float estatura;
int calificacion[3];
float promedio;
}alumno;
int main()
{
int i;
float suma = 0;
struct estudiante *a;
/* asignacion */
/* Datos del estudiante */
printf("Estudiante:\n");
printf("----------\n");
printf("Ingrese el 1er. nombre del alumno: ");
gets(a->nombrec.nombre);
printf("Ingrese el apellido paterno: ");
gets(a->nombrec.apellidopat);
printf("Ingrese el apellido materno: ");
gets(a->nombrec.apellidomat);
/* Ingresar calificaciones */
for(i = 0; i <3; i++)
{
printf("Calificacion %d: ",i+1);
scanf("%d",&a->calificacion[i]);
suma = suma + a->calificacion[i];
}
a->promedio = suma / 3.0;
Ejercicios propuestos
1. Una tienda especializada en artículos electrónicos vende como máximo 100 productos
diferentes. La información de cada producto se almacena en una estructura:
Clave del producto(entero).
Nombre del producto(cadena de caracteres).
Existencia(entero).
Donde:
OPEi es una variable de tipo carácter que representa el tipo de operación que se realiza:
´c´ compras, ´v´ ventas.
CLAi es una variable de tipo entero que representa la clave del producto.
CANi es una variable de tipo entero que significa la cantidad del producto.
Declare una variable de tipo estructura y luego un puntero a ésta, y acceda(lea e imprima) la
estructura a través del puntero.
El programa debe realizar y validar diferentes transacciones. El fin de datos se expresa al ingresar
el número 0.