Você está na página 1de 3

Estrutura (struct)

Estrutura (struct)- declarao

 Uma struct uma varivel composta heterognea


 Visa facilitar manipulao de um conjunto de dados
logicamente relacionados, mas de diferentes tipos.
 Exemplo: Considere um registro de alunos, com RA, nome,
CR, sexo, e endereo (composto por rua, nmero, cidade).
RA

nome

07234 Monica Santos

RA

nome

07234 Monica Santos

CR

sexo

endereo

0,73

R. Dois, 321. Rio Claro

CR

sexo

0.73

 Passo1: definir a estrutura


Forma geral: struct <nome_estrutura> {
<tipo_de_dados> <nome da varivel>;
<tipo_de_dados> <nome da varivel>;
<tipo_de_dados> <nome da varivel>;
...
}
RA
nome
Exemplo
struct cadastro {
07234 Monica Santos
int ra;
char nome[50];
float CR;
char sexo;
char endereo[20];
};

endereo
rua
no. cidade
R. Dois 321 Rio Claro
1

Exemplo
struct cadastro {
char ra[6];
char nome[50];
float CR;
char sexo;
char endereco[20];
} aluno, ex_aluno;

endereo
R. Dois, 321. Rio Claro

Estrutura (struct)- declarao


Mais uma forma de declarao de uma struct
 dando nome struct

O mesmo que
Typedef struct tipo_data{
int dia, mes, ano;
} DATA;

struct tipo_data{
int dia, mes, ano;
};
typedef struct tipo_data DATA; /* data o nome do tipo */

Podemos utilizar esse tipo para declarar variveis


int X, Y, Z;

Estrutura (struct) - Utilizao


 Cada campo pode ser acessado escrevendo-se:
nome da varivel, um ponto (.) e o nome do campo.
Sintaxe:
nome_varivel nome_campo;
Considerando a definio:
struct cadastro {
char ra[6];
char nome[50];
float CR;
char sexo;
} aluno;

 Passo2: declarar as variveis que tero esta estrutura


Forma geral: struct <nome_estrutura> <nome_varivel>;
Exemplo:
struct cadastro aluno, ex_aluno;

Estrutura (struct) - declarao


Outra possibilidade de declarar a estrutura e as variveis
em apenas um passo:
Forma geral: struct <nome_estrutura> {
<tipo_de_dados> <nome da varivel>;
<tipo_de_dados> <nome da varivel>;
<tipo_de_dados> <nome da varivel>;
...
} nome_varivel 1, nome varivel 2, . . . Nome varivel n;


CR sexo
0,73

Exemplos.:
alunoCR = 0.75;
alunosexo = F;
alunora = 71234;
/* Para atribuio de string usar a funo
strcpy da biblioteca string.h */

strcpy(alunonome, Soraya);
OBS: Se o campo char for de mais de um elemento (vetor de strings), cada
um dos elementos pode ser acessado pelo seu ndice.
Exemplos:
printf(%c, aluno.nome[2]); /* exibe a letra r de Soraya */
aluno.nome[4] = i'; /* troca a letra y pela letra i em Soraya*/
5

DATA data_nasc;
DATA *d; /* d um ponteiro para uma varivel do tipo DATA */

Atribuio de Estruturas - Utilizao


 Variveis com mesma estrutura podem ser igualadas.
Considere como exemplo:
struct coordenadas {
int x, y, z;
} variavel1, variavel2 = {1, 2, 3}; /* varivel2 inicializada*/
 Como variavel1 e variavel2 tm a mesma estrutura pode-se
atribuir os valores dos campos da varivel2 para a varivel1,
como segue:
variavel1= variavel2;
 Atribuio anterior possui o mesmo efeito que:
variavel1.x = variavel2.x;
variavel1.y = variavel2.y;
variavel1.z = variavel2.z;
6

