Escolar Documentos
Profissional Documentos
Cultura Documentos
Linguagem C: struct
Registros e Structs
Um registro (= record) um "pacote" de variveis, possivelmente de tipos diferentes. Na
linguagem C, registros so conhecidos como s t r u c t s (o nome uma abreviatura de
structure).
{
t
d i a ;
m e s ;
a n o ;
t
t
uma boa ideia dar um nome classe de todos os registros de um mesmo tipo. No nosso
exemplo, d m a parece um nome apropriado:
s t r u c
i n
i n
i n
} ;
s t r u c
s t r u c
d m
d i
m e
a n
t
t
t
t
t
a
{
a ;
s ;
d m a
d m a
o ;
x ;
/ /
u m
y ;
/ /
u m
r e g i s t r o
r e g i s t r o
d o
y
d o
t i p o
t i p o
d m a
d m a
3 1 ;
1 2 ;
2 0 1 5 ;
Registros podem ser tratados como um novo tipo-de-dados. Depois da seguinte definio,
por exemplo, podemos passar a dizer "d a t a " no lugar de "s t r u c t d m a ":
t y p e d e f
d a t a x ,
s t r u c t
y ;
d m a
d a t a ;
1/4
14/02/2016
Linguagem C: struct
f i
d a t a
. .
. .
f i m .
f i m .
f i m .
r e t u
m E v e n t o
f i m ;
( d a t a
i n i c i o ,
i n t
d u r a c a o )
.
.
d i a
m e s
a n o
r n f
. . .
. . .
. . .
=
=
i m ;
O cdigo foi omitido porque um tanto enfadonho: deve levar em conta a existncia de
meses com 31 dias, de meses com 30 dias, com 29 dias, etc. Eis como essa funo poderia
ser usada:
i n t
m a
d a t
i n t
s c a
s c a
i n
( v o i d )
b ;
a ,
d ;
n f
( " %
( " %
b = f i m E v
p r i n t f ( "
r e t u r n E X
n f
% d % d
d " , & d )
e n t o ( a
% d % d %
I T _ S U C C
" ,
& a . d i a ,
& a . m e s ,
& a . a n o ) ;
;
,
d ) ;
d \ n " ,
E S S ;
b . d i a ,
b . m e s ,
b . a n o ) ;
Exerccios 1
1. Complete o cdigo da funo f i m E v e n t o acima.
2. Escreva uma funo que receba dois structs do tipo d m a , cada um representando uma data
vlida, e devolva o nmero de dias que decorreram entre as duas datas.
3. Escreva uma funo que receba um nmero inteiro que representa um intervalo de tempo
medido em minutos e devolva o correspondente nmero de horas e minutos (por exemplo,
converte 131 minutos em 2 horas e 11 minutos). Use uma struct como a seguinte:
s t r u c t
i n t
i n t
} ;
h m
{
h o r a s ;
m i n u t o s ;
Structs e ponteiros
Cada registro tem um endereo na memria do computador. (Voc pode imaginar que o
endereo de um registro o endereo de seu primeiro campo.) muito comum usar um
ponteiro para guardar o endereo de um registro. Dizemos que um tal ponteiro aponta para
o registro. Por exemplo,
d a t a * p ;
d a t a
x ;
p = & x ;
/ /
/ /
a g o r a
u m
p o n t e i r o
p
http://www.ime.usp.br/~pf/algoritmos/aulas/stru.html
a p o n t a
p a r a
p a r a
r e g i s t r o s
d m a
x
2/4
14/02/2016
Linguagem C: struct
( * p ) . d i a
=
3 1 ;
/ /
m e s m o
e f e i t o
q u e
x . d i a
3 1
equivale a * ( p . d i a )
3 1 ;
/ /
m e s m o
e f e i t o
q u e
( * p ) . d i a
3 1
Exerccios 2
1. Defina um registro e m p r e g a d o para guardar os dados (nome, sobrenome, data de nascimento,
RG, data de admisso, salrio) de um empregado de sua empresa. Defina um vetor de
e m p r e g a d o s para armazenar todos os empregados de sua empresa.
2. Um racional qualquer nmero da forma p/q, sendo p inteiro e q inteiro no nulo.
conveniente representar um racional por um registro:
t y p e d e f s t r u c t
i n t p , q ;
} r a c i o n a l ;
Vamos convencionar que o campo q de todo racional estritamente positivo e que o mximo
divisor comum dos campos p e q 1 . Escreva funes
r e d
n e g
s o m
m u l
d i v
http://www.ime.usp.br/~pf/algoritmos/aulas/stru.html
3/4
14/02/2016
http://www.ime.usp.br/~pf/algoritmos/aulas/stru.html
Linguagem C: struct
4/4