📚 Guia Didático

Lista 6 · Vetores (Arrays Unidimensionais) em Linguagem C

🧠 1. O que é um Vetor (Array)?

🏠 Analogia: Prédio de Apartamentos

Imagine um prédio com vários apartamentos. Cada apartamento:

  • Tem um número (índice) que o identifica
  • Guarda algo dentro (valor)
  • Todos os apartamentos são do mesmo tamanho (mesmo tipo de dado)

Um vetor é exatamente isso: uma sequência de "caixinhas" numeradas, todas do mesmo tipo, onde você pode guardar valores.

📝 Declaração de um vetor:

int numeros[10];   // 10 "caixinhas" para números inteiros
float notas[20];    // 20 "caixinhas" para números reais

Visualização de um vetor de 5 posições:

Índice 0
5
Índice 1
8
Índice 2
3
Índice 3
7
Índice 4
9

📌 Importante: Os índices começam sempre em 0 (zero) em C!

⚠️ Cuidado: Se você declarou int vetor[10], os índices válidos são 0 até 9. Usar vetor[10] causa comportamento imprevisível (acesso inválido de memória)!

📥📤 2. Como Ler e Escrever Dados em um Vetor

📥 Leitura (scanf com laço for):

1
Crie o vetor
int vetor[10];  // 10 espaços reservados
2
Use um laço for para percorrer cada índice
for(int i = 0; i < 10; i++) {
    scanf("%d", &vetor[i]);  // Lê um valor para a posição i
}
3
Entenda o que acontece:

Cada iteração do forUM número e o guarda na posição i do vetor.

O & antes de vetor[i] é necessário porque scanf precisa do endereço de memória.

📤 Escrita (printf com laço for):

for(int i = 0; i < 10; i++) {
    printf("%d ", vetor[i]);  // Imprime cada valor
}

💡 Dica de Ouro: Sempre que você ver no enunciado "leia N números", pense imediatamente em:

for(i = 0; i < N; i++) {
    scanf("%d", &vetor[i]);
}

🔄 3. Padrão: Ordem Inversa (Exercício 1 e 7)

Este é um dos padrões mais comuns com vetores. Vamos entender o raciocínio:

🎯 Objetivo: Imprimir o vetor de trás para frente.

Lógica:

1
Identifique a última posição

Se o vetor tem tamanho N, a última posição é N - 1

2
Faça um laço que começa do final e vai até o início
for(i = N - 1; i >= 0; i--) {
    printf("%d ", vetor[i]);
}

🔄 Visualização:

Vetor original: [5, 8, 3, 7, 9]

Ordem inversa: [9, 7, 3, 8, 5]

O laço começa em i=4 (índice do 9) e vai até i=0 (índice do 5).

Para copiar em ordem inversa (Exercício 7):

for(i = 0; i < 10; i++) {
    invertido[i] = original[9 - i];  // Mapeamento: 0→9, 1→8, 2→7...
}

🔍 4. Padrão: Maior/Menor Elemento (Exercícios 2, 5, 6)

Como encontrar o MAIOR valor:

1
Inicialize "maior" com o primeiro elemento
int maior = vetor[0];
2
Compare com todos os outros elementos
for(i = 1; i < N; i++) {
    if(vetor[i] > maior) {
        maior = vetor[i];  // Atualiza se encontrar valor maior
    }
}

🏆 Analogia: Competição

Imagine que você está procurando a pessoa mais alta em uma fila:

  1. Você anota a altura da primeira pessoa como "mais alta até agora"
  2. Para cada próxima pessoa, você compara: "Essa pessoa é mais alta que a minha referência?"
  3. Se sim, atualiza sua referência
  4. No final, você tem a altura da pessoa mais alta

🏷️ 5. Padrão: Classificação (Exercícios 3 e 4)

Par ou Ímpar:

for(i = 0; i < 20; i++) {
    if(vetor[i] % 2 == 0) {
        printf("%d - par\n", vetor[i]);
    } else {
        printf("%d - impar\n", vetor[i]);
    }
}

💡 Lembrete: O operador % (módulo) retorna o resto da divisão. Se numero % 2 == 0, o número é par (resto zero).

Positivo ou Negativo:

if(vetor[i] >= 0) {
    // Positivo (inclui zero)
} else {
    // Negativo
}

🔢 6. Padrão: Contagem com Condição (Exercício 2)

"Quantos são maiores/menores/iguais ao primeiro elemento?"

1
Guarde o valor de referência
int referencia = vetor[0];
2
Crie contadores (inicializados com zero)
int maiores = 0, menores = 0, iguais = 0;
3
Percorra o vetor (a partir do índice 1) e conte
for(i = 1; i < 10; i++) {
    if(vetor[i] > referencia) maiores++;
    else if(vetor[i] < referencia) menores++;
    else iguais++;
}

⚠️ Atenção: Comece o laço de i = 1, não de i = 0. O elemento na posição 0 é a referência e não deve ser comparado com ele mesmo!

📊 7. Padrão: Soma e Média (Exercício 5)

float soma = 0.0;
for(i = 0; i < 10; i++) {
    soma += temp[i];  // Acumula cada temperatura
}
float media = soma / 10.0;  // Divide pelo total

💡 Fórmula da Média: media = soma / quantidade_de_elementos

Use float ou double para a média, pois o resultado pode ter casas decimais.

🧮 8. Padrão: Somatório com Índices Opostos (Exercício 6)

Este exercício pede: Soma = (M[0]-M[19])³ + (M[1]-M[18])³ + ... + (M[9]-M[10])³

Observe o padrão dos índices:

ParÍndice da frenteÍndice de trás
019
118
217
.........
10º910

📌 Percebeu? i + (19-i) = 19 sempre! O índice de trás é 19 - i.

double soma = 0.0;
for(i = 0; i < 10; i++) {
    soma += pow(M[i] - M[19 - i], 3);  // pow(base, expoente) = base^expoente
}

🔧 Não esqueça: Para usar pow(), inclua no topo do programa:

#include <math.h>

📋 9. Resumo: Checklist para Resolver Exercícios de Vetores

  1. Declare o vetor com o tamanho correto (ex: int v[10];)
  2. Leia os dados com for + scanf
  3. Identifique o que precisa calcular:
    • Ordem inversa? → laço decrescente
    • Maior/menor? → comparação com referência
    • Pares/ímpares? → % 2
    • Soma/média? → acumulador + divisão
    • Contagem? → contadores com if
  4. Imprima o resultado formatado

📚 Bons estudos! Pratique cada padrão e você dominará vetores rapidamente! 🚀