Estructuras en C

Anuncio
Estructuras en C
Felipe Osorio
http://www.ies.ucv.cl/fosorio
Instituto de Estadı́stica
Pontificia Universidad Católica de Valparaı́so
Abril 13, 2015
1 / 11
Estructuras en C
I Las estructuras permiten agrupar elementos de distinto tipo.
I Es un tipo de elemento muy flexible.
I Son particularmente útiles cuando se usan asociadas con funciones y punteros.
2 / 11
Definición de una estructura
Definición (estructura)
struct nombre {
declaraciones de variables ;
}
Por ejemplo, podemos crear una estructura para almacenar fechas:
struct
int
int
int
}
fecha {
dia ;
mes ;
ano ;
En este caso, dia, mes y ano son llamados miembros de la estructura.
3 / 11
Ejemplo con estructura “fecha”
# include < stdio .h >
int main () {
struct fecha { /* define estructura ’ fecha ’ */
int dia , mes , ano ;
}
struct fecha hoy ; /* declara variable ’ hoy ’ */
/* asigna
hoy . dia =
hoy . mes =
hoy . ano =
valores a miembros de ’ hoy ’ */
13;
4;
2015;
printf ( " La fecha de hoy es : % i /% i /% i \ n " , hoy . dia , hoy . mes , hoy . ano );
return 0;
}
4 / 11
Creando álias: typedef
Para crear álias (A.K.A., pseudónimo o nombre asociado) a una variable o estructura
es útil usar el comando typedef.
Para el ejemplo de la “fecha” podemos considerar:
typedef struct {
int dia , mes , ano ;
} fecha ;
Realmente, lo anterior es equivalente a:
struct fecha {
int dia , mes , ano ;
}
typedef struct fecha fecha ;
5 / 11
Creando álias: typedef
Para crear álias (A.K.A., pseudónimo o nombre asociado) a una variable o estructura
es útil usar el comando typedef.
Para el ejemplo de la “fecha” podemos considerar:
typedef struct {
int dia , mes , ano ;
} fecha ;
Realmente, lo anterior es equivalente a:
struct fecha {
int dia , mes , ano ;
}
typedef struct fecha fecha ;
5 / 11
Ejemplo con estructura “fecha”, revisado
# include < stdio .h >
typedef struct { /* define estructura ’ fecha ’ */
int dia , mes , ano ;
} fecha ;
int main () {
fecha hoy ; /* declara variable ’ hoy ’ como ’ fecha ’ */
/* asigna
hoy . dia =
hoy . mes =
hoy . ano =
valores a miembros de ’ hoy ’ */
13;
4;
2015;
printf ( " La fecha de hoy es : % i /% i /% i \ n " , hoy . dia , hoy . mes , hoy . ano );
return 0;
}
6 / 11
Inicializando estructuras
# include < stdio .h >
typedef struct { /* define estructura ’ fecha ’ */
int dia , mes , ano ;
} fecha ;
int main () {
fecha hoy , manana ; /* declara variables ’ hoy ’ y ’ ma~
n ana ’ */
hoy = ( fecha ) {. dia = 13 , . mes = 4 , . ano = 2015};
manana = ( fecha ) { hoy . dia + 1 , hoy . mes , hoy . ano };
/* imprime fechas */
printf ( " La fecha de hoy es : % i /% i /% i \ n " , hoy . dia , hoy . mes , hoy . ano );
printf ( " fecha de manana es : % i /% i /% i \ n " , manana . dia , manana . mes ,
manana . ano );
return 0;
}
7 / 11
Funciones y estructuras
Si z ∈ C entonces z puede ser escrito como
z = a + ib,
con a, b ∈ R y i =
digamos
√
−1. De este modo, si deseamos sumar dos numeros complejos,
x = a + ib,
y = c + id,
debemos hacer:
z = x + y = (a + c) + i(b + d).
8 / 11
Funciones y estructuras
# include < stdio .h >
typedef struct { /* define estructura ’ complejos ’ */
double real ;
double imag ;
} complejo ;
complejo suma r_comple jo ( complejo x , complejo y );
int main () {
complejo x , y , z ; /* declara variables ’x ’, ’y ’ y ’z ’ como complejos */
/* asigna valores a ’x ’ e ’y ’ */
x = ( complejo ) {. real = 1.5 , . imag = 0.8};
y = ( complejo ) {. real = 1.0 , . imag = 1.2};
printf ( " x : % g + i % g \ n " , x . real , x . imag );
printf ( " y : % g + i % g \ n " , y . real , y . imag );
z = sumar_co mplejo (x , y );
printf ( " z : % g + i % g \ n " , z . real , z . imag );
return 0;
}
complejo suma r_comple jo ( complejo x , complejo y )
{ /* suma dos números complejos */
complejo z ;
z . real = x . real + y . real ;
z . imag = x . imag + y . imag ;
return z ;
}
9 / 11
Arreglos de estructuras
Volviendo al ejemplo de la ‘fecha’. Note que también podemos definir un arreglo de
fechas para almacenar, por ejemplo, los cumpleños de quienes están en este curso.
Defina:
typedef struct { /* define estructura ’ fecha ’ */
int dia , mes , ano ;
} fecha ;
fecha cumpleanos [15]; /* alumnos + profe */
/* fecha de cumplea~
n os del profe */
cumpleanos [0]. dia = 16;
cumpleanos [0]. mes = 7;
cumpleanos [0]. ano = 1977;
10 / 11
Más opciones con estructuras...
Aunque más generalmente, las estructuras pueden “contener”:
I Arreglos.
I Otras estructuras.
I Punteros.
y también se puede definir punteros a estructuras1 .
1 Asista a la próxima clase!
11 / 11
Descargar