🎛️ Matrizes (Arrays Bidimensionais) em Programação
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 que3e4sejam 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];ondeMeNsã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).
- Crie um Novo Projeto: Vá em
File > New > Project... > Console Application > C. Dê um nome ao projeto (ex:LerMatriz). - Abra o
main.c: O Code::Blocks já cria um arquivomain.ccom um “Hello World” básico, dentro da pasta do projeto. - Cole o Código: Apague o conteúdo padrão e cole um dos exemplos acima.
- 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