Vetores, também conhecidos como arrays unidimensionais, são uma das estruturas de dados mais fundamentais na programação. Eles nos permitem armazenar múltiplos valores em uma única variável, de forma organizada e eficiente.

🤔 O que são Vetores?

Um vetor é uma coleção de dados que possui quatro características principais:

  • Indexada: Cada elemento no vetor possui uma posição única, chamada de índice, que é usada para acessá-lo. Os índices são sempre números inteiros, começando em zero.
  • Unidimensional: É uma estrutura de dados linear, como uma lista ou uma fila, possuindo apenas uma dimensão (comprimento).
  • Homogênea: Todos os elementos armazenados em um vetor devem ser, obrigatoriamente, do mesmo tipo de dado (todos int, todos double, todos char, etc.).
  • Tamanho Fixo: Uma vez que um vetor é criado na memória, seu tamanho (a quantidade de elementos que ele pode conter) é fixo e não pode ser alterado.

🛠️ Trabalhando com Vetores em C

Vamos ver como declarar e manipular vetores na linguagem C.

Declaração

Em C, um vetor é declarado diretamente com seu tipo e tamanho entre colchetes — não existe new, o espaço na memória já é reservado na própria declaração.

// Sintaxe: tipo nomeDoVetor[tamanho];

// Exemplo: Criando um vetor de 10 posições para números de ponto flutuante.
// Isso corresponde a "vet: vetor [0..9] de real" do pseudocódigo.
double numeros[10];

// Exemplo: Criando um vetor de 5 posições para armazenar caracteres (não nomes completos).
char letras[5];

💡 E um vetor de “nomes” (texto)? Em C, uma String não existe como tipo pronto — um texto já É um vetor de char (visto no tópico de Estrutura Sequencial). Um “vetor de nomes” vira então um vetor BIDIMENSIONAL de char (char nomes[5][50]; — 5 nomes, até 50 caracteres cada), que só faz sentido depois de estudar Matrizes. Por isso os exemplos deste tópico focam em vetores numéricos.

Acessando Elementos

O acesso aos elementos é feito através de seus índices. Lembre-se sempre que o primeiro elemento está no índice 0.

// Atribuindo o valor 25.4 à primeira posição (índice 0) do vetor.
numeros[0] = 25.4;

// Atribuindo o valor 'A' à terceira posição (índice 2) do vetor.
letras[2] = 'A';

// Lendo e imprimindo o valor da terceira posição de 'letras'.
printf("%c\n", letras[2]); // Saída: A

Frequentemente, usamos laços de repetição, como o for, para percorrer e manipular todos os elementos de um vetor de forma eficiente.

// Exemplo: Preenchendo um vetor com os números de 10 a 14.
// Equivalente à lógica B[i] <- i + 10.
int vetorB[5];
for (int i = 0; i < 5; i++) {
    vetorB[i] = i + 10;
    printf("Posicao %d recebeu o valor %d\n", i, vetorB[i]);
}

💡 Onde está o .length de Java? Em C, um vetor não “sabe” o próprio tamanho — não existe vetorB.length. Por isso o 5 aparece explícito na condição do for (ou numa constante/variável separada, como no próximo exemplo com N). Esquecer disso é a causa mais comum de bugs de “estourar” o vetor (acessar um índice que não existe).

✍️ Exemplo Prático: Lendo e Imprimindo um Vetor

Problema: Fazer um programa para ler um número inteiro N, depois ler N números double e armazená-los em um vetor. Em seguida, mostrar na tela todos os elementos do vetor.

Solução em C:

#include <stdio.h>

int main() {
    int N;

    printf("Quantos numeros voce vai digitar? ");
    scanf("%d", &N);

    // Vetor de tamanho variável (VLA, C99): o tamanho só é conhecido em tempo de execução
    double vet[N];

    // Laço para ler e armazenar cada número no vetor
    for (int i = 0; i < N; i++) {
        printf("Digite um numero: ");
        scanf("%lf", &vet[i]);
    }

    // Laço para imprimir os elementos do vetor
    printf("\nNUMEROS DIGITADOS:\n");
    for (int i = 0; i < N; i++) {
        printf("%.1f\n", vet[i]);
    }

    return 0;
}

