Aula 12 – Estruturas (Structs) 🏗️
Até agora, aprendemos a agrupar dados do mesmo tipo em Vetores. Mas e se quisermos agrupar dados de tipos diferentes relacionados ao mesmo objeto? Por exemplo, um Aluno tem Nome (string), Idade (int) e Nota (float). Para isso, usamos as Structs (Estruturas).
🏛️ 1. O que é uma Struct?
Uma Struct é um tipo de dado personalizado que funciona como uma "ficha" ou "formulário". Ela agrupa várias variáveis (chamadas de membros) sob um único nome.
Definição e Uso:
#include <stdio.h>
#include <string.h>
// Definindo a estrutura
struct Aluno {
char nome[50];
int idade;
float nota;
};
int main() {
struct Aluno a1; // Criando uma variável do tipo Aluno
// Acessando membros com o ponto (.)
strcpy(a1.nome, "Ricardo");
a1.idade = 20;
a1.nota = 9.5;
printf("Aluno: %s | Idade: %d | Nota: %.1f\n", a1.nome, a1.idade, a1.nota);
return 0;
}
📑 2. O comando typedef
Para não ter que escrever struct Aluno toda vez, podemos dar um "apelido" ao tipo usando typedef.
typedef struct {
char marca[20];
float preco;
} Carro;
int main() {
Carro c1 = {"Fiat", 45000.00};
printf("Carro: %s\n", c1.marca);
}
📚 3. Vetores de Structs
Podemos criar um array onde cada posição é uma ficha completa. Isso é a base para pequenos bancos de dados em memória.
Carro estoque[10]; // Um vetor capaz de guardar 10 fichas de carros!
for (int i = 0; i < 2; i++) {
printf("Marca do carro %d: ", i + 1);
scanf("%s", estoque[i].marca);
}
🏹 4. Ponteiros para Structs e o Operador ->
Quando usamos ponteiros para manipular estruturas, usamos o operador de seta (->) para acessar os membros.
struct Aluno a1 = {"Joao", 18, 7.0};
struct Aluno *p = &a1;
printf("Nome: %s", p->nome); // O mesmo que (*p).nome
🚀 Mini-Projeto da Aula: "Cadastro de Produtos"
Objetivo: Criar um sistema que cadastre 3 produtos (Nome, Preço e Quantidade) usando um vetor de structs, e ao final exiba o valor total do inventário (Preço * Quantidade de todos os itens).
📝 Exercícios de Fixação
- Defina uma struct
Pontocom coordenadasxey(float). Peça ao usuário os dados de dois pontos e calcule a distância entre eles. - Crie uma struct
Livrocom título, autor e número de páginas. Peça ao usuário para cadastrar um livro e exiba os dados formatados. - Desafio: Crie um vetor de 5 structs
Funcionario(Nome, Salário). Encontre e imprima o nome do funcionário que tem o maior salário.