Você está na página 1de 4

AGRUPAMENTO DE ESCOLAS DE SANTA COMBA DO

CURSO PROFISSIONAL DE TCNICO DE GESTO E PROGRAMAO DE SISTEMAS


INFORMTICOS
2012-2015
PROGRAMAO E SISTEMAS DE INFORMAO

MDULO 5 Estruturas de dados Compostas (40 aulas/45min)

Objetivos do mdulo:

- Definir e manipular tipos de dados compostos;

- Aplicar a estrutura de dados apropriada ao problema;

- Definir estruturas;

- Definir unies;

- Definir variveis simples a partir de estruturas;

- Definir matrizes a partir de estruturas;

- Definir variveis simples a partir de unies;

Contedos do mdulo:

- Definio de estruturas de dados compostas;

- Acesso aos campos de uma estrutura;

- Afetao dos campos de uma estrutura;

- Utilizao de Array de estruturas;

- Desenho de aplicaes que envolvam estruturas de dados de alguma complexidade.

Definio

Em C possvel que o programador defina os seus prprios tipos de dados combinando outros tipos de
dados bsicos numa s estrutura.

A ideia agregar numa estrutura os dados que esto relacionados.

Por exemplo, considere um programa para gerir dados de alunos em que, para cada aluno, pretendemos
armazenar a seguinte informao:

Nome, Morada, Cdigo Postal, N de Telefone, Email, Data de Nascimento

At agora a soluo passava por criar um vetor para cada elemento a armazenar ou, na melhor das
hipteses, combinar os elementos de acordo com o seu tipo de dados.

As estruturas permitem combinar estes campos agrupando-os num s tipo de dados, assim:

alunosnet@gmail.com alunosnet.pt.vu Pgina 1 de 4


struct aluno{
char nome[50];
char morada[100];
char cp[9];
char telefone[10];
char email[100];
char data_nascimento[9];
};

Assim temos um novo tipo de dados denominado struct aluno com vrios campos.

Sendo um novo tipo de dados podemos declarar uma varivel desse mesmo tipo de dados assim:

struct aluno x;

A varivel x composta por vrios campos que so referenciados utilizando o operador . (ponto final) logo a seguir
varivel para indicar qual o campo a referir.

printf(Introduza o nome:);

gets(x.nome);

printf(O nome introduzido foi: %s\n,x.nome);

Quando definimos o tipo de dados podemos, tambm, criar variveis com base nesse mesmo tipo de dados basta
adicionar o nome das variveis entre a } (chaveta a fechar) e o ; (ponto e vrgula) na declarao da estrutura;

struct aluno{
char nome[50];
char morada[100];
char cp[9];
char telefone[10];
char email[100];
char data_nascimento[9];
} var1,var2;

Quando s precisamos de uma varivel da estrutura podemos omitir o nome da estrutura e s indicar o da varivel.

A definio da estrutura pode estar dentro de uma funo mas as boas prticas indicam que devem estar fora e no
inicio do cdigo, logo a seguir aos #include e #define.

Uma maneira de simplificar o cdigo passa por utilizar a instruo typedef em conjunto com a struct para criar um
tipo de dados que permite definir as variveis sem utilizar a palavra struct, assim:

typedef struct{
char nome[50];
char morada[100];
char cp[9];
char telefone[10];
char email[100];
char data_nascimento[9];
} aluno;

Podemos, agora, definir variveis somente utilizando o tipo de dados definido:

alunosnet@gmail.com alunosnet.pt.vu Pgina 2 de 4


aluno x;

Inicializao

Tal como nos restantes tipos de dados podemos inicializar as variveis definidas com base numa estrutura quando as
declaramos.

typedef struct{
int x,y;
}ponto;

ponto p={1,2};

Tambm podemos atribuir os valores aps a declarao:

typedef struct{
int x,y;
}ponto;


ponto p;
p.x=1;
p.y=2;

Podemos ainda atribuir os valores de uma estrutura a outra:


typedef struct{
int x,y;
}ponto;


ponto p,q;
p.x=1;
p.y=2;
q=p;

Ateno que no possvel utilizar o operador == (igual) entre duas variveis declaradas com base em estruturas, a
igualdade tem de ser avaliada campo a campo.

Passagem a funes

Tal como as restantes variveis tambm podemos passar uma varivel criada com base numa estrutura para uma
funo. As regras so as mesmas quanto passagem por valor ou por referncia.

Alm de passar uma estrutura completa podemos passar somente um elemento da estrutura do seguinte modo:

func(p.x);

Quando passamos s um elemento a funo deve ter um parmetro com o tipo de dados que coincida com o tipo de
dados do elemento passado.

A passagem da estrutura inteira para dentro de uma funo implica que a estrutura seja definida globalmente.

alunosnet@gmail.com alunosnet.pt.vu Pgina 3 de 4


Quando passamos uma estrutura inteira o parmetro deve ser definido a partir da mesma estrutura se no o
compilador d erro, no basta que seja de uma estrutura idntica.

Vetores de estruturas

Um vetor pode ser definido com base numa estrutura assim:

typedef struct{
int x,y;
}ponto;


ponto pontos[10];

Com um vetor passamos a ter de indicar no s o campo da estrutura mas tambm o ndice dentro do vetor:

typedef struct{
int x,y;
}ponto;


ponto pontos[10];

printf(%d - %d\n,pontos[2].x,pontos[2].y);

alunosnet@gmail.com alunosnet.pt.vu Pgina 4 de 4