Dando um passo além dos vetores (arrays de uma dimensão), as matrizes nos permitem trabalhar com dados estruturados em duas dimensões, como tabelas, planilhas ou tabuleiros.

🤔 O que são Matrizes?

Uma matriz é uma coleção de dados que pode ser entendida como um array bidimensional. Ela possui um conjunto de características fundamentais:

  • Indexada: Os elementos são acessados por meio de um par de índices: um para a linha e outro para a coluna. Em C, a sintaxe é matriz[linha][coluna].
  • Bidimensional: Organiza os dados em uma estrutura de duas dimensões, composta por linhas e colunas.
  • Homogênea: Todos os dados armazenados na matriz devem ser do mesmo tipo (int, double, char, etc.).
  • Tamanho Fixo: Uma vez que a matriz é declarada, seu tamanho (número de linhas e colunas) não pode ser alterado.

Visualmente, podemos imaginar uma matriz como uma grade:

      Col 0  Col 1  Col 2
Linha 0 [  ]   [  ]   [  ]
Linha 1 [  ]   [  ]   [  ]
Linha 2 [  ]   [  ]   [  ]
Linha 3 [  ]   [  ]   [  ]

🛠️ Trabalhando com Matrizes em C

Vamos ver como declarar e manipular matrizes na Linguagem C.

Declaração

Diferente de Java, em C uma matriz não é instanciada com new — ela é declarada diretamente, com o tamanho já reservado na memória (chamada de alocação estática).

// Sintaxe: tipo nomeDaMatriz[numeroDeLinhas][numeroDeColunas];

// Exemplo: Criando uma matriz de inteiros com 3 linhas e 4 colunas.
int matriz[3][4];

Isso aloca um espaço na memória para 12 números inteiros (3 linhas x 4 colunas).

💡 Tamanho fixo em tempo de compilação x tamanho lido do usuário: int matriz[3][4]; exige que 3 e 4 sejam constantes conhecidas em tempo de compilação. Quando o número de linhas/colunas vem do usuário (como no exemplo a seguir), usamos um recurso do C99 chamado VLA (Variable-Length Array): int matriz[M][N]; onde M e N são variáveis já lidas antes dessa linha.

Acessando Elementos

Para atribuir ou ler um valor, você utiliza os índices da linha e da coluna. Lembre-se que em C, os índices sempre começam em zero.

// Atribuindo o valor 10 à segunda linha (índice 1), terceira coluna (índice 2)
matriz[1][2] = 10; // Equivalente ao A[1, 2] <- 10 do pseudocódigo

// Lendo e imprimindo o valor
printf("%d\n", matriz[1][2]); // Saída: 10

✍️ Exemplo Prático: Lendo e Imprimindo uma Matriz

Vamos criar um programa que pergunta ao usuário as dimensões de uma matriz, lê cada um de seus elementos e, ao final, a imprime na tela de forma organizada.

Problema: Fazer um programa para ler dois números inteiros M e N e depois ler uma matriz de M linhas por N colunas contendo números inteiros. Em seguida, mostrar a matriz lida.

Solução em C:

#include <stdio.h>

int main() {
    int M, N;

    printf("Quantas linhas vai ter a matriz? ");
    scanf("%d", &M);
    printf("Quantas colunas vai ter a matriz? ");
    scanf("%d", &N);

    // Declarando a matriz com as dimensões informadas (VLA, C99)
    int mat[M][N];

    // Usando laços aninhados para ler os dados
    printf("Digite os elementos da matriz:\n");
    for (int i = 0; i < M; i++) { // Laço para percorrer as linhas
        for (int j = 0; j < N; j++) { // Laço para percorrer as colunas
            printf("Elemento [%d,%d]: ", i, j);
            scanf("%d", &mat[i][j]);
        }
    }

    // Usando laços aninhados para imprimir a matriz
    printf("\nMATRIZ DIGITADA:\n");
    for (int i = 0; i < M; i++) {
        for (int j = 0; j < N; j++) {
            printf("%d ", mat[i][j]); // Imprime o elemento e um espaço
        }
        printf("\n"); // Pula para a próxima linha ao final de cada linha da matriz
    }

    return 0;
}

Exemplo de Execução:

Quantas linhas vai ter a matriz? 2
Quantas colunas vai ter a matriz? 3
Digite os elementos da matriz:
Elemento [0,0]: 5
Elemento [0,1]: 8
Elemento [0,2]: 10
Elemento [1,0]: -2
Elemento [1,1]: 9
Elemento [1,2]: 7

MATRIZ DIGITADA:
5 8 10 
-2 9 7 

🧠 Exercícios de Lógica com Matrizes

Vamos transformar alguns dos “testes de mesa” do material de estudo em programas C funcionais para ver a lógica em ação.

Exercício 1: Populando com uma Regra

Problema: Crie um programa que preenche uma matriz 3x3 onde o valor de cada elemento é a soma de seus índices (linha + coluna).

Solução em C:

#include <stdio.h>

int main() {
    int N = 3;
    int matriz[3][3]; // N é constante aqui, então dá pra usar tamanho fixo

    // Populando a matriz com a regra mat[i][j] = i + j
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            matriz[i][j] = i + j; // Regra de população
        }
    }

    // Imprimindo a matriz resultante
    printf("Matriz gerada:\n");
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            printf("%d ", matriz[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Saída Esperada:

Matriz gerada:
0 1 2 
1 2 3 
2 3 4 

Exercício 2: Soma dos Elementos de Cada Linha

Problema: Faça um programa que crie uma matriz 3x4, popule-a com valores, e em seguida, crie um vetor onde cada posição armazena a soma dos elementos da linha correspondente da matriz.

Solução em C:

#include <stdio.h>

int main() {
    int M = 3; // Linhas
    int N = 4; // Colunas

    int matriz[3][4] = {
        {5, 10, 2, 8},
        {4, 3, 9, 1},
        {7, 6, 5, 2}
    };

    // Vetor para armazenar a soma de cada linha
    int vetorSomas[3];

    // Calculando a soma de cada linha
    for (int i = 0; i < M; i++) {
        int soma = 0;
        for (int j = 0; j < N; j++) {
            soma += matriz[i][j];
        }
        vetorSomas[i] = soma;
    }

    // Imprimindo o vetor com as somas
    printf("Soma de cada linha:\n");
    for (int i = 0; i < M; i++) {
        printf("Linha %d: %d\n", i, vetorSomas[i]);
    }

    return 0;
}

Saída Esperada:

Soma de cada linha:
Linha 0: 25
Linha 1: 17
Linha 2: 20

🛠️ Como Executar no Code::Blocks

Você pode compilar e executar todos os exemplos de código acima no Code::Blocks (veja a instalação em Setup do Curso).

  1. Crie um Novo Projeto: Vá em File > New > Project... > Console Application > C. Dê um nome ao projeto (ex: LerMatriz).
  2. Abra o main.c: O Code::Blocks já cria um arquivo main.c com um “Hello World” básico, dentro da pasta do projeto.
  3. Cole o Código: Apague o conteúdo padrão e cole um dos exemplos acima.
  4. Compile e Execute: Pressione F9 (ou o botão de “Build and Run”). Uma janela de console vai abrir com 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