Criando Arrays bidimensionais em C: Matrizes

Arrays bidimensionais em C: Matrizes

Declaração de uma Matriz em linguagem C

Declaramos matrizes em C de forma similar à declaração de um array unidimensional, porém acrescentando informação sobre o número de linhas e colunas da estrutura, conforme a sintaxe a seguir mostra:

tipo nome [num_linhas] [num_colunas];

Por exemplo, se desejarmos criar uma matriz de nome “notas”, contendo 5 linhas e 4 colunas, escrevemos a instrução da seguinte forma:

float notas [5][4];

O resultado é a criação da seguinte estrutura de armazenamento na memória:

Matrizes em linguagem C

Note que os números de índice são contados a partir de zero, como nos arrays unidimensionais (vetores).

Inicializando a matriz

Podemos inicializar a matriz já em sua declaração, atribuindo-lhe os valores de cada linha, sequencialmente, englobados dentro de chaves {}, como no exemplo a seguir:

float notas[5][4] = {{ 7.5, 6.8, 9.6, 6.7 }, { 6.5, 6.3, 8.4, 7.6 }, { 5.7, 8.6, 9.0, 4.5 }, { 4.5, 5.8, 6.8, 7.0 }, { 3.6, 7.6, 8.1, 6.5 } };

Podemos também escrever esse código da forma a seguir, para melhor visualização, pois a linguagem C ignora as quebras de linha inseridas no meio do código:

float notas[5][4] = {{ 7.5, 6.8, 9.6, 6.7 },
                     { 6.5, 6.3, 8.4, 7.6 },
                     { 5.7, 8.6, 9.0, 4.5 },
                     { 4.5, 5.8, 6.8, 7.0 },
                     { 3.6, 7.6, 8.1, 6.5 } };

Ainda é possível declarar e inicializar a matriz atribuindo sequencialmente os valores, sem especificar explicitamente as linhas onde eles serão armazenados, como no exemplo:

float notas[5][4] = { 7.5, 6.8, 9.6, 6.7, 6.5, 6.3, 8.4, 7.6, 5.7, 8.6, 9.0, 4.5, 4.5, 5.8, 6.8, 7.0, 3.6, 7.6, 8.1, 6.5 };

Neste caso os valores serão armazenados a partir da posição 0,0 até preencher uma linha, e então se inicia o preenchimento da próxima linha, e assim sucessivamente até o final.

Recomendo, sempre que possível, utilizar constantes na declaração do tamanho da matriz, em vez de entrar diretamente com a quantidade de linhas e colunas, pois isso possibilita uma manutenção muita mais ágil do código no futuro. Por exemplo, poderíamos reescrever o código da seguinte forma:

#include <stdio.h>
#define NUM_L 5
#define NUM_C 4
int main()
{
 float notas[NUM_L][NUM_C] = {{ 7.5, 6.8, 9.6, 6.7 },
                              { 6.5, 6.3, 8.4, 7.6 },
                              { 5.7, 8.6, 9.0, 4.5 },
                              { 4.5, 5.8, 6.8, 7.0 },
                              { 3.6, 7.6, 8.1, 6.5 } };
}

Substituímos a declaração direta dos tamanhos pelas constantes NUM_L e NUM_C. Desta forma, se fosse necessário alterar o tamanho da matriz, bastaria alterar os valores dessas duas constantes. Essa técnica é mais útil quando os valores que preencherão a matriz forem fornecidos durante a execução do programa em si, e não escritos diretamente no código (hard-coded) como neste exemplo.

Após executar qualquer uma das instruções mostradas mesta seção, obteremos a matriz preenchida conforme mostra a figura a seguir:

Matriz declarada e inicializada em linguagem C

Criando, inicializando e exibindo o conteúdo de uma matriz em C

Usando o código a seguir vamos criar, inicializar e exibir o conteúdo de uma matriz em linguagem C:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define NUM_L 5
#define NUM_C 4
int main()
{
 setlocale(LC_ALL, "");
 int linha, coluna;
 float notas[NUM_L][NUM_C] = {{ 7.5, 6.8, 9.6, 6.7 },
                              { 6.5, 6.3, 8.4, 7.6 },
                              { 5.7, 8.6, 9.0, 4.5 },
                              { 4.5, 5.8, 6.8, 7.0 },
                              { 3.6, 7.6, 8.1, 6.5 } };
 printf("Exibindo o conteúdo da matriz declarada e inicializada:\n\n");
 for (linha = 0; linha < NUM_L; linha++) {
  for (coluna = 0; coluna < NUM_C; coluna++) {
    printf("%5.1f", notas[linha][coluna]);
  }
  printf("\n");
 }
 return 0;
}

Executando esse código obteremos a saída a seguir:

Criando e exibindo matrizes em C

Lembre-se de que uma matriz, assim como um vetor (array de uma dimensão), só pode conter dados de um mesmo tipo – no exemplo mostrado, todos os dados eram do tipo float.

Acessando um elemento da matriz

Se quisermos acessar um elemento específico da matriz, devemos conhecer sua localização, incluindo o número da coluna e da linha que contém o valor. Por exemplo, se quisermos visualizar o valor que está armazenado na coluna 3, linha 2, podemos usar o código seguinte:

printf("Valor do elemento na 2ª linha, 3ª coluna: %4.2f\n", notas[1][2]);

Essa instrução retornará o valor 8,4, armazenado na posição indicada. Note que a segunda linha é a linha 1, e a terceira coluna é a coluna 2, pois a contagem dos índices se inicia em zero.

Da mesma forma, se desejarmos atribuir um valor a uma posição específica da matriz, devemos indicar a linha e coluna correspondente ao local de armazenamento desejado.

 

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

Escreva um comentário

Seu e-mail não será divulgado


*