Exemplo
#include <stdio.h>
int main () {
struct coordenadas {
int x, y, z;
} variavel1;

Vetores de Estruturas
Comando de definio
de uma estrutura deve
aparecer antes da
declarao de
variveis

struct coordenadas variavel2 = {1, 2, 0};


variavel1 = variavel2; /* Comando de atribuio */

 Exemplo:
struct cadastro {
int ra;
char nome[50];
int num_curso, ano_ingresso;
float CR;
} aluno, alunos[500];
aluno  valor para um aluno. Essa varivel pode ser usada para
guardar o valor de um dos registros
alunos valores para vrios alunos
ra

printf ("x= %d y= %d z= %d \n", variavel1.x, variavel1.y, variavel1.z);

nome

65432

num curso

Ma r a

42

........

ano ingresso
2006

CR
0.75

0
1

return(0);

ndices
alunos

0 1 2 3  ndices do nome

Vetores de Estruturas

Exemplo
Dadas informaes sobre CDs de msica, tais como: nome do cantor(a) ou
grupo; ttulo do CD; gnero musical; ano de lanamento e dada uma letra
listar todas as informaes sobre o cantor cujo nome comea com a letra.

struct cadastro {
int ra;
char nome[50];
int num_curso, ano_ingresso;
float CR;
} aluno, alunos[500];

struct cadastro {
char cantor[30];
char titulo[20];
char genero[15];
int ano;
} CD[400];

 O acesso a um campo da estrutura exige o ndice.


nome_varivel[indice]nome_campo;
Exemplos:
1) aluno.ra=65432;

Cantor

2) alunos[0]ra =73210;

3) strcpy(alunos[0]nome,Mara); /* usar #include<string.h> */


4) alunos[0]CR = 0.6;
5) for (i=0;i<10;i++) scanf(%s, alunos[i]nome)
6) for (i=0;i<10;i++) printf(%s %s %d %d %f, alunos[i] ra, alunos[i]nome,
alunos[i]num_curso, alunos[i]ano_ingresso, alunos[i]CR); 9

M a

n o

titulo
e

gnero

ano
0

........

1
2

ndices
do CD

3
0 1

2 3

4  ndices do cantor

0 1 2 3  ndices do ttulo

O valor armazenado em CD[0].cantor[1] a

10

Exemplo (cont)

Exemplo
Dadas informaes sobre CDs de msica, tais como: nome do cantor(a) ou
grupo; ttulo do CD; gnero musical; ano de lanamento e dada uma letra
listar todas as informaes sobre o cantor cujo nome comea com a letra.
#include <stdio.h>
#include <string.h>
#include<conio.h>
struct cadastro {
ndice do struct
char cantor[30];
CD
ndice do array
char titulo[20];
cantor
char genero[15];
int ano;
};
void Mostrar_informacoes(struct cadastro CD[], int N, char letra[]){
int j;
for (j=0; j<N; j++){
if (CD[j].cantor[0]== letra[0])
printf("%s %s %s %d \n", CD[j].cantor, CD[j].titulo, CD[j].genero, CD[j].ano);
}
}

11

int main() {
struct cadastro CD[100];
int i, N,opcao=1;
char letra[2];
printf("forneca a quantidade de CDs: "); scanf("%d", &N);
for(i=0; i<N ; i++) {
scanf("%s %s %s %d", CD[i].cantor, CD[i].titulo, CD[i].genero, &CD[i].ano);
}
printf("forneca uma letra:");
scanf("%s", letra);
Mostrar_informacoes(CD, N, letra);
printf("Fim de programa");
return 0;
}
12

Estruturas em estruturas -Exemplo

Estruturas em estruturas
 Para criar estruturas dentro de estruturas;
 Estrutura interna precisa ser declarada antes:
struct dados_pessoais {
char nome [50];
char sexo;
int idade;
};
struct cadastro {
int ra ;
struct dados_pessoais pessoa;
float CR;
};
declarao da varivel
struct cadastro aluno;
acesso um campo da estrutura
aluno.ra=52410;
aluno.pessoa.sexo=F;

RA

nome

07234 Monica Santos

CR

sexo

0.73

endereo
rua
no. cidade
R. Dois 321 Rio Claro

struct Reg_endereo {
char rua[50];
int no;
char cidade;
};
struct cadastro_aluno {
int ra;
char nome[50];
float CR;
char sexo;
struct Reg_endereo endereo;
} aluno;
Exemplo de utilizao:
scanf(%d %f %s, &aluno.ra, &aluno.CR, aluno.endereco.cidade);
13

14