1. Programación
(L109)
Sesión: 10
Estructuras y Uniones
Ing. José C. Benítez P.
2. Sesión 10. Temas
Estructuras y Uniones
Introducción
Concepto y declaración de
una Estructura
Estructuras anidadas.
Arrays de Estructuras
Programación - Prof. Ing. Jose C. Benitez P. 2
3. Arreglos, Estructuras y Uniones. Introducción
En la creación de aplicaciones para algunos
problemas surge la necesidad de agrupar datos de
diferente tipo o de manejar datos que serian muy
difícil de describir con los tipos de datos
primitivos, en este caso debemos aprovecharnos
de las características que hacen al lenguaje C
especial, es decir se debe usar estructuras,
uniones y punteros.
Programación - Prof. Ing. Jose C. Benitez P. 3
4. Arreglos, Estructuras y Uniones. Introducción
Conociendo el uso de arrays en C, aprender como
se usan estructuras y uniones será sencillo.
Una estructura es un array que tiene la capacidad
de almacenar variables con distintos tipos y
nombres.
Una unión es similar a una estructura, pero solo
podrá tener un valor a la vez.
Programación - Prof. Ing. Jose C. Benitez P. 4
5. Estructuras. Concepto y declaración
Una estructura contiene varios tipos de datos.
La forma de definir una estructura es haciendo struct mystruct
{
uso de la palabra clave struct. int numero;
Ejemplo de la declaración de una estructura: double peso;
char nombre[25];
} variable;
"variable" es una instancia de "mystruct"
y no es necesario ponerla aquí.
struct mystruct
Se podría omitir de la declaración de {
"mystruct" y más tarde declararla int numero;
double peso;
usando: char nombre[25];
struct mystruct variable;
};
Programación - Prof. Ing. Jose C. Benitez P. 5
6. Estructuras. Concepto y declaración
struct mystruct
También es una práctica muy común {
int numero;
asignarle un alias o sinónimo al nombre de la double peso;
estructura, para evitar el tener que poner char nombre[25];
"struct mystruct" cada vez. } variable;
C nos permite la posibilidad de hacer esto typedef struct
usando la palabra clave typedef, lo que crea {
un alias a un tipo: int numero;
double peso;
char nombre[25];
La estructura misma no tiene nombre (por } Mystruct;
la ausencia de nombre en la primera linea),
pero tiene de alias "Mystruct".
Entonces se puede usar así:
Mystruct variable;
Programación - Prof. Ing. Jose C. Benitez P. 6
7. Estructuras. Concepto y declaración
Note que es una convención, y una
buena costumbre usar mayúscula en la typedef struct
primera letra de un sinónimo de tipo. {
De todos modos lo importante es darle int numero;
double peso;
algún identificador para poder hacer char nombre[25];
referencia a la estructura: podríamos } Mystruct;
tener una estructura de datos recursiva
de algún tipo. Mystruct variable;
Programación - Prof. Ing. Jose C. Benitez P. 7
8. #include <stdio.h>
#include <string.h>
Estructuras. Concepto /* definimos una estructura para cds */
struct cd
{
Ejemplo 1: char titulo[30];
char artista[25];
float precio;
int canciones;
} Cd1 = {"Canciones Bebe", "Pinocho", 12.50, 16};
void main(void) {
struct cd Cd2;
strcpy(Cd2.titulo, "New Age“);
strcpy(Cd2.artista, "Old Man“);
Cd2.precio = 15.00;
Cd2.canciones = 12;
printf("n Cd 1");
printf("n Titulo: %s ", Cd1.titulo);
printf("n Artista: %s ", Cd1.artista);
printf("n Total Canciones: %d ", Cd1.canciones);
printf("n Precio Cd: %f ", Cd1.precio);
printf(“nn Cd 2");
printf("n Titulo: %s ", Cd2.titulo);
printf("n Artista: %s ", Cd2.artista);
printf("n Total Canciones: %d ", Cd2.canciones);
printf("n Precio Cd: %.2f ", Cd2.precio);
getchar();
}
Programación - Prof. Ing. Jose C. Benitez P. 8
9. Estructuras. Concepto
Ejemplo 2:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
struct
{
char nombre[20];
int edad;
float estatura;
} persona;
printf("nHola! Voy a hacerte unas preguntas:");
printf("nComo te llamas? : ");
scanf("%s",persona.nombre); // gets(persona.nombre);
printf("nCuantos anhos tienes? : ");
scanf_s("%d", &persona.edad );
printf("nCuanto mides? : ");
scanf_s("%f", &persona.estatura );
printf( "Te llamas %s tienes %d anhos y mides %.2fn", persona.nombre, persona.edad, persona.estatura);
system("PAUSE");
}
Programación - Prof. Ing. Jose C. Benitez P. 9
10. Estructuras Anidadas. Concepto y declaración
struct
Las estructuras se usan como {
cualquier otro tipo de variables int edad;
char* nombre;
normales y corrientes, pero struct
almacenadas dentro de un {
grupo. int numero;
char* direccion;
Además, una estructura puede int telefono;
contener a otra como en el } vivienda;
ejemplo: } persona;
Para acceder a la dirección, por
ejemplo, habría que escribir
persona.vivienda.direccion;
Programación - Prof. Ing. Jose C. Benitez P. 10
11. Arrays de Estructuras. Concepto y declaración
struct
{
Se ha creado 10 personas con int edad;
los mismos datos. char* nombre;
struct
Para acceder, por ejemplo al {
número 3 habría que escribir: int numero;
char* direccion;
persona[2].nombre; int telefono;
} vivienda;
} persona[20];
Programación - Prof. Ing. Jose C. Benitez P. 11
12. Arrays de Estructuras. Ejemplo
#include <stdio.h>
int main(){
int npersonas;
int i = 1;
struct {
int edad;
float estatura;
char* nombre;
} persona[9];
printf( "Hola! Voy a hacerte unas preguntas:");
printf( "Cuantas personas participaran?" );
scanf( "%i", &npersonas );
for( i = 0; i < 10 ; i++ )
{
printf( "nComo te llamas? : "); scanf( "%s", &persona[i].nombre );
printf( "nCuantos anios tienes? : "); scanf( "%d", &persona[i].edad );
printf( "nCuanto mides? : "); scanf( "%f", &persona[i].estatura );
printf( "Te llamas %s tienes %d anios y mides %.2f", &persona[i].nombre, persona[i].edad, persona[i].estatura );
}
return 0;
getchar();
}
Programación - Prof. Ing. Jose C. Benitez P. 12
13. Tarea (T10)
Hacer un programa en C utilizando estructuras. (Utilizar enciclopedias):
1. Registrar y mostrar los datos mas importantes de su familia. Como mínimo
5 variables. Los datos deben ser reales.
2. Registrar y mostrar los datos mas importantes de su clase. Como mínimo 5
variables. Hallar el promedio de edad. Hallar el peso promedio. Hallar la
talla promedio. Los datos deben ser reales.
3. Registrar y mostrar los datos mas importantes de América Latina. Como
mínimo 5 variables. Hallar la población y la extensión promedio. Hallar el
PBI promedio. Los datos deben ser reales.
4. Registrar y mostrar los datos mas importantes de su Curso de
Programación C. Como mínimo 5 variables. Hallar el promedio de notas, la
edad media y la talla promedio. Los datos deben ser reales.
5. Registrar y mostrar los datos mas importantes de una empresa. Considerar
los siguientes variables: Código, Apellidos, Nombres, Fecha de Ingreso,
Sexo, SI es casado o no, Numero de hijos, Grado de Instrucción, Edad,
Talla. Hacer un reporte estadístico de los empleados considerando la
media, la moda y la desviación estándar de cada variable.
Programación - Prof. Ing. Jose C. Benitez P. 13
14. Tarea (T10)
6. Un programa que pida el nombre, el apellido y la edad de una persona, los
almacene en un “struct” y luego muestre los tres datos en una misma línea,
separados por comas.
7. Un programa que pida datos de 8 personas: nombre, dia de nacimiento, mes de
nacimiento, y año de nacimiento (que se deben almacenar en una tabla de
structs).
Después deberá repetir lo siguiente: preguntar un número de mes y mostrar en
pantalla los datos de las personas que cumplan los años durante ese mes.
Terminará de repetirse cuando se teclee 0 como número de mes.
8. Un programa que sea capaz de almacenar los datos de 50 personas: nombre,
dirección, teléfono, edad (usando una tabla de structs). Deberá ir pidiendo los
datos uno por uno, hasta que un nombre se introduzca vacío (se pulse Intro sin
teclear nada). Entonces deberá aparecer un menú que permita:
Mostrar la lista de todos los nombres.
Mostrar las personas de una cierta edad.
Mostrar las personas cuya inicial sea la que el usuario indique.
Salir del programa
(lógicamente, este menú debe repetirse hasta que se escoja la opción de “salir”).
Programación - Prof. Ing. Jose C. Benitez P. 14
15. Presentación
Todos los códigos fuentes deben ser presentados en un
solo archivo de texto, cuyo nombre lleve las iniciales del
curso, sus Apellidos, guion bajo y luego el numero de la
tarea. Ejemplo:
PRG_BenitezPalacios_T10.txt
Los códigos deben estar comentados bloque a bloque.
La presentación de esta Tarea es obligatoria y tiene 03
puntos de bonificación en la Tercera Practica Calificada.
Plazo de entrega: Lunes 30/01/12
Las Tareas que no cumplan las
indicaciones no serán
recepcionados por el profesor.
Programación - Prof. Ing. Jose C. Benitez P. 15
16. Sesión 10. Estructuras y uniones
Programación
http://utpprogc.blogspot.com
Programación - Prof. Ing. Jose C. Benitez P. 16