Está en la página 1de 12

Universidad Nacional Autónoma de Nicaragua - León.

Facultad Ciencias y Tecnología. Departamento de Computación.


Laboratorio de Programación Estructurada
Guía #12: Declaración de tipos propios (Estructuras)

Laboratorio de Programación Estructurada


Guía #12(presencial):
Declaración de tipos propios (Estructuras)

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.

 Tiempo de desarrollo de la práctica: 1 sesión presencial.

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:

M.Sc. Ana María Salgado Grillo Página 1


Universidad Nacional Autónoma de Nicaragua - León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #12: Declaración de tipos propios (Estructuras)

Nombre de la variable tipo estructura

Segundo campo N- ésimo campo


Primer campo

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).

La estructura de datos adecuada para almacenar esta información es la estructura. En la siguiente


figura se muestra la representación gráfica de este ejemplo:

agenda

nombre edad estatura

El primer campo de la estructura es nombre; el segundo, edad, el tercero, estatura, y así


sucesivamente. Si queremos acceder entonces al primer campo de la estructura debemos escribir
variable-de-tipo-estructura-agenda.nombre. Si queremos hacer referencia a la edad del
profesor escribimos variable-de-tipo-estructura-agenda.edad

¿Cómo nos referimos a los miembros de una estructura?

Se puede acceder a los miembros de una estructura de una de estas dos formas:

 Hacemos uso del operador punto: variable_estructura.miembro


 Utilizando el operador puntero ->

M.Sc. Ana María Salgado Grillo Página 2


Universidad Nacional Autónoma de Nicaragua - León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #12: Declaración de tipos propios (Estructuras)

Ejemplo:

struct agenda
{
char nombre[30];
int edad;
float estatura;
};

struct agenda profesor;


/* Datos del profesor */
gets(profesor.nombre);
scanf("%d",&profesor.edad);
scanf("%f",&profesor.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 ->

Acceso a una estructura de datos mediante el operador punto:

Se puede almacenar información en una estructura mediante inicialización, asignación directa o


lectura del teclado.

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:

<Nombre variable estructura>.<Nombre miembro de la estructura> = datos;

Ejemplos:

/* Asignacion directa a datos del profesor */


strcpy(profesor.nombre, "Luis Joyanes");
profesor.edad = 55;
profesor. estatura = 1.75;

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.

M.Sc. Ana María Salgado Grillo Página 3


Universidad Nacional Autónoma de Nicaragua - León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #12: Declaración de tipos propios (Estructuras)

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);

/* Datos del profesor */


printf("\nProfesor:\n");
printf("--------\n");
fflush(stdin);
printf("Introduzca el nombre del profesor: ");
gets(profesor.nombre);
printf("Introduzca la edad del profesor: ");
scanf("%d",&profesor.edad);
fflush(stdin);
printf("Introduzca la estatura del profesor: ");
scanf("%f",&profesor.estatura);

M.Sc. Ana María Salgado Grillo Página 4


Universidad Nacional Autónoma de Nicaragua - León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #12: Declaración de tipos propios (Estructuras)

printf("\nDatos del estudiante:\n");


printf("--------------------\n");
puts(alumno.nombre);
printf("Tiene una edad de: %d anyos. ",alumno.edad);
printf("Y una estatura de: %.2f metros",alumno.estatura);

printf("\n\nDatos del profesor:\n");


printf("--------------------\n");
puts(profesor.nombre);
printf("Cuya edad es: %d. ",profesor.edad);
printf("Tiene como estatura: %.2f metros",profesor.estatura);

return 0;
}

Salida en pantalla:

M.Sc. Ana María Salgado Grillo Página 5


Universidad Nacional Autónoma de Nicaragua - León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #12: Declaración de tipos propios (Estructuras)

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);

M.Sc. Ana María Salgado Grillo Página 6


Universidad Nacional Autónoma de Nicaragua - León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #12: Declaración de tipos propios (Estructuras)

printf("Ingrese el apellido materno: ");


gets(alumno.nombrec.apellidomat);
printf("Ingrese la edad del alumno: ");
scanf("%d",&alumno.edad);
printf("Ingrese la estatura del alumno: ");
scanf("%f",&alumno.estatura);

