A maior rede de estudos do Brasil

Grátis
347 pág.
LINGUAGEM C

Pré-visualização | Página 39 de 50

170 
 
 
 
Perceba, no entanto, que o acesso ao valor de uma posição da matriz é feito agora 
utilizando dois índices: um para a linha e outro para a coluna. 
 
 0 
 1 
 2 
 3 
 4 
 5 
0 1 2 3 4 5 
 
Vale ressaltar que cada posição do array é uma variável. Portanto, todas as posições do 
array são igualmente acessíveis, isto é, o tempo e o tipo de procedimento para acessar qualquer 
uma das posições do array são iguais ao de qualquer outra variável. 
 
 
1.3. OPERAÇÕES BÁSICAS COM MATRIZES 
Do mesmo modo que acontece com variáveis simples, também é possível operar com 
variáveis indexadas. Contudo, assim como arrays de uma dimesão, não é possível operar 
diretamente com o conjunto completo, mas com cada um de seus componentes isoladamente. 
O acesso individual a cada componente de uma matriz é realizado pela especificação de 
sua posição na mesma por meio do seus índices. 
Suponha uma variável m capaz de armazenar 10 números inteiros em cada uma de suas 5 
linhas. Para acessar um elemento desta matriz deve-se fornecer o nome da mesma e o índice da 
linha e da coluna do componente desejado da matriz (um número de 0 a 4 para a linha e um 
número de 0 a 9 para a coluna, neste caso). 
Por exemplo, m[0,0] indica o primeiro elemento da primeira linha da matriz, m[0,1] 
indica o segundo elemento da primeira linha da matriz, m[0,9] indica o último elemento da 
primeira linha da matriz e m[4,9] indica o último elemento da última linha da matriz. 
Da mesma forma como vetores, não é possível operar diretamente sobre matrizes como 
um todo, mas apenas sobre seus componentes, um por vez. 
Observe o exemplo abaixo, onde se declara duas variáveis composta m e m1. 
 
 
mat[0][1] 
171 
 
 
 
1. #include<stdio.h> 
2. #include<stdlib.h> 
3. int main() 
4. { 
5. int m[2][2] = {1,2,3,4}; 
6. int m1[2][2]; 
7. m1 = m; */ INCORRETO 
8. return 0; 
9. } 
 
Assim, não é possível operar diretamente sobre matrizes como um todo, mas apenas sobre 
seus componentes, um por vez. Por exemplo, para somar duas matrizes é necessário somar cada 
um de seus componentes dois a dois. Da mesma forma, as operações de atribuição, leitura e 
escrita de matrizes devem ser feitas elemento a elemento. 
Para se realizar essa tarafa, a utilização de uma estrutura iterativa em conjunto com arrays 
é muito comum. De fato, esta construção é muito utilizada quando se opera com matrizes, devido 
à necessidade de se realizar uma mesma operação com os diversos componentes das mesmas. Na 
verdade, são raras as situações que se deseja operar isoladamente com um único componente da 
matriz. 
Observe o exemplo abaixo: 
 
1. #include<stdio.h> 
2. #include<stdlib.h> 
3. int main() 
4. { 
5. int m[2][2] = {1,2,3,4}; 
6. int m1[2][2]; 
7. int i,j; 
8. for (i=0; i<=3; i++) 
9. { 
10. for (j=0; j<=3; j++) 
11. { 
12. m1[i,j] = m[i,j]; 
13. } 
14. } 
15. return 0; 
16. } 
 
 
 
 
172 
 
 
 
3. ARRAY DE MÚLTIPLAS DIMENSÕES 
Vimos até agora como criar arrays com uma ou duas dimensões. A linguagem C permite 
que se crie arrays com mais de duas dimensões de maneira bem fácil. 
Na linguagem C, cada conjunto de colchetes [] representa uma dimensão do array. Cada 
par de colchetes adicionado ao nome de uma variável durante a sua declaração adiciona uma 
nova dimensão àquela variável, independente do seu tipo. 
Observe: 
 
float n[5]; // 1 dimensão 
float o[4][5]; // 2 dimensões 
float p[3][4][5]; // 3 dimensões 
float q[2][3][4][5]; // 4 dimensões 
 