💡 double vet[N]; — isso é permitido em C? Sim, desde o padrão C99: é um Array de Tamanho Variável (VLA), cujo tamanho é definido por uma variável lida em tempo de execução, não uma constante fixa no código. É a forma mais direta de reproduzir o comportamento do new double[N] de Java — mas com uma diferença importante: o VLA fica alocado na stack (pilha), não no heap, então não é indicado para N muito grandes (milhões de elementos). Para esses casos, usa-se alocação dinâmica com malloc, um tópico mais avançado.

Exemplo de Execução:

Quantos números você vai digitar? 4
Digite um número: 10.5
Digite um número: 4.2
Digite um número: -7.1
Digite um número: 15.0

NÚMEROS DIGITADOS:
10.5
4.2
-7.1
15.0

📈 Exercício Completo: Análise de Alturas

Vamos resolver um problema mais elaborado que utiliza vetores paralelos (vários vetores cujos índices se correspondem).

Problema: Fazer um programa para ler nome, idade e altura de N pessoas. Depois, o programa deve mostrar a altura média das pessoas e a porcentagem de pessoas com menos de 16 anos, listando o nome delas.

Solução em C:

#include <stdio.h>

int main() {
    int N;

    printf("Quantas pessoas serao digitadas? ");
    scanf("%d", &N);

    // Vetores paralelos (VLA): nomes é uma MATRIZ de char (N linhas, 50 colunas)
    char nomes[N][50];
    int idades[N];
    double alturas[N];

    // Lendo os dados de cada pessoa
    for (int i = 0; i < N; i++) {
        printf("Dados da %dª pessoa:\n", i + 1);

        printf("Nome: ");
        scanf(" %49[^\n]", nomes[i]); // o espaço antes de %[^\n] descarta o '\n' pendente da leitura anterior

        printf("Idade: ");
        scanf("%d", &idades[i]);

        printf("Altura: ");
        scanf("%lf", &alturas[i]);
    }

    // Processando os dados: calculando a soma das alturas e contando menores de 16
    double somaAlturas = 0.0;
    int contMenores = 0;
    for (int i = 0; i < N; i++) {
        somaAlturas += alturas[i];
        if (idades[i] < 16) {
            contMenores++;
        }
    }

    // Calculando a média de altura
    double alturaMedia = somaAlturas / N;

    // Calculando o percentual de menores de 16 anos
    double percentualMenores = ((double) contMenores * 100.0) / N;

    // Apresentando os resultados
    printf("\nAltura media: %.2f\n", alturaMedia);
    printf("Pessoas com menos de 16 anos: %.1f%%\n", percentualMenores);

    // Imprimindo o nome dos menores de 16
    for (int i = 0; i < N; i++) {
        if (idades[i] < 16) {
            printf("%s\n", nomes[i]);
        }
    }

    return 0;
}

💡 char nomes[N][50] é uma Matriz? Sim — em C, “um vetor de textos” só existe como uma matriz (array bidimensional) de char: N linhas (uma por pessoa) e 50 colunas (o tamanho máximo de cada nome). O tópico de Matrizes, logo em seguida, explica essa estrutura em detalhe — aqui ela já aparece “de brinde” porque é a única forma de C representar essa lista de nomes.

🛠️ Como Executar no Code::Blocks

Você pode compilar e executar todos os exemplos de código em C acima no Code::Blocks (a IDE recomendada para este curso — veja o guia de instalação em Configuração do Ambiente).

  1. Novo Projeto: File > New > Project... > Console Application > C.
  2. Nomeie o Projeto: Dê um nome (ex: Vetores) e escolha uma pasta.
  3. Cole o Código: Abra o arquivo main.c gerado automaticamente e substitua o conteúdo por um dos exemplos acima.
  4. Compile e Execute: Pressione F9 (ou Build > Build and Run). Uma janela de console (terminal) abrirá mostrando a saída do programa.


🔗 Recursos Pedagógicos do Capítulo

Recurso Descrição Acesso Direto
📊 Slides de Aula Apresentação visual estruturada com diagramas Ver Slides
🧠 Quiz Formativo Teste de fixação com feedback imediato por alternativa Fazer Quiz
💻 Exemplos Práticos Código executável completo e saída no console Ver Exemplos
🧩 Exercícios Progressivos Lista de atividades práticas em 4 níveis Resolver Exercícios

🧭 Navegação do Capítulo: ⬅️ Capítulo Anterior · 📚 Sumário do Módulo · ➡️ Próximo Capítulo