Bóson Treinamentos em Ciência e Tecnologia

Criando Arrays bidimensionais em C: Matrizes

Criando e inicializando matrizes em C

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:

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:

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:

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.

 

Sair da versão mobile