Registros em C - Estruturas
8 pág.

Registros em C - Estruturas


DisciplinaAlgoritmos e Programação de Computadores563 materiais5.560 seguidores
Pré-visualização2 páginas
1 
LINGUAGEM E TÉCNICA DE PROGRAMAÇÃO I 
 
Profa. Gisele Busichia Baioco 
gisele@ft.unicamp.br 
 
 
Algoritmos Estruturados e 
Linguagem de Programação Estruturada 
 
Registros em C - Estruturas 
1 Variáveis Compostas Heterogêneas \u2013 Registros em C 
As Variáveis Compostas Heterogêneas ou Registros são estruturas de dados 
presentes na maioria das linguagens de programação que possibilitam agrupar variáveis de 
tipos de dados distintos. 
Para exemplificar, imagine uma passagem de ônibus que é formada por um conjunto 
de informações, tais como número de passagem (inteiro), origem e destino (caractere), data 
(caractere), horário (caractere), poltrona (inteiro), distância (real), que são componentes do 
registro, também chamados de campos. Logo, um registro é composto por campos que 
especificam cada uma das informações. 
 
 
 
 
 
 
 
 
 
Em C, os registros são conhecidos como Estruturas e os campos são chamados de 
membros. 
A referência ao conteúdo de um dado membro da estrutura será indicada pela seguinte 
notação: 
 
 identificador-da-estrutura.identificador-do-membro 
 
Sintaxe de declaração em C: 
 
1) Definição da estrutura e declaração de variáveis do tipo estrutura feitas simultaneamente: 
 
struct nome-da-estrutura { /* definição da estrutura */ 
 tipo-de-dado membro1; 
 tipo-de-dado membro2; 
 ... 
 tipo-de-dado membroN; 
} lista-de-identificadores; /* declaração de variáveis */ 
 
Número: 00001 
De:_________________________ Para: _______________________ 
Data:_____/_____/______ Horário: ________:________ 
Poltrona: ____________ Distância: ____________________ Km 
 2 
onde: 
nome-da-estrutura: define o nome da estrutura e, neste caso, é opcional; 
tipo-de-dado: é o tipo de dado de cada membro da estrutura; 
membro1, membro2,..., membroN: são os nomes (identificadores) de cada componente 
(membro) da estrutura; 
lista-de-identificadores: são os nomes (identificadores) associados a estrutura declarada, a 
partir dos quais a estrutura será referenciada. Cada identificador da lista deve ser separado por 
vírgula. 
 
Exemplo: Definição de uma estrutura de nome cliente e declaração de uma variável cadastro 
do tipo cliente, que possui a seguinte forma: 
 
 
 
 
 
 
 
 
 struct cliente { 
 char nome[41]; 
 int rua, número; 
 unsigned long int cep; 
 char sexo; 
 unsigned long int fone[3]; 
 char cpf[15]; 
 char nascimento[11]; 
 short int temdep; 
 } cadastro; 
 
 ou então, omitindo o nome da estrutura: 
 
 struct { 
 char nome[41]; 
 int rua, número; 
 unsigned long int cep; 
 char sexo; 
 unsigned long int fone[3]; 
 char cpf[15]; 
 char nascimento[11]; 
 short int temdep; 
 } cadastro; 
 
2) Definição da estrutura e declaração de variáveis do tipo estrutura feitas separadamente: 
 
struct nome-da-estrutura { /* definição da estrutura */ 
 tipo-de-dado membro1; 
 tipo-de-dado membro2; 
 ... 
 tipo-de-dado membroN; 
}; 
 
/* declaração de variáveis */ 
struct nome-da-estrutura lista-de-identificadores; 
 
NOME 
RUA NÚMERO CEP 
CPF 
SEXO FONE1 FONE2 FONE3 
NASCIMENTO 
TEMDEP 
 
 3 
onde: 
nome-da-estrutura: define o nome da estrutura e, neste caso, é obrigatório; 
tipo-de-dado: é o tipo de dado de cada membro da estrutura; 
membro1, membro2,..., membroN: são os nomes (identificadores) de cada componente 
(membro) da estrutura; 
lista-de-identificadores: são os nomes (identificadores) associados a estrutura declarada, a 
partir dos quais a estrutura será referenciada. Cada identificador da lista deve ser separado por 
vírgula. 
 
