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:
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.
Escreva um comentário