Escolar Documentos
Profissional Documentos
Cultura Documentos
TiposEstruturadosdeDados
UNIDADEIII
AlgoritmoseLgicadeProgramao
PetrnioCarlosBezerra
petroniocg@ifpb.edu.br
IFPB CampusdeCampinaGrande
Struct
2 3
Struct
Struct
Parte da informao texto (cadeia de caracteres), outra do tipocaractere,outra detiponumrica Para armazenar toda esta informao numa nica estrutura de dados, precisamos de um tipo de dados que permita que seus elementospossamserdetiposdiferentes Para isso, a linguagem C providencia o tipo de dados estrutura (struct)
IFPB CampusdeCampinaGrande
IFPB CampusdeCampinaGrande
Struct
4 5
Struct
z
O struct permite que seus elementos, que so designados por campos,possamserdetiposdiferentes O acesso a cada um dos campos no feito atravs da localizao na estrutura, mas sim atravs do nome do campo a quesepretendeacessar
Declarao,inicializaoeatribuiodeestruturas
Acessopornomeao
IFPB CampusdeCampinaGrande
IFPB CampusdeCampinaGrande
Struct
6 7
Struct
A palavra chave struct informa ao compilador que um modelo de estrutura est sendo definido, e a partir de agora ele reconhecer onovotipodedados Observe que a estrutura termina com um ponto e vrgula, isso porqueadefiniodeumaestrutura umcomando O identificador da estrutura tdados_pessoa indica essa estruturadedadosparticulare oseuespecificadordetipo
At aqui, nenhuma varivel foi de fato declarada. Apenas a formadosdadosfoidefinida Para declarar uma varivel do tipo tdados_pessoa, devemos escrever:
struct tdados_pessoa PESSOA,GRUPO_PESSOAS[10];
IFPB CampusdeCampinaGrande
IFPB CampusdeCampinaGrande
Struct
8 9
Struct
struct tdados_pessoa { char NOME[60]; char SEXO; unsigned int DIA; unsigned int MES; unsigned int ANO; }PESSOA,GRUPO_PESSOAS[10];
Quando uma varivel de estrutura declarada, o compilador aloca automaticamente memria suficiente para todos os seus membros Se voc precisa de apenas uma varivel estruturada, um nome paraaestruturano necessrio.
struct { char NOME[60]; char SEXO; unsigned int DIA; unsigned int MES; unsigned int ANO; }PESSOA;
IFPB CampusdeCampinaGrande
IFPB CampusdeCampinaGrande
Struct
10 11
Struct
Existe uma outra forma de criar um novo tipo de dados em linguagemC usandoparaesseefeitoainstruotypedef
typedef struct { char NOME[60]; char SEXO; unsigned int DIA; unsigned int MES; unsigned int ANO; }TDADOS_PESSOA;
Oidentificadortdados_pessoa definiaapenasaestrutura,agora TDADOS_PESSOA um identificador de toda a declarao da estrutura incluindoapalavrareservadastruct Para distinguir o tipo de dados do identificador da estrutura, normalmente usase o mesmo identificador, mas em caracteres maisculos Quando se define uma estrutura atravs do typedef possvel omitir o identificador da estrutura usado anteriormente (o identificadortdados_pessoa)
IFPB CampusdeCampinaGrande
IFPB CampusdeCampinaGrande
Struct
12 13
Struct
Na definio de uma estrutura usando o typedef, no podem ser declaradas, nem inicializadas, variveis. Estas tm de ser declaradas parte
TDADOS_PESSOAPESSOA,GRUPO_PESSOAS[10];
z
As definies de tipos de dados usando o typedef, so colocados no incio dos cdigos fonte logo aps as diretivas de include, de maneira a tornar o tipo de dados visvel por todo o programa
AcessandoosCamposdeEstruturas
IFPB CampusdeCampinaGrande
IFPB CampusdeCampinaGrande
Struct
14 15
Struct
z
EstruturasHierrquicas
A linguagem C permite que um campo de uma estrutura possa serumaestrutura,oquesechamadeestruturashierrquicas Como a data constitui um tipo de informao muito frequente, fazsentidoquesejadeclaradacomoumaestruturaautnomae depoisusadanadeclaraodeoutrasestruturas
A matriz de caracteres PESSOA.NOME pode ser usada para chamar o gets()dessaforma: gets(PESSOA.NOME); Paraimprimirocontedoumcaractereporvez: for(t=0;PESSOA.NOME[t];t++) putchar (PESSOA.NOME[t]);
IFPB CampusdeCampinaGrande
IFPB CampusdeCampinaGrande
Struct
16 17
Struct
typedef struct { unsigned int DIA; unsigned int MES; unsigned int ANO; }TDATA; typedef struct { char NOME[60]; char SEXO; TDATA DATA_NASCIMENTO; }TDADOS_PESSOA;
Declarao hierarquizada provoca consequncias na inicializao da estrutura TDADOS_PESSOA, bem como, no acesso aoscamposdadata
TDADOS_PESSOAPESSOA={"VincentVanGogh",M,{30,3,1853}};
OacessoaoscamposdaestruturaTDATA:
TDADOS_PESSOAPESSOA; ... PESSOA.DATA_NASCIMENTO.DIA=30;
IFPB CampusdeCampinaGrande
IFPB CampusdeCampinaGrande
Struct
18 19
Struct
#include<stdio.h> void main (void){ struct{ int a; int b; }x,y; x.a=10; y=x;/*Atribuiumaestruturaaoutra*/ printf (%d,y.a); }
AtribuiodeEstruturas
A informao contida em uma estrutura pode ser atribuda a outraestruturadomesmotipo Ao invs de atribuir os valores de todos os elementos separadamente,podeseusarumnicocomandodeatribuio Exemplo:
IFPB CampusdeCampinaGrande
IFPB CampusdeCampinaGrande