Conceito de Array Bidimensional
Um array unidimensional é uma coleção de elementos do mesmo tipo. Um array bidimensional pode ser entendido como uma coleção de arrays unidimensionais. Essa ideia se estende para três ou mais dimensões, formando arrays multidimensionais. Visualmente, podemos pensar em uma tabela com linhas e colunas.
Criação de um Array Bidimensional
A sintaxe para definir um array bidimensional é:
tipo nome_array[constante1][constante2];
Exemplo:
int matriz[3][5]; // 3 linhas, 5 colunas
double tabela[2][3];
3indica o número de linhas.5indica o número de colunas em cada linha.inté o tipo de cada elemento.matrizé o nome do array.
Inicialização de Arrays Bidimensionais
Assim como variáveis comuns, arrays podem ser inicializados na declaração. Existem diferentes formas:
Inicialização Parcial
int mat1[3][5] = {1, 2};
int mat2[3][5] = {0};
Inicialização Completa
int mat3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
Essa inicialização preenche a matriz com os valores fornecidos linha por linha.
Inicialização por Linhas
int mat4[3][5] = {{1,2}, {3,4}, {5,6}};
As chaves internsa delimitam cada linha. Elementos não explicitados são preenchidos com zero.
Omissão da Dimensão Linha (nunca da coluna)
int mat5[][5] = {1,2,3}; // ok, 1 linha
int mat6[][5] = {1,2,3,4,5,6,7}; // ok, 2 linhas
int mat7[][3] = {{1,2}, {3,4}, {5,6}}; // ok, 3 linhas
O compilador deduz o número de linhas com base na quantidade de elementos fornecidos. A quantidade de colunas deve ser sempre especificada.
Uso de Índices
Os índices começam em zero, assim como nos arrays unidimensionais. Para acessar o elemento da linha 2, coluna 3 de uma matriz 3x5:
#include <stdio.h>
int main() {
int matriz[3][5] = { {1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15} };
printf("%d", matriz[2][3]); // 14
return 0;
}
Entrada e Saída de Dados
Para preencher e exibir uma matriz bidimensional, usamos laços aninhados:
#include <stdio.h>
int main() {
int tabela[2][3] = {0}; // inicializa com zeros
// entrada
for(int linha = 0; linha < 2; linha++) {
for(int coluna = 0; coluna < 3; coluna++) {
scanf("%d", &tabela[linha][coluna]);
}
}
// saída
for(int linha = 0; linha < 2; linha++) {
for(int coluna = 0; coluna < 3; coluna++) {
printf("%d ", tabela[linha][coluna]);
}
printf("\n");
}
return 0;
}
Exercício: Caracteres Convergindo ao Centro
O programa abaixo exibe uma string oculta que se revela gradualmente a partir das extremidades:
#include <stdio.h>
#include <string.h>
int main() {
char oculta[] = "****************";
char original[] = "Hello mundo! ";
int esquerda = 0;
int direita = strlen(original) - 1;
printf("%s\n", oculta);
while(esquerda <= direita) {
oculta[esquerda] = original[esquerda];
oculta[direita] = original[esquerda]; // simétrico
esquerda++;
direita--;
printf("%s\n", oculta);
}
return 0;
}
Observe que a string original deve ter o mesmo comprimento que oculta. O código substitui caracteres das pontas em direção ao centro, criando um efeito visual de revelação.