A utilidade de arrays multidimensionais é muito grande. No exemplo acima, cada array 
pode ser utilizada para armazenar uma quantidade maior de informações. Por exemplo: 
 o array n pode ser utilizado para armazenar 5 notas de um aluno; 
 o array o pode ser utilizado para armazenar 5 notas de 4 alunos; 
 o array p pode ser utilizado para armazenar 5 notas de 4 alunos de 3 disciplinas; 
 o array q pode ser utilizado para armazenar 5 notas de 4 alunos de 3 disciplinas, de 
2 turmas. 
 
A figura abaixo ilustra o array p definido anteriormente: 
 
173 
 
 
 
 
O acesso ao valor de uma posição de um array multidimensional é feito utilizando um 
índice para cada dimensão do array. Observe o exemplo abaixo. 
 
1. #include<stdio.h> 
2. #include<stdlib.h> 
3. int main() 
4. { 
5. float p[3][4][5]; 
6. int i,j,k; 
7. for (i=0; i<3; i++) 
8. { 
9. for (j=0; j<4; j++) 
10. { 
11. for (k=0; k<5; k++) 
12. { 
13. p[i][j][k] = 0.0; 
14. } 
15. } 
16. } 
17. return 0; 
18. } 
 
Apesar de terem o comportamento de estruturas com mais de uma dimensão, os dados 
dos arrays multidimensionais são armazenados linearmente na memória. É o uso dos colchetes 
que cria a impressão de estarmos trabalhando com mais de uma dimensão. 
Observe: 
 
 0 
 1 
 2 
 3 
 0 1 2 3 
 
 
0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 
174 
 
 
 
 
Por esse motivo, é importante ter em mente qual a dimensão que se move mais 
rapidamente na memória: sempre a mais a direita, independente do tipo ou número de 
dimensões do array, como pode ser notado abaixo, marcado em vermelho. 
 
float n[5]; // 1 dimensão 
float o[4][5]; // 2 dimensões 
float p[3][4][5]; // 3 dimensões 
float q[2][3][4][5]; // 4 dimensões 
 
Basicamente, um array multidimensional funciona como qualquer outro array. Basta 
lembrar que o índice que varia mais rapidamente é o índice mais à direita. 
 
 
 
4. INICIALIZAÇÃO DE ARRAYS 
Um array pode ser inicializado com certos valores durante sua declaração. Isso pode ser 
feito com qualquer array independente de seu tipo ou número de dimensões. A sintaxe básica de 
inicialização de um array é a seguinte: 
 
tipo_de_dado nome_do_array[tam1][tam2]...[tamN] = {dados}; 
 
 
Onde: 
 tipo de dado  tipo de dado de cada elemento do array; 
 nome do array  identificador do array; 
 [tam1][tam2][tam3]...[tamN]  número de elemento de cada dimensão do array; 
 {dados}  lista de valores do mesmo tipo de dado do array. 
 
Na declaração acima, dados é uma lista de valores separados por vírgula e delimitado pelo 
operador de chaves. Esses valores devem ser colocados na mesma ordem em que serão colocados 
dentro do array. Observe o exemplo abaixo. 
 
int v[5] = {5, 10, 15, 20, 25}; 
char texto[2][2] = {‘a’, ‘b’, ‘c’, ‘d’}; 
175 
 
 
 
 
No caso do array v, o inteiro 5 ocupa a posição (0) do vetor. Já o inteiro 10 ocupa a posição 
(1). O inteiro 15 encontra-se na posição (2), o inteiro 20 na posição (3) e o inteiro 25 na posição 
(4) do vetor, conforme mostrado abaixo: 
 
v = 5 10 15 20 25 
 0 1 2 3 4 
 
Já no caso do array texto, o caractere a ocupa a posição (0,0) da matriz. Já o caracatere b 
ocupa a posição (0,1). O caracatere c encontra-se na posição (1,0) e o caracatere d na posição 
(1,1) da matriz, conforme mostrado abaixo: 
 
texto = a b 0 
 c d 1 
 0 1 
 
A inicialização de um array utilizando o operador de chaves só pode ser feita durante sua 
declaração. A inicialização de um array consiste em atribuir um valor inicial a cada posição do 
array. O operador de chaves apenas facilita essa tarefa, como mostrado no exemplo abaixo: 
 
Uso com o operador de chaves Uso sem o operador de chaves 
#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
 int v[5]= {5,10,15,20,25}; 
 int i; 
 for (i=0; i<=4; i++) 
 { 
 printf("%d