Computación I :: Prof. Yeniffer Peña Lenguaje C Presentación Computación I
Estructura de datos cuyos elementos individuales pueden ser de distinto tipo. Así, una estructura puede contener elementos enteros, flotantes y caracteres. También pueden incluirse como elementos de una estructura, arreglos, punteros y otras estructuras. A los elementos individuales de una estructura se le denominan miembros. Estructuras
Computación I La composición de una estructura puede definirse como: Estructuras struct identificador { TipoDeDato miembro1; TipoDeDato miembro2; … TipoDeDato miembroN; } ; Los nombres de los miembros individuales dentro de una estructura deben ser todos diferentes, pero el nombre de un miembro puede ser el mismo que el de una variable definida fuera de la estructura. Los miembros de una estructura no pueden inicializarse dentro de la declaración del tipo de la estructura.
Computación I Una vez que la estructura ha sido definida, pueden declararse las variables de tipo de esta estructura. struct identificador variable1, variable2, …, variablen ; struct regEquipo { char nombre[40]; int numVictorias; int numDerrotas; float costoAfiliacion; } ; struct regEquipo equipo1; struct regEquipo equipo2={“Tachira”,25,12, }; Ejemplo: Estructuras Y al mismo tiempo pueden inicializarse sus miembros:
Computación I Los miembros de una estructura se procesan generalmente de forma individual, por eso es importante acceder a cada uno de ellos. Un miembro de una estructura puede ser accedido: variable. miembro Donde variable refiere el nombre de una variable de tipo estructura y miembro el nombre de un miembro dentro de una estructura. El punto (.) es el operador que los separa. struct regEquipo { char nombre[40]; int numVictorias; int numDerrotas; float costoAfiliacion; } ; struct regEquipo equipo1; Para tener acceso a los miembros de equipo1 equipo1. nombre equipo1. numVictorias equipo1. numDerrotas equipo1. costoAfiliacion Estructuras
Computación I Estructuras #include struct datos { char nom[12]; char ape[12]; float sue; }; void main() { struct datos empleado; printf("\nNombre: "); scanf("%s", empleado.nom); printf(“\nApellido: "); scanf("%s", empleado.ape); printf(“\nSueldo: "); scanf("%f", &empleado.sue); clrscr(); printf(“\nNombre: %s”, empleado.nom); printf(“\nApellido: %s”, empleado.ape); printf(“\nSueldo: %.2f”, empleado.sue); getch(); } Ejemplo de uso de una Estructura
Computación I Se puede acceder a la dirección de comienzo de una estructura de la misma manera que cualquier otra dirección. struct regEquipo { char nombre[40]; int numVictorias; int numDerrotas; float costoAfiliacion; } ; struct regEquipo equipo; struct regEquipo *aptVar; aptVar = &equipo; //La dirección de comienzo de equipo se asigna a aptVar Estructuras Estructuras y Punteros:
Computación I Los miembros individuales de una estructura en términos de su correspondiente variable puntero se pueden acceder: VarPuntero->miembro Considerando el ejemplo anterior: struct regEquipo { char nombre[40]; int numVictorias; int numDerrotas; float costoAfiliacion; } ; Estructuras Estructuras y Punteros: struct regEquipo equipo, *aptVar; aptVar = &equipo; aptVar->nombre aptVar->numVictorias aptVar->numDerrotas aptVar->costoAfiliacion El acceso a los miembros usando aptVar será :
Computación I Se puede transferir a una función los miembros individuales o la estructura completa, igualmente se puede devolver desde una función miembros individuales o la estructura completa usando la cláusula return. A continuación se presenta un ejemplo de paso de una estructura como argumento a una función. Estructuras Paso de una Estructura a una Función:
Computación I Estructuras #include struct datos { char nom[12]; char ape[12]; float sue; }; void leer (struct datos *p); void mostrar (struct datos p); void main() { struct datos empleado; clrscr(); leer ( &empleado ); clrscr(); mostrar ( empleado ); getch(); } void leer (struct datos *p) { printf("\nNombre: "); scanf("%s", p->nom); printf(“\nApellido: "); scanf("%s", p->ape); printf(“\nSueldo: "); scanf("%f", &p->sue); } void mostrar (struct datos p) { printf(“\nNombre: %s”, p.nom); printf(“\nApellido: %s”, p.ape); printf(“\nSueldo: %.2f”, p.sue); } Ejemplo de Paso de una Estructura a una Función
Computación I A su vez, una estructura puede ser miembro de otra estructura: struct regDetalles { int golesFavor; int golesContra; int empates; } struct regEquipo { char nombre[40]; int numVictorias; int numDerrotas; float costoAfiliacion; struct regDetalles detalles; } ; struct regEquipo equipo1; struct regEquipo equipo2={“Tachira”, 25, 12, , 47, 32, 11}; Estructuras
Computación I Si un miembro de una estructura es a su vez otra estructura, entonces el miembro de la estructura mas interna puede ser accedido: struct regEquipo { char nombre[40]; int numVictorias; int numDerrotas; float costoAfiliacion; struct regDetalles detalles; } ; struct regEquipo equipo1; Para tener acceso a los miembros del regDetalles de equipo1: equipo1. detalles. golesFavor equipo1. detalles. golesContra equipo1. detalles. empates struct regDetalles { int golesFavor; int golesContra; int empates; } Estructuras
Computación I También es posible definir un vector de estructuras: struct regEquipo { char nombre[40]; int numVictorias; int numDerrotas; float costoAfiliacion; struct regDetalles detalles; } vEquipos[5]; ó struct regEquipo vEquipos[5]; Estructuras Nombre numVictorias numDerrotas costoAfiliacion detalles golesFavor golesContra empates vEquipos
Computación I Considere el siguiente vector de estructura: vEquipos[pos]. detalles. golesFavor vEquipos[pos]. detalles. golesContra vEquipos[pos]. detalles. empates struct regDetalles { int golesFavor; int golesContra; int empates; } Estructuras struct regEquipo { char nombre[40]; int numVictorias; int numDerrotas; float costoAfiliacion; struct regDetalles detalles; }; struct regEquipo vEquipos[5]; vEquipos[pos]. nombre vEquipos[pos]. numVictorias vEquipos[pos]. numDerrotas vEquipos[pos]. costoAfiliacion El acceso a los miembros de un vector de estructura será:
Computación I Estructuras #include struct datos { char nom[12]; char ape[12]; float sue; }; void main() { struct datos vector[3]; int i; clrscr(); for (i=0;i<3;i++) { printf("\nNombre: "); scanf("%s", vector[i].nom); printf(“\nApellido: "); scanf("%s”, vector[i].ape); printf(“\nSueldo: "); scanf("%f", &vector[i].sue); } clrscr(); printf("Nombre\t Apellido\t Sueldo \n\n"); for (i=0;i<3;i++) printf("%s\t %s \t %.2f \n", vector[i].nom, vector[i].ape, vector[i].sue); getch(); } Ejemplo de Vector de Estructura
Computación I Estructuras #include struct datos { char nom[12]; char ape[12]; float sue; }; void leer (struct datos *p); void mostrar (struct datos p); void main() { struct datos vector[3]; clrscr(); leer(vector); clrscr(); mostrar(vector); getch(); } void leer (struct datos *p) { int i; for (i=0;i<3;i++) { printf("\nNombre: "); scanf("%s", p[i].nom); printf("Apellido: "); scanf("%s", p[i].ape); printf("Sueldo: "); scanf("%f", &p[i].sue); } void mostrar (struct datos p) { int i; printf("Nombre\t Apellido\t Sueldo \n\n"); for (i=0;i<3;i++) printf("%s\t %s \t %.2f \n", p[i].nom,p[i].ape,p[i].sue); } Ejemplo de Paso de un Vector de Estructuras a una Función