Exemplo: Definição de uma estrutura de nome cliente e declaração de uma variável cadastro 
do tipo cliente, que possui a seguinte forma: 
 
 
 
 
 
 
 
 
 struct cliente { 
 char nome[41]; 
 int rua, número; 
 unsigned long int cep; 
 char sexo; 
 unsigned long int fone[3]; 
 char cpf[15]; 
 char nascimento[11]; 
 short int temdep; 
 }; 
 
 /* declaração da variável cadastro do tipo struct cliente */ 
 struct cliente cadastro; 
 
 Em uma definição de estrutura, os membros podem ser outras estruturas, ou mesmo 
vetores e matrizes. 
Exemplo: Outra possibilidade de definição da estrutura cliente é a seguinte: 
 
 struct cliente { 
 char nome[41]; 
 struct ender { 
 int rua, número; 
 unsigned long int cep; 
 } endereco; 
 char sexo; 
 unsigned long int fone[3]; 
 char cpf[15]; 
 char nascimento[11]; 
 short int temdep; 
 } cadastro; 
 
 
NOME 
RUA NÚMERO CEP 
CPF 
SEXO FONE1 FONE2 FONE3 
NASCIMENTO 
TEMDEP 
 
 4 
ou então: 
 
 struct ender { 
 int rua, número; 
 unsigned long int cep; 
 }; 
 
 struct cliente { 
 char nome[41]; 
 struct ender endereco; 
 char sexo; 
 unsigned long int fone[3]; 
 char cpf[15]; 
 char nascimento[11]; 
 short int temdep; 
 }; 
 
 struct cliente cadastro; 
 
 Para referenciar (acessar) o membro cpf da estrutura declarada anteriormente, deve-se 
colocar o identificador da variável estrutura, seguido por um ponto e o nome do membro: 
 
 cadastro.cpf 
 
Para referenciar (acessar) o membro cep da estrutura declarada anteriormente, deve-se 
colocar o identificador da variável estrutura mais externo, seguido pelo endereco e finalmente 
com o cep: 
 
 cadastro.endereco.cep 
 
 Essas referências podem ser utilizadas em comandos de entrada e saída, atribuição, 
enfim, onde seja necessário acessar o conteúdo de um campo individual de uma estrutura. 
Exemplos: 
 gets(cadastro.cpf); 
 cadastro.fone[1] = 35341234; 
 if (cadastro.temdep != 0) 
 ... 
 cadastro.endereco.cep = 13500111; 
 printf(\u201c%d\u201d, cadastro.endereco.rua); 
 ... 
2 Vetores e Matrizes de Estruturas 
Supondo que fosse necessário manter registros de informações relativas a passagens 
rodoviárias de todos os lugares de um ônibus. Para solucionar esse problema pode-se utilizar 
um vetor, onde cada posição do vetor corresponde a um registro referente a informações de 
uma passagem. Assim, supondo que um ônibus tenha 44 lugares, cria-se um vetor no qual 
cada posição é um elemento do tipo registro passagem, tal como mostrado a seguir: 
 5 
 
 
 
0 
 
 
1 
 
 
2 
 
\u2026 \u2026 
 
43 
 
 struct { 
 int numero; 
 char origem[31], destino[31]; 
 char data[11], horário[6]; 
 int poltrona; 
 float distancia; 
 } vetpassagem[44]; 
 
 As referências ao conteúdo de um membro do vetor de estruturas devem considerar o 
índice onde se encontra o registro desejado. Por exemplo, no caso do vetpassagem, se fosse 
necessário referenciar a data da passagem que está na posição (índice) 10 faz-se: 
 
 vetpassagem[10].data 
 
 Essa solução pode ser estendida para matrizes de estruturas. Por exemplo, suponha a 
necessidade de manter registros de 44 passagens de ônibus para 10 ônibus distintos. Para 
solucionar esse problema basta criar uma matriz com 10 linhas e 44 colunas, onde cada linha 
corresponde a um ônibus e as colunas correspondem às informações sobre as passagens de 
cada ônibus. A declaração fica: 
 
 struct { 
 int numero; 
 char origem[31], destino[31]; 
 char data[11], horário[6]; 
 int poltrona; 
 float distancia; 
 } matpassagem[10][44]; 
 
 Caso fosse necessário referenciar a data da passagem que está na posição 10 do ônibus 
da posição 5 faz-se: 
 
 matpassagem[5][10].data 
3 Exemplo de Programa 
Fazer um programa C que realiza o cadastro de contas bancárias com as seguintes 
informações: número da conta, nome do cliente e saldo. O banco permitirá o cadastramento 
Número: 00001
De:_________________________ Para: _______________________
Data:_____/_____/______