/* 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;

printf("\nDatos del estudiante:\n");


printf("--------------------\n");
printf("%s %s %s",alumno.nombrec.nombre, alumno.nombrec.apellidopat,
alumno.nombrec.apellidomat);
printf(", tiene una edad de: %d anyos",alumno.edad);
printf(" y una estatura de: %.2f metros. ",alumno.estatura);
printf("Obtuvo un promedio de %.2f\n", alumno.promedio);
return 0;
}

Acceso a una estructura de datos mediante el operador puntero ->.

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.

La asignación de datos a estructuras utilizando el operador -> tiene el siguiente formato:

<puntero estructura> -> <nombre miembro> = datos;

Así, por ejemplo:

M.Sc. Ana María Salgado Grillo Página 7


Universidad Nacional Autónoma de Nicaragua - León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #12: Declaración de tipos propios (Estructuras)

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;

Se puede definir a como un puntero a la estructura:


struct estudiante *a;
struct estudiante temp;

A los miembros de la estructura se pueden asignar datos como sigue(siempre y cuando la


estructura ya tenga creado su espacio de almacenamiento, por ejemplo, con malloc(), o bien
tenga la dirección de una variable estructura.

a = &temp; /* a tiene la dirección(apunta a) temp */


strcpy(a->nombrec.nombre,"Mario");
strcpy(a->nombrec.apellidopat,"Luna");
strcpy(a->nombrec.apellidomat,"Cantillo");
a->edad = 25;
a->estatura = 1.75;

M.Sc. Ana María Salgado Grillo Página 8


Universidad Nacional Autónoma de Nicaragua - León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #12: Declaración de tipos propios (Estructuras)

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);

M.Sc. Ana María Salgado Grillo Página 9


Universidad Nacional Autónoma de Nicaragua - León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #12: Declaración de tipos propios (Estructuras)

printf("Ingrese la edad del alumno: ");


scanf("%d",&a->edad);
printf("Ingrese la estatura del alumno: ");
scanf("%f",&a->estatura);

/* 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;

printf("\nDatos del estudiante:\n");


printf("--------------------\n");
printf("%s %s %s",a->nombrec.nombre, a->nombrec.apellidopat, a->nombrec.apellidomat);
printf(", tiene una edad de: %d anyos",a->edad);
printf(" y una estatura de: %.2f metros. ",a->estatura);
printf("Obtuvo un promedio de %.2f\n", a->promedio);
return 0;
}

M.Sc. Ana María Salgado Grillo Página 10


Universidad Nacional Autónoma de Nicaragua - León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #12: Declaración de tipos propios (Estructuras)

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).

Escriba un programa en C, que actualice la información de acuerdo con las siguientes


transacciones:

OPE1, CLA1, CAN1


OPE2, CLA2, CAN2

OPEN, CLAN, CANN

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.

2. Un importante banco, cuya casa central se encuentra ubicada en Managua, lleva la


información de sus clientes en una estructura. Esta se encuentra ordenada en función del
número de cuenta. El banco almacena la siguiente información de cada cliente:
 Número de cuenta(entero largo).
 Nombre del cliente(cadena de caracteres).
 Domicilio(estructura).
o Calle y número(cadena de caracteres).
o Código postal(cadena de caracteres).
o Colonia(cadena de caracteres).
o Ciudad(cadena de caracteres).
o Teléfono(cadena de caracteres).
 Saldo(real).

M.Sc. Ana María Salgado Grillo Página 11


Universidad Nacional Autónoma de Nicaragua - León.
Facultad Ciencias y Tecnología. Departamento de Computación.
Laboratorio de Programación Estructurada
Guía #12: Declaración de tipos propios (Estructuras)

Escribe un programa en C que realice las siguientes operaciones:


a) Depósitos. Al recibir el número de cuenta de un cliente y un monto determinado, debe
actualizar el saldo.
b) Retiros. Al recibir el número de cuenta de un cliente y un monto determinado por medio
de un cheque o un retiro de un cajero, el programa debe actualizar el saldo. El cajero no
puede pagar el cheque o autorizar el retiro si el saldo es insuficiente.

El programa debe realizar y validar diferentes transacciones. El fin de datos se expresa al ingresar
el número 0.

M.Sc. Ana María Salgado Grillo Página 12

También podría gustarte