Pular para conteúdo

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

  1. Defina uma struct Ponto com coordenadas x e y (float). Peça ao usuário os dados de dois pontos e calcule a distância entre eles.
  2. Crie uma struct Livro com título, autor e número de páginas. Peça ao usuário para cadastrar um livro e exiba os dados formatados.
  3. 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.

Próxima Aula: Arquivos (I/O)