Buscar

aula2 (1)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Linguagem de Programação II
STRUCT
Objetivos de aprendizagem
Ao término desta aula, vocês serão capazes de:
•	 entender o conceito de estruturas de dados heterogêneos, que se diferem completamente de todos os tipos vistos 
na disciplina anterior;
•	 criar estruturas de dados capazes de armazenar vários tipos de dados diferentes;
•	 conhecer as várias estruturas (variáveis comuns, ponteiros e vetores) que são capazes de manipular structs;
•	 identificar a melhor maneira de manipular essas estruturas de dados.
Nesta aula, vamos aprender a criar estruturas de dados 
heterogêneas: struct. Mas, o que é uma struct? Lembra-se de 
que os vetores armazenavam vários valores de um mesmo tipo? 
Agora, veremos como armazenar vários valores de vários tipos 
com apenas uma variável.
Segundo Schildt (1996), uma struct é:
Em C, uma estrutura é uma coleção de variáveis referenciadas 
por um nome, fornecendo uma maneira conveniente de se ter 
informações relacionadas agrupadas. Uma definição de estrutura 
forma um modelo que pode ser usado para criar variáveis 
de estruturas. As variáveis que compreendem a estrutura são 
chamadas membros da estrutura. (Os membros da estrutura são 
comumente chamados elementos ou campos) (SCHILDT, 1996, 
p. 167).
Bons estudos!
2º Aula
11
1 – Definir uma struct
2 – Variável da struct
3 – Vetor de struct
4 – Ponteiro para struct
1 -Definir uma struct
Algumas vezes, vamos nos deparar com situações em que 
várias variáveis estão relacionadas entre si como, por exemplo, 
os dados de um aluno: seu RGM, seu Nome, seu Curso, sua 
Idade, seu Semestre e assim por diante. A melhor maneira 
de agrupar esses dados, para evitar que sejam utilizados de 
maneira errada, é criando uma estrutura com todos eles.
Se fossemos criar as variáveis da maneira que vimos até 
agora, ficaria mais ou menos assim: 
char RGM[11]; 
char nome[51]; 
char curso[41]; 
int idade; 
int semestre;
Toda struct tem um nome que é definido na sua 
declaração, para que seja possível acessar os seus dados. Este 
nome será utilizado para se referir a struct, sempre que for 
manipular os seus dados.
FIGURA 2.1: CRIANDO A STRUCT ALUNO. FONTE: 
CRIAÇÃO NOSSA
REGRA
• Sempre depois da chave que fecha a struct, coloque 
ponto-e-vírgula.
struct nome
{
tipo nome_variavel;
tipo outra_variavel;
};
Como vimos anteriormente, o protótipo para definição 
de uma estrutura inicia com a palavra chave struct, a seguir o 
nome da estrutura e o bloco com a definição dos atributos 
que fazem parte da estrutura.
Seções de estudo
SEMPRE DÊ UM NOME À SUA STRUCT QUE 
SEJA COMPATÍVEL COM A SUA FINALIDADE
Assim como as variáveis globais, podemos criar structs 
que podem ser acessadas de qualquer parte do programa. 
Para isso, basta criar a struct foram (antes) da main, veja um 
exemplo:
FIGURA 2.1: CRIANDO A STRUCT ENDERECO 
FORA DA MAIN. 
Fonte: criação nossa
Depois de definida uma estrutura, o seu nome passa a ser 
um tipo de dado, ou seja, a estrutura pode ser usada da mesma 
forma que qualquer outro tipo de C/C++. Veja na próxima 
seção, como criar e usar uma struct de C/C++.
2 - Variável da struct
Depois de definida a struct podemos acessar seus dados 
criando uma variável do tipo dela. Este processo é simples, e 
existem duas maneiras de o fazer. Vamos ver alguns exemplos 
a seguir.
Sintaxe:
struct variavel;
Onde:
struct -> diz respeito à struct que foi criada
variavel -> é o nome da variável que está sendo criada 
para acessar os dados da struct
FIGURA 2.2: DECLARANDO UMA VARIÁVEL DA 
STRUCT. 
 Fonte: criação nossa
Nesse exemplo que acabamos de ver, criamos a variável 
end_1 do tipo da struct endereco. Observe que a criação da 
variável da struct é idêntica à criação de variáveis de tipos 
nativos da linguagem (exemplo: int, float, char).
A sintaxe para acessar os dados da struct é bem simples. 
12Linguagem de Programação II
Usamos o nome da variável da struct (exemplo: end_1), depois 
colocamos ponto (.) e a seguir o dado que queremos acessar.
Sintaxe:
variavel.dado
Onde:
variavel -> é o nome da variável que foi criada do tipo 
da struct.
o ponto (.) -> é utilizado para separar a variável do dado, 
e neste caso, seu uso é obrigatório (exceto quando usamos 
ponteiros, mas veremos mais detalhadamente mais a frente). 
dado -> é o dado que estamos querendo acessar 
(exemplo: rua, número, complemento)
Os dados serão lidos de acordo com seu tipo, portanto 
para ler um tipo int, faça:
scanf(“%d”, &variavel.dado);
Veja um programa completo a seguir:
FIGURA 2.3: ACESSANDO OS DADOS DA STRUCT.
Fonte: criação nossa
Explicando o programa:
•	 Linha 14: declarando a variável end_1 do tipo da 
struct “endereco”
•	 Linha 16: lendo um valor para o dado “rua”. Como 
este dado foi definido do tipo char de tamanho 40, 
precisamos utilizar a função fgets para ler valores 
para ele.
•	 Linha 18: lendo um valor para o dado “numero”. 
Note que ele é do tipo int, então, usamos a função 
scanf para ler o seu valor.
•	 Linha 20: lendo um valor para o complemento, que 
também é do tipo char e por isso usamos fgets.
•	 Linha 22: lendo um valor para a cidade, do tipo 
char, com a função fgets.
•	 Linha 24: lendo um valor para o estado, do tipo 
char, com a função fgets.
•	 Linha 26: lendo um valor para o CEP, do tipo char, 
com a função fgets.
Podemos realizar qualquer tipo de operação com os 
dados da struct, assim como com um dado comum, podemos 
realizar operações aritméticas, atribuições, enfim, o que for 
necessário.
Exemplo: criar um programa que tenha uma estrutura 
de um produto. Com os seguintes dados: código, nome, 
preco, lucro (em porcentagem) e precofinal. O preço final do 
produto deve ser calculado a partir do preço com o lucro. Veja 
o programa a seguir.
FIGURA 2.4: ACESSANDO OS DADOS DA 
STRUCT. 
Fonte: criação nossa
Na linha 23, estamos realizando o cálculo do preço 
final do produto, mas observe que sempre antes de se referir 
ao dado, é preciso informar a variável da struct ao qual ele 
pertence.
Temos também mais uma função nova neste programa, 
a função fflush. Essa função vai limpar o buffer do teclado, 
muitas vezes, quando vamos ler um valor para uma string o 
programa “passa direto” pela instrução de leitura.
Utilizando essa instrução antes do fgets evitamos que 
isso aconteça.
3 - Vetor de struct
Quando criamos uma struct, geralmente é porque surge 
a necessidade de se ler vários valores de um mesmo tipo: 
vários alunos, vários produtos, vários clientes e assim por 
diante. Podemos criar várias variáveis do tipo da struct, da 
mesma maneira que podemos criar várias variáveis do tipo 
int, por exemplo. Mas para facilitar, a criação e manipulação 
dessas variáveis, temos uma opção bem mais simples: criar 
um vetor da struct. Através do vetor, podemos criar e acessar 
várias structs de um mesmo tipo.
13
ntaxe:
Onde:
struct vetor_struct[tamanho];
struct -> diz respeito à struct que foi criada
vetor_struct -> é o nome do vetor. Definido para 
manipular o vetor da struct que foi criado.
Vamos ver um exemplo?
Exemplo: criar um programa para ler os dados de cinco 
produtos. Os dados são os seguintes: código, nome, preço, 
lucro e preço final.
FIGURA 2.5: ACESSANDO OS DADOS DE UM 
VETOR STRUCT. 
Fonte: criação nossa
A ideia principal do programa mostrado anteriormente, 
é a mesma do programa representado pela figura 2.4. Criamos 
um vetor da struct e acrescentamos um for para poder 
percorrer todos os elementos da struct. Os dados dos cinco 
produtos foram lidos dentro desse for e o cálculo do preço 
final também, isso porque é preciso calcular os preços finais 
de cada um dos produtos informados.
Como qualquer outro tipo de vetor em C, usando struct 
precisamos também indicar o índice (exemplo: a variável “i”) 
que fica dentro dos colchetes. Lembrando que com vetores, 
os elementos precisam ser manipulados individualmente.
4 - Ponteiros para struct
Pode-se criar um ponteiro para uma estrutura, assim 
como um ponteiro para os tipos de dados existentes na 
linguagemC.
Sintaxe:
nome_estrutura * nome_ponteiro;
Onde:
nome_estrutura -> diz respeito à struct que foi criada
nome_ponteiro -> é o nome da variável tipo ponteiro.
Vamos ver um exemplo de como criar um ponteiro para 
uma estrutura. Veja na figura abaixo um programa que cria 
uma struct, depois cria uma variável desta struct e em seguida, 
cria um ponteiro para uma struct. Ao final, o ponteiro (p) 
recebe o endereço de memória da variável do tipo da struct.
FIGURA 2.6: CRIANDO UM PONTEIRO PARA UMA 
VARIÁVEL DO TIPO STRUCT.
Fonte: criação nossa
Vamos relembrar um pouco do que vimos na aula 2?
Retomando a aula
1 - Definir uma struct
Aprendemos que quando temos várias variáveis que 
possuem uma certa relação entre elas, a melhor maneira de 
manipulá-las é criando uma struct, assim os dados ficam 
agrupados e é bem menos provável que erros sejam cometidos.
2 - Variável da struct
Depois de definida a struct, é preciso manipular os seus 
dados. Vimos que criamos uma variável, como outra qualquer 
em C, e depois usamos o nome desta variável, ponto e o nome 
do dado. Assim, acessamos o conteúdo dos dados.
3 - Vetor de struct
Podemos também criar vetores para struct. Quando 
vamos precisar trabalhar com mais de uma variável do tipo da 
struct que foi criada. A melhor maneira de fazê-lo é criando 
um vetor para a struct.
4 - Ponteiro para struct
Assim como nos tipos nativos da linguagem C (int, float, 
char, double), podemos também criar ponteiros para structs 
14Linguagem de Programação II
quando houver a necessidade para tal.
Leia o capítulo 9 do livro Treinamento em Linguagem C – 
Módulo 2
Vale a pena ler
Vale a pena
 http://www.ime.usp.br/~pf/algoritmos/aulas/stru.
html
Vale a pena acessar
Autoavaliação
Veja se aprendeu a Aula 02 respondendo o questionário autoavaliativo. 
Depois confira o resultado das respostas, disponível na ferramenta 
Arquivos da plataforma.
1. Structs são meios de agrupar dados que tenham uma 
relação entre eles. ( ) Verdadeiro ( ) Falso
2. O C++, além de oferecer todos os recursos do C, 
oferece recursos para programar, utilizando orientação a 
objetos.
( ) Verdadeiro ( ) Falso
3. Uma struct deve ser criada sempre dentro da main. 
( ) Verdadeiro ( ) Falso
4. Para acessar os dados de uma struct temos que criar 
uma variável do tipo dela, e indicar essa variável seguida de 
ponto, antes do nome do dado.
( ) Verdadeiro ( ) Falso
5. Vetores de struct podem ser criados quando precisamos 
manipular mais de uma variável do tipo da struct.
( ) Verdadeiro ( ) Falso
6. Podemos ter várias variáveis do tipo da struct no 
mesmo programa. 
( ) Verdadeiro ( ) Falso
7. Podemos obter o endereço de memória de uma 
variável do tipo struct, criando um ponteiro de struct.
( ) Verdadeiro ( ) Falso
Minhas anotações

Outros materiais