Estructuras en C
Estructuras en C
En este tema exploramos en C la estructura más común de representación de datos la llamada estructura.
Variables simples o escalares pueden almacenar un dato de información y arreglos pueden almacenar conjuntos de ellos del mismo tipo y al mismo tiempo, estos dos mecanismos pueden manejar una gran variedad de situaciones pero a menudo se necesita trabajar sobre datos de diversos tipos en este caso ni variables escalares ni arreglos son adecuados.
Para resolver este problema C provee de un tipo de dato especial llamado estructura.
Una estructura (tambien llamada registro), es un tipo de dato que puede almacenar una cantidad N de variables, las cuales pueden ser de varios tipos.
Una estructura es bastante parecido a una tabla de una base de datos. A cada una de las variables que conforman una estructura se les llama campos.
La forma de definir una estructura es haciendo uso de la palabra clave STRUCT.
EL FORMATO GENERAL DE UNA ESTRUCTURA ES:
struct nombre_de_la_estructura
{
tipo campo1;
tipo campo2;
.
.
tipo campoN;
} instancia de la estructura o variable;
EJEMPLO:
struct estructura_amigo
{
char nombre[30];
char apellido[40];
char telefono[10];
}; amigo
Para acceder al nombre de amigo usamos:
amigo.nombre
-----------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
#include <stdio.h>
-----------------------------------------------------------------------------------------------------------
Es posible agrupar un conjunto de elementos de tipo estructura en un arreglo. Esto se conoce como array de estructuras.
Supongamos que queremos almacenar en un vector, la informacion de 20 obreros de una empresa. Lo hariamos de la manera siguiente:
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
float salario;
}; trabajadores[20]; /* almacenar los datos de 20 trabajadores */
Ejemplo sobre como acceder a los campos y sus elementos:
para ver el nombre del cuarto trabajador:
trabajadores[3].nombre;
#include <conio.h>
#include <string.h>
struct { int matricula;
char nombre[30];
int edad; } alumno;
void main() {
clrscr();
// captura de campos
printf("dame matricula :");
scanf("%d",&alumno.matricula);getchar();
scanf("%d",&alumno.matricula);getchar();
printf("dame nombre :"); gets(alumno.nombre);
printf("dame edad :"); scanf("%d",&alumno.edad);
// area de operaciones
alumno.edad = alumno.edad * 12;
// area de salida
printf("MATRICULA =%d \n",alumno.matricula);
printf("NOMBRE =%s \n",alumno.nombre);
printf("MESES =%d \n",alumno.edad);getchar();
}
Arrays de estructuras
Es posible agrupar un conjunto de elementos de tipo estructura en un arreglo. Esto se conoce como array de estructuras.
Supongamos que queremos almacenar en un vector, la informacion de 20 obreros de una empresa. Lo hariamos de la manera siguiente:
struct trabajador
{
char nombre[20];
char apellidos[40];
int edad;
float salario;
}; trabajadores[20]; /* almacenar los datos de 20 trabajadores */
Ejemplo sobre como acceder a los campos y sus elementos:
para ver el nombre del cuarto trabajador:
trabajadores[3].nombre;
Ejemplos de arrays de estructuras:
/* Lista los campos de una agenda construida en el programa */
#include <stdio.h>
#define N 3
#define N 3
{
struct agenda
{
char nombre[25];
char telefono[10];
int edad;
};amigos[N]={{"Pepe","913472314",18},{"Juan","915547623",19}, {"Rosa","917456778",21}};
struct agenda
{
char nombre[25];
char telefono[10];
int edad;
};amigos[N]={{"Pepe","913472314",18},{"Juan","915547623",19}, {"Rosa","917456778",21}};
main()
{
int i;
int i;
for (i=0; i<N; ++i)
{
printf("\nAmigo %s\t telefono %s\t edad %d",amigos[i].nombre,
amigos[i].telefono,amigos[i].edad);
}
printf("\n");
}
getch();
}
{
printf("\nAmigo %s\t telefono %s\t edad %d",amigos[i].nombre,
amigos[i].telefono,amigos[i].edad);
}
printf("\n");
}
getch();
}
-----------------------------------------------------------------------------------------------------------
/* Muestra los datos de 6 estudiantes y determina si el estudiante aprobó o reprobó una materia */
/* Muestra los datos de 6 estudiantes y determina si el estudiante aprobó o reprobó una materia */
#include<stdio.h>
#include <conio.h>
#include <string.h>
#define N 6
struct estudiante
{
int matricula;
char nombre[30];
int nota1,nota2,nota3;
float promedio;
} est[N];
Main()
{
int i=0, T=0;
for (i=0; i<N; i++)
{
printf (“Digite la matricula: \n”);
scanf(“%d”,&est[i].matricula);
printf (“Digite el nombre: \n”);
getchar();
gets (est[i].nombre);
printf (“Digite las notas: \n”);
scanf(“%d %d %d”,&est[i].nota1,&est[i].nota2,&est[i].nota3);
T=est[i].nota1 + est[i].nota2 + est[i].nota3;
est[i].promedio=T/3;
}
for (i=0; i<N: i++)
{
printf (“Estudiante %d : \n”, i);
printf (“Matricula: %d \n Nombre: %s \n Nota 1: %d \n Nota 2: %d \n Nota 3: %d \n”, est[i].matricula,
est[i].nombre, est[i].nota1,est[i].nota2, est[i].nota3)
printf (“El Promedio del estudiante es %f”, est[i].Promedio)
if (est[i].Promedio>70)
printf (“El estudiante aprobo”);
else
printf (“El estudiante reprobo”);
}
getch();
}
#include <conio.h>
#include <string.h>
#define N 6
struct estudiante
{
int matricula;
char nombre[30];
int nota1,nota2,nota3;
float promedio;
} est[N];
Main()
{
int i=0, T=0;
for (i=0; i<N; i++)
{
printf (“Digite la matricula: \n”);
scanf(“%d”,&est[i].matricula);
printf (“Digite el nombre: \n”);
getchar();
gets (est[i].nombre);
printf (“Digite las notas: \n”);
scanf(“%d %d %d”,&est[i].nota1,&est[i].nota2,&est[i].nota3);
T=est[i].nota1 + est[i].nota2 + est[i].nota3;
est[i].promedio=T/3;
}
for (i=0; i<N: i++)
{
printf (“Estudiante %d : \n”, i);
printf (“Matricula: %d \n Nombre: %s \n Nota 1: %d \n Nota 2: %d \n Nota 3: %d \n”, est[i].matricula,
est[i].nombre, est[i].nota1,est[i].nota2, est[i].nota3)
printf (“El Promedio del estudiante es %f”, est[i].Promedio)
if (est[i].Promedio>70)
printf (“El estudiante aprobo”);
else
printf (“El estudiante reprobo”);
}
getch();
}