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

ESTRUTURAS

Prof Ms. Eng Elaine Ceclia Gatto


Curso de Bacharelado em Engenharia de Computao
Universidade do Sagrado CoraO USC
Bauru/SP
Estruturas: conceito/definio
So colees de variveis relacionadas agrupadas sob um
nico nome.
Podem conter variveis de muitos tipos de dados diferentes.
So usadas para declarar registros a serem armazenados em
arquivo.
Estruturas de dados mais complexas: listas, filas, pilhas e
rvores.
Ponteiros e estruturas facilitam a formao dessas estruturas.
Tipos de dados derivados (e no primitivos)



Declaraes de Estruturas
Declarao de uma estrutura:
struct card {
char * face;
char *suit;
};

STRUCT a palavra chave para estrutura;
TAG DE ESTRUTURA: neste caso a palavra CARD. A Tag de
Estrutura usada para declarar variveis desse tipo de
estrutura, o identificador deste tipo de estrutura.
As variveis dentro da estrutura chamam-se MEMBROS.
No esquecer do ponto e vrgula ao final da declarao!

Declaraes de Estruturas
Obs.: dois tipos de estruturas diferentes podem ter membros
com o mesmo nome;
Vetores e matrizes tem um nico tipo. Exemplo um vetor de
reais ou uma matriz de inteiros.
Estruturas podem ter vrios tipos de dados diferentes.
Exemplo:

struct funcionario {
char nome[20];
char sobrenome[20];
int idade;
char sexo;
double salario;
};
Estrutura Autorreferenciada
uma estrutura que contm um membro que um ponteiro
para o mesmo tipo de estrutura. So usadas para criar listas
interligadas. Exemplo:

struct funcionario2 {
char nome[20];
char sobrenome[20];
int idade;
char sexo;
double salario;
struct funcionario2 *ePtr; //estrutura autorreferenciada
}
Declaraes de variveis de
tipos de estrutura
Declaraes de estruturas no criam espao na memria;
Declaraes de estruturas criam um novo tipo de dado;
Esse novo tipo de dado usado para declarar variveis que ento
ocupam espao na memria;
Exemplo:

struct card aCard, deck[52], *carPtr;
OU
struct card {
char *face;
char *suit;
} aCard, deck[52], *carPtr;
aCard: uma varivel do tipo struct card;
deck: um vetor com 52 posies do tipo struct card;
carPtr: um ponteiro para struct card;

Nomes para tags de estruturas
O nome para a tag de estrutura opcional;
Entretanto, sempre fornea um nome, uma prtica
recomendada;
Escolha um nome significativo para a tag de estrutura. Isto
ajuda a tornar o programa mais legvel e melhor
documentado.
Se uma declarao de estrutura no tiver um nome para a tag
de estrutura, as variveis do tipo da estrutura s podero ser
declaradas na declarao da estrutura, e no em uma
declarao separada.

Operaes que podem ser
realizadas nas estruturas
Operaes vlidas:
Atribuio de variveis da estrutura a variveis da estrutura de
mesmo tipo;
Coleta de endereo de uma varivel de estrutura (operador
&);
Acesso aos membros de uma varivel de estrutura;
Uso do operador sizeof para determinar o tamanho de uma
varivel de estrutura.

NO PODEMOS:
Comparar estruturas usando == e !=
Inicializao de estruturas
Parecido com vetores e matrizes. Exemplo:

struct card aCard = {Trs, Copas};

Inicializa o membro da estrutura FACE com o valor TRS e o
membro SUIT com o valor COPAS.
Ateno: se o nmero de inicializadores na lista for menor que
os membros na estrutura, os membros restantes sero
automaticamente inicializados em zero, ou NULL se o membro
for um ponteiro.
Acesso a membros da
estrutura
Dois operadores so usados para acessar os membro de uma
estrutura:
Operador de membro de estrutura ou operador de ponto ( . )
um ponto de fato!
Operador de ponteiro de estrutura ou operador de seta ( )
uma seta de fato!

Exemplo 1: printf(%s, aCard.suit);
Exemplo 2: printf(%s, cardPtr->suit);

Ambos imprimem na tela o contedo de SUIT;


Acesso a membros da
estrutura
/* Usando operadores de membro da estrutura e deponteiro da
estrutura */

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

/* Declarao da estrutura da carta */
struct card {
char *face; //ponteiro
char * suit; //ponteiro
}; //fim da estrutura

Acesso a membros da
estrutura
int main(void){
struct card aCard; //declarao de varivel
struct card *cardPtr; //declarao de ponteiro
//coloca strings em aCard
aCard.face = s;
aCard.suit = Espadas;
//atribui o endereo de aCard a cardPtr
cardPtr = &aCard;
printf( %s%s%s \n %s%s%s \n %s%s%s \n ,
aCard.face, de , aCard.suit,
cardPtr->face, de , cardPtr->suit,
(*cardPtr).face, de , (*cardPtr).suit);
return 0; //concluso bem sucedida
}
Uso de estruturas com funes
As estruturas podem ser passadas a funes ao:
Passar membros da estrutura individuais;
Passar uma estrutura inteira;
Passar um ponteiro para uma estrutura;

Quando as estruturas ou membros individuais da estrutura
so passados a uma funo, eles so passados por valor;
Os membros das estruturas passados por valor no podem
ser modificados pela funo utilizada;

Para passar uma estrutura por referncia:
Passe o endereo da varivel da estrutura;

Uso de estruturas com funes
Um array pode ser passado por valor usando uma estrutura;
Para isto faa:
Crie uma estrutura que tenha o array como membro;
Estruturas so passadas por valor, de modo que o array
tambm passado por valor;

ERRO LGICO: supor que estruturas como arrays sejam
passadas automaticamente por referncia e tentar modificar
os valores da estrutura passadas por valor na funo utilizada;
DICA: passar estruturas por referncia mais eficiente do que
passar estruturas por valor;
TYPEDEF
TYPEDEF: oferece um mecanismo de criao de sinnimos
para tipos de dados previamente definidos;
Usado para definir um tipo da estrutura, de modo que a tag da
estrutura no necessria;
Exemplo 1: typedef struct card Card;
Exemplo 2:

typedef struct {
char *face;
char *suit;
} Card;
TYPEDEF
A declarao anterior cria o tipo de estrutura Card sem a
necessidade de uma instruo typedef separada. Agora Card
pode ser usado para declarar variveis do tipo struct card.

Card deck[52];

Criar um novo nome com TYPEDEF no cria um novo tipo;
Typedef simplesmente cria um novo nome de tipo, que pode
ser usado como um alias par aum nome de tipo existente;
Use TYPEDEF para ajudar a tornar o seu programa mais
portvel;
Tambm pode ser usado para criar alias para os tipos de
dados bsicos.

Exemplo 1
/* Cria uma estrutura para armazenar dados de um aluno */
#include <stdio.h>
#include <stdlib.h>

struct aluno {
int nmat; //nmero da matrcula
float nota[3]; //notas
float media; //mdia
};

Exemplo 1
int main () {
struct Aluno Jose; //declara uma varivel do tipo struct
Jose.nmat = 456;
Jose.nota[0] = 7.5;
Jose.nota[1] = 5.2;
Jose.nota[2] = 8.4;
Jose.media = (Jose.nota[0] + Jose.nota[1] + Jose.nota[2])
/ 3.0;
printf(Matrcula: %d \n , Jose.nmat);
printf(Mdia: %2f \n , Jose.media);
system(Pause);
return 0;
}

Exemplo 2
/* estruturas aninhadas */
#include <stdio.h>
#include <stdlib.h>

typedef struct {
int dia;
char mes[10];
int ano;
} Data;

typedef struct {
int pecas;
float preo
Data diavenda;
} Venda;
Exemplo 2
int main () {
static Venda A = {20, 110.0, {7, novembro, 2001}};
printf(Peas: %d \n, A.pecas);
printf(Preo: %d \n, A.preco);
printf(Data: %d de %s de %d \n, A.diavenda.dia,
A.diavenda.mes, A.diavenda.ano);
system(PAUSE);
return 0;
}
Exemplo 3
/* Mostra a passagem de estruturas para funes por valor.
Mostra uma funo que retorna uma estrutura */

#include <stdio.h>
#include <stdlib.h>

typedef struct Venda {
int pecas;
float preco;
} Venda;

Venda TotalVendas(Venda C, Venda D); //prottipo
Exemplo 3
int main () {
Venda A, B, Total;
printf( Venda A \n ========== \n);
printf( Insira o nmero de peas);
scanf(%d, &A.pecas);
printf( Insira o preo);
scanf(%d, &A.preco);

printf( Venda B \n ========== \n);
printf( Insira o nmero de peas);
scanf(%d, &B.pecas);
printf( Insira o preo);
scanf(%d, &B.preco);
Exemplo 3
//estruturas como argumento e retorno
Total = TotalVendas(A, B);
printf( \n \n Venda Total \n ===========);
printf( \n Total de Peas %d., Total.pecas);
printf( \n Preo Total: %.2f \n, Total.preco);
system(PAUSE);
return 0;
}
Venda TotalVendas(Venda C, Venda D) {
Venda T;
T.Pecas = C.pecas + D.pecas;
T.Preco = C.preco + D.preco;
Return T;
}

Exerccios
1. Fornea a definio para uma estrutura ESTOQUE que
contm um array de caracteres nomePeca[30], o inteiro
numPeca, o preo em ponto flutuante, o inteiro quantidade
e o inteiro pedido.
2. Fornea a definio para uma estrutura chamada endereo,
que contm os arrays de caracteres rua[25], cidade[20],
estado[2] e cep[8].
3. Fornea a definio para uma estrutura aluno que contm
os arrays nome[15] e sobrenome[15] e a varivel endResid
do tipo struct endereo do exerccio 2.

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