Structs são “tipos definidos pelo programador”. Quando definimos uma variável na linguagem C, é necessário identificar seu tipo, como por exemplo:
int nota = 100;
Porém, você já parou em pensou em criar uma variável do tipo Aluno? Isso parece confuso, mas pare e pense: Quais são as características de um aluno? Poderiam ser: Nome, Registro Acadêmico (RA), Notas dos bimestres.
Tendo em mente essa linha de raciocínio, poderíamos criar um programa no qual as variáveis fossem declaradas normalmente. Porém a linguagem C (e muitas das linguagens modernas) permite que nós criemos “grupo/agrupamento de variáveis”.
Assim uma struct (estrutura em inglês) agrupa várias variáveis em uma só.
Sua forma geral, em C, seria:
struct NomeDoTipo
{
tipoA variavel1;
tipoB variavel2;
…
tipoN variavelN;
};
Vejamos o caso do Aluno como ficaria:
struct Aluno
{
char nome[50];
char RA[10];
int nota1;
int nota2;
int nota3;
int nota4;
};
Após definirmos o tipo com a struct, podemos usá-lo para declarar variáveis… Normalmente:
Aluno aluno1;
Aluno aluno2;
int resultado;
Para manipular esta variável com um tipo definido pelo programador, temos que acessar as variáveis internas com um ponto (.). Simples assim:
#include <stdio.h>
#include <string.h>struct Aluno
{
char nome[50];
char RA[10];
float nota1;
float nota2;
float nota3;
float nota4;
};void main()
{
Aluno aluno1;
strcpy(aluno1.nome, "Esfigoberto");
strcpy(aluno1.RA, "123456789");
aluno1.nota1 = 10;
aluno1.nota2 = 9;
aluno1.nota3 = 9;
aluno1.nota4 = 10;printf("%s", aluno1.nome);
printf("\n%s", aluno1.RA);
printf("\n%f", aluno1.nota1);
printf("\n%f", aluno1.nota2);
printf("\n%f", aluno1.nota3);
printf("\n%f", aluno1.nota4);getchar();
}
Olha como funciona normalmente:
Vale lembrar que podemos usar struct dentro de struct! Parece complicado, mas não é. Pelo contrário, é uma mão na roda. Vamos melhorar este exemplo do Aluno, as notas farão parte de uma struct Notas, veja:
#include <conio.h>
#include <stdio.h>
#include <string.h>struct Notas
{
float nota1;
float nota2;
float nota3;
float nota4;
};struct Aluno
{
char nome[50];
char RA[10];
Notas notas;
};void main()
{
Aluno aluno1;
strcpy(aluno1.nome, "Esfigoberto");
strcpy(aluno1.RA, "123456789");
aluno1.notas.nota1 = 10;
aluno1.notas.nota2 = 9;
aluno1.notas.nota3 = 9;
aluno1.notas.nota4 = 10;printf("%s", aluno1.nome);
printf("\n%s", aluno1.RA);
printf("\n%f", aluno1.notas.nota1);
printf("\n%f", aluno1.notas.nota2);
printf("\n%f", aluno1.notas.nota3);
printf("\n%f", aluno1.notas.nota4);getchar();
}
E continua executando redondinho:
… E agora com um código mais organizado. Alias é este um dos princípios: Organização, Modularização e Reuso.
Agora ficam alguns exercícios para serem resolvidos:
1) Dada a estrutura de um carro abaixo:
Faça um programa em C, usando struct, que leia um vetor com 100 registros e apresente os seguintes relatórios:
a) Código, marca e modelo de todos os veículos amarelos;
b) Código, marca, modelo, cor e ano de todos os veículos ordenados pelo ano de fabricação;
c) Marca e modelo de todos os carros agrupados (ordenados) por tipo de combustível;
d) Marca e modelo do carro azul mais velho;
2) Faça um programa em C que cadastre um conjunto de 30 posições contendo em cada uma o seguinte registro de funcionário: Código, Nome, Endereço, Salário, Data de Nascimento; Veja a figura abaixo a organização da struct:
Restrições:
• O código deverá ser gerado automaticamente pelo programa (auto-numeração) não podendo haver duplicidade;
• O campo Endereço é dividido entre Rua, Número, Bairro e CEP.
• O campo Data de Nascimento dividido entre Dia, Mês e Ano.
Apresente os seguintes relatórios:
• Relatório Geral de Funcionários em ordem Alfabética:
• Relatório Geral de Funcionários agrupado por ano de Nascimento:
Espero que aproveitem :)
1 comentários:
Muito bom!
Postar um comentário