Estrutura (struct)- declaração Estrutura (struct - IC

Propaganda
Estrutura (struct)
Estrutura (struct)- declaração
Uma struct é uma variável composta heterogênea
Visa facilitar manipulação de um conjunto de dados
logicamente relacionados, mas de diferentes tipos.
Exemplo: Considere um registro de alunos, com RA, nome,
CR, sexo, e endereço (composto por rua, número, cidade).
RA
nome
07234 Monica Santos
RA
nome
07234 Monica Santos
CR
sexo
endereço
0,73
F
R. Dois, 321. Rio Claro
CR
sexo
0.73
F
Passo1: definir a estrutura
Forma geral: struct <nome_estrutura> {
<tipo_de_dados> <nome da variável>;
<tipo_de_dados> <nome da variável>;
<tipo_de_dados> <nome da variável>;
...
}
RA
nome
Exemplo
struct cadastro {
07234 Monica Santos
int ra;
char nome[50];
float CR;
char sexo;
char endereço[20];
};
endereço
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;
endereço
R. Dois, 321. Rio Claro
2
Estrutura (struct)- declaração
Mais uma forma de declaração 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 variáveis
int X, Y, Z;
3
Estrutura (struct) - Utilização
Cada campo pode ser acessado escrevendo-se:
nome da variável, um ponto (.) e o nome do campo.
Sintaxe:
nome_variável • nome_campo;
Considerando a definição:
struct cadastro {
char ra[6];
char nome[50];
float CR;
char sexo;
} aluno;
F
Passo2: declarar as variáveis que terão esta estrutura
Forma geral: struct <nome_estrutura> <nome_variável>;
Exemplo:
struct cadastro aluno, ex_aluno;
Estrutura (struct) - declaração
• Outra possibilidade de declarar a estrutura e as variáveis
em apenas um passo:
Forma geral: struct <nome_estrutura> {
<tipo_de_dados> <nome da variável>;
<tipo_de_dados> <nome da variável>;
<tipo_de_dados> <nome da variável>;
...
} nome_variável 1, nome variável 2, . . . Nome variável n;
CR sexo
0,73
Exemplos.:
aluno••CR = 0.75;
aluno••sexo = ‘F’;
aluno••ra = 71234;
/* Para atribuição de string usar a função
strcpy da biblioteca string.h */
strcpy(aluno••nome, “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 variável do tipo DATA */
4
Atribuição de Estruturas - Utilização
Variáveis com mesma estrutura podem ser igualadas.
Considere como exemplo:
struct coordenadas {
int x, y, z;
} variavel1, variavel2 = {1, 2, 3}; /* variável2 é inicializada*/
Como variavel1 e variavel2 têm a mesma estrutura pode-se
atribuir os valores dos campos da variável2 para a variável1,
como segue:
variavel1= variavel2;
Atribuição 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 definição
de uma estrutura deve
aparecer antes da
declaração de
variáveis
struct coordenadas variavel2 = {1, 2, 0};
variavel1 = variavel2; /* Comando de atribuição */
Exemplo:
struct cadastro {
int ra;
char nome[50];
int num_curso, ano_ingresso;
float CR;
} aluno, alunos[500];
aluno valor para um aluno. Essa variável pode ser usada para
guardar o valor de um dos registros
alunos valores para vários 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);
2
}
3
Índices
alunos
0 1 2 3 índices do nome
7
8
Vetores de Estruturas
Exemplo
Dadas informações sobre CDs de música, tais como: nome do cantor(a) ou
grupo; título do CD; gênero musical; ano de lançamento e dada uma letra
listar todas as informações sobre o cantor cujo nome começa 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_variável[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
l
gênero
ano
0
........
1
2
Índices
do CD
3
0 1
2 3
4 índices do cantor
0 1 2 3 índices do título
O valor armazenado em CD[0].cantor[1] é ‘a’
10
Exemplo (cont)
Exemplo
Dadas informações sobre CDs de música, tais como: nome do cantor(a) ou
grupo; título do CD; gênero musical; ano de lançamento e dada uma letra
listar todas as informações sobre o cantor cujo nome começa 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;
};
•declaração da variável
struct cadastro aluno;
•acesso um campo da estrutura
aluno.ra=52410;
aluno.pessoa.sexo=‘F’;
RA
nome
07234 Monica Santos
CR
sexo
0.73
F
endereço
rua
no. cidade
R. Dois 321 Rio Claro
struct Reg_endereço {
char rua[50];
int no;
char cidade;
};
struct cadastro_aluno {
int ra;
char nome[50];
float CR;
char sexo;
struct Reg_endereço endereço;
} aluno;
Exemplo de utilização:
scanf(“%d %f %s”, &aluno.ra, &aluno.CR, aluno.endereco.cidade);
13
14
Download