Вы находитесь на странице: 1из 7

Lenguaje C

ESTRUCTURAS

2001

Una estructura es un conjunto de una o mas variables, posiblemente de diferente tipo, agrupadas bajo un mismo nombre para hacer mas efectivo su manejo. En otros lenguajes las estructuras se conocen con el nombre de registros.

Definicin de Estructuras.Las estructuras son tipos de datos derivados, es decir, estn construidas utilizando otros tipos de datos, Considere la siguiente definicin de estructura:

struct fecha { int dia; int mes; int anno; }

La palabra reservada struct indica al compilador que se est definiendo una estructura, que no es mas que una lista de declaraciones encerradas entre llaves. El identificador fecha es el nombre de la estructura. Las variables declaradas dentro de las llaves de la definicin de la estructura son los miembros de la estructura ( conocidas en otros lenguajes como campos ). terminar con un punto y coma. La definicin anterior no reserva espacio de memoria, es decir, no se han declarado variables, sino que se ha generado un nuevo tipo de datos que se utilizar para declarar variables. Las variables de estructuras se declaran como se declaran las variables de otros tipos. Ejemplo: struct fecha fecha_nac, a[10]; La definicin de la estructura debe

Guia Preparada por: .............................................................................................NEREYDA CARRERO MIRANDA

68

Lenguaje C

2001

El enunciado anterior declara una variable fecha_nac como una estructura del tipo struct fecha, y declara un arreglo a con 10 elementos del tipo struct fecha. Las variables de un tipo dado de estructura pueden ser declaradas a la vez que se define la estructura como sigue:

struct fecha { int dia; int mes; int anno; }; fecha_nac, a[10];

El nombre de una estructura es opcional, aunque es una buena prctica de programacin asignarle un nombre. Si la definicin de la estructura no contiene nombre, las variables de este tipo de estructura, pueden ser declaradas nicamente en la definicin de la estructura y no en una declaracin por separado.

Inicializacin de Estructuras.Las estructuras pueden ser inicializadas mediante listas de inicializacin como los arreglos. Para inicializar una estructura, se escribe en la declaracin de la

estructura, despus del nombre de la variable un signo igual, con los inicializadores separados por comas, encerrados entre llaves. Ejemplo: struct fecha fecha_nac = { 24,07,1883 } Las variables de estructura tambin pueden ser incializadas en enunciados de asignacin, asignando valores a los miembros individuales de la misma.

Acceso a los miembros de una Estructura.Para accesar los miembros de una estructura se utilizan dos operadores: el operador de miembro de estructura u operador punto ( . ) y el operador de apuntador de estructura ( ) tambin conocido como el operador flecha.

Guia Preparada por: .............................................................................................NEREYDA CARRERO MIRANDA

69

Lenguaje C
Operador Punto.-

2001

El operador de miembro de estructura u operador punto, tiene acceso a un miembro de la estructura mediante el nombre de la variable de la estructura y el nombre del miembro de la estructura. Por ejemplo, el da de la estructura fecha_nac de la declaracin anterior sera: printf(El da de nacimiento es: %d, fecha_nac.dia); Operador Flecha.El operador de apuntador de estructura u operador flecha, que consiste de un signo menos ( - ) y de un signo mayor ( > ) sin espacios intermedios, tiene acceso a un miembro de estructura va apuntador a la estructura. Suponga que el apuntador

fecha_nacptr se ha declarado para apuntar a struct fecha, y que la direccin de la estructura fecha_nac ha sido asignada a fecha_nacptr. Para imprimir el miembro dia de la estructura fecha_nac utilizando el apuntador fecha_nacptr se utiliza: printf(El da de nacimiento es: %d, fecha_nacptr dia); La expresin fecha_nacptr dia, es equivalente a ( * fecha_nacptr).dia;

Typedef.La palabra reservada typedef proporciona un mecanismo para la creacin de sinnimos (o alias), para los tipos de datos anteriormente definidos. Los nombre de los tipos de estructura se definen a menudo utilizando typedef, a fin de crear nombres de tipos mas breves. Por ejemplo, el enunciado typedef struct fecha Fecha; define el nuevo nombre de tipo Fecha como un sinnimo para struct fecha. Los programadores en C a menudo utilizan typedef para definir un tipo de estructura de tal forma que el nombre de estructura no se requerido. Por ejemplo: typedef struct { int dia; int mes; int anno; } Fecha;
Guia Preparada por: .............................................................................................NEREYDA CARRERO MIRANDA

70

Lenguaje C

2001

La definicin anterior crea el tipo de estructura Fecha que puede ser utilizado para declarar estructuras de este tipo. La declaracin: Fecha b[10]; declara un arreglo b de 10 estructuras Fecha.

Veamos a continuacin una aplicacin de estructuras.

Una empresa tiene un registro de los datos de sus empleados donde almacena la siguiente informacin:

Cdula del empleado Apellidos y Nombres Edad Antigedad (en meses) Sueldo Base

La entidad desea un programa que permita almacenar los datos conocidos en un arreglo de estructuras y que emita un listado con el nuevo sueldo para los empleados beneficiados, si el mismo se calcular con base en el siguiente criterio: la empresa aumentar el sueldo en un 5% del sueldo base por cada tres aos exactos de antigedad. aumento. Los empleados con menos de tres aos de antigedad no recibirn

Guia Preparada por: .............................................................................................NEREYDA CARRERO MIRANDA

71

Lenguaje C
/* Programa de Emleados de una Empresa, con Estructuras */ # # # # include <stdio.h> include <conio.h> include <ctype.h> define MAX 20

2001

typedef struct { char ced[12], nom[35]; int edad, anti; float sueldo; } reg1; void almacenar(reg1 [], int*); void aumentar(reg1 [] ,int);

void main( ) { reg1 emple[MAX]; int n; clrscr( ); almacenar(emple,&n); aumentar(emple,n); }

/* Definicin de la funcin almacenar, para cargar los datos */ void almacenar(reg1 x[ ],int *k) { int i; char resp; reg1 vartem; resp = 'S'; (*k) = 0; while (resp = = 'S' && *k < MAX) { clrscr( ); printf("INDIQUE LOS DATOS DEL EMPLEADO: \ n ");
Guia Preparada por: .............................................................................................NEREYDA CARRERO MIRANDA

72

Lenguaje C
printf("\ nCEDULA: "); fflush(stdin); gets(vartem.ced); printf("\ nAPELLIDO Y NOMBRE: "); gets(vartem.nom); printf("\ nEDAD: "); scanf("%d",&vartem.edad); printf("\ nANTIGUEDAD: "); scanf("%d",&vartem.anti); printf("\ nSUELDO BASE: "); scanf("%f",&vartem.sueldo); x[*k] = vartem; printf("\ n\ nHAY OTRO EMPLEADO?....S/N: "); fflush(stdin); resp=getchar(); resp = toupper(resp); (*k)= (*k) + 1; } }

2001

/* Definicin de la funcin aumentar sueldo */ void aumentar(reg1 x[ ],int k) { int i, fac; float sn; clrscr( ); printf("LISTADO DE LOS EMPLEADOS QUE SE LES AUMENTARA EL SUELDO"); printf("\ n\ nNOMBRE SUELDO NUEVO SUELDO VIEJO"); for( i=0; i<k; i++) if (x[i].anti > 36) { fac = x[i].anti/36; sn = x[i].sueldo + x[i].sueldo*fac*5/100; printf("\ n\ n%s\ t\ t %.2f\ t %.2f",x[i].nom, sn, x[i].sueldo); } }

Guia Preparada por: .............................................................................................NEREYDA CARRERO MIRANDA

73

Lenguaje C
Paso de Estructuras a Funciones.-

2001

Las estructuras pueden ser pasadas como argumentos a funciones pasando miembros de una estructura individual, pasando todas la estructura, o pasando un apuntador a la estructura. Cuando se pasan estructuras o miembros individuales de estructura a una funcin, se pasan en llamada por valor. Por tanto, los miembros de la estructura no podrn ser modificados por la funcin. Para pasar una estructura en llamada por referencia, se pasa la direccin de la variable de estructura. Los arreglos de estructuras, al igual que todo arreglo, son

automticamente pasados por referencia. Un arreglo puede ser pasado en llamada por valor mediante el uso de una estructura. Para pasar un arreglo por valor, se recurre a una estrategia de originar una estructura con el arreglo como miembro. Dado que las estructuras se pasan por valor, el arreglo ser pasado por valor.

Guia Preparada por: .............................................................................................NEREYDA CARRERO MIRANDA

74

Вам также может понравиться