Vetores e Matrizes - Arrays7.1
Este capítulo tem como objetivo fundamental apresentar o conceito de array na linguagem C, explorando sua aplicação prática na declaração de vetores e matrizes. Ao final deste estudo, você será capaz de compreender a necessidade técnica de utilizar coleções de dados, dominar a criação e o acesso a elementos tanto em vetores (unidimensionais) quanto em matrizes (bidimensionais), além de explorar a estruturação de arrays com múltiplas dimensões e as técnicas para a inicialização correta dessas estruturas.
- Compreender a motivação para o uso de arrays no desenvolvimento de software.
- Aprender a declarar e estruturar um vetor.
- Dominar as técnicas de acesso e manipulação dos elementos de um vetor.
- Desenvolver habilidades para criar e organizar matrizes.
- Compreender como acessar e modificar dados em posições específicas de uma matriz.
- Explorar a criação de arrays que possuam mais de duas dimensões.
- Conhecer os métodos para inicializar arrays no momento da declaração.
Por que utilizar arrays?7.2
As variáveis que você utilizou até este momento possuem uma limitação fundamental: são capazes de armazenar apenas um único valor por vez. Sempre que você atribui um novo dado a uma variável, o conteúdo anterior é permanentemente substituído e perdido pelo sistema.
Observe esse comportamento no código a seguir:
#include <stdio.h>
#include <stdlib.h>
int main(){
float x = 10;
printf("x = %f\n", x);
x = 20; // O valor 10 é descartado e substituído por 20
printf("x = %f\n", x);
system("pause");
return 0;
}
Essa dinâmica ocorre porque cada variável está vinculada a uma posição exclusiva na memória, comportando apenas um dado do tipo especificado. Consequentemente, para processar diversos valores de forma simultânea, você seria obrigado a declarar múltiplas variáveis manuais.
O problema da escalabilidade7.2.1
Imagine que você precise desenvolver um programa para ler as notas de cinco estudantes, calcular a média e, em seguida, imprimir apenas as notas que ficaram acima dessa média calculada. Uma solução utilizando variáveis simples seria estruturada da seguinte forma:
#include <stdio.h>
#include <stdlib.h>
int main(){
float n1, n2, n3, n4, n5;
printf("Digite a nota de 5 estudantes: ");
// Leitura individual para cada uma das 5 variáveis
scanf("%f", &n1);
scanf("%f", &n2);
scanf("%f", &n3);
scanf("%f", &n4);
scanf("%f", &n5);
float media = (n1 + n2 + n3 + n4 + n5) / 5.0;
// Testes individuais exaustivos e repetitivos
if(n1 > media) printf("nota: %f\n", n1);
if(n2 > media) printf("nota: %f\n", n2);
if(n3 > media) printf("nota: %f\n", n3);
if(n4 > media) printf("nota: %f\n", n4);
if(n5 > media) printf("nota: %f\n", n5);
system("pause");
return 0;
}
Embora essa abordagem funcione para um grupo pequeno, ela se torna tecnicamente inviável se a turma possuir 100 estudantes. Expandir esse programa exigiria de você:
- A criação de 100 nomes de variáveis diferentes para gerenciar.
- A escrita de 100 comandos
scanf()para realizar a leitura. - Uma expressão de soma contendo 100 termos individuais.
- A repetição de 100 comandos
ife 100 comandosprintf()para a verificação final.
Essa solução é extremamente rígida e propensa a falhas. Qualquer alteração no número de alunos exigiria que você reescrevesse quase a totalidade do código.
A solução: O Array7.2.2
Como as notas dos alunos guardam uma relação lógica entre si, você pode declará-las utilizando um único nome para representar todo o conjunto de dados. Um array (também conhecido como "vetor") é a forma mais elementar de dados estruturados na linguagem C.
Trata-se de um conjunto de variáveis de um mesmo tipo que compartilham o mesmo identificador e estão organizadas de forma contígua na memória. A grande vantagem pedagógica e técnica é que cada valor individual dentro desse conjunto pode ser acessado através de um índice numérico.
Ao utilizar arrays, você substitui a gestão manual de dezenas de variáveis por uma estrutura única, permitindo o uso de laços de repetição para processar todos os dados de maneira automática, fluida e eficiente.
Array com uma dimensão - Vetor7.3
A ideia de um array ou vetor é bastante simples: criar um conjunto de variáveis do mesmo tipo utilizando apenas um nome. Relembrando o exemplo anterior, em que as variáveis que guardam as notas dos 100 alunos são todas do mesmo tipo, essa solução permitiria usar apenas um nome (como notas) para representar todos os estudantes, em vez de criar um nome individual para cada variável.
Declarando um vetor7.3.1
Em linguagem C, a declaração de um array segue esta forma geral:
tipo_dado nome_array[tamanho];
Esse comando define um array de nome nome_array contendo tamanho elementos adjacentes na memória. Cada elemento do array é do tipo tipo_dado. No caso das notas dos 100 alunos, declararíamos um array de ponto flutuante da seguinte forma:
float notas[100];
É fundamental que o tamanho de um array seja sempre um valor ou uma expressão inteira e constante. Veja os exemplos abaixo:
#include <stdio.h>
#include <stdlib.h>
#define N 100
int main(){
int n = 5;
float F[N+1]; // Correto: expressão inteira e constante
char texto[30]; // Correto: valor inteiro
// int Vetor[n]; // Errado: n é uma variável
// int V[4.5]; // Errado: 4.5 não é um valor inteiro
system("pause");
return 0;
}
Acessando um elemento do vetor7.3.2
Como a variável que armazena a nota de um aluno compartilha o mesmo nome com as demais, o acesso ao valor individual é realizado por meio de um índice. Para indicar qual posição do array você deseja acessar, utiliza-se o operador de colchetes []: notas[indice].
float notas[100];
notas[0] = 81; // Primeira posição
notas[1] = 55; // Segunda posição
// ...
notas[99] = 72; // Centésima posição
A imagem abaixo ilustra como esses dados são organizados:
Na linguagem C, a numeração do índice começa sempre do ZERO e termina em N-1, onde N é o tamanho definido na declaração. Isso ocorre porque o nome do array aponta para o início do bloco na memória, e o índice indica quantas posições se deve "pular" para alcançar o dado desejado.
Utilizando laços de repetição com arrays7.3.2.1
A grande vantagem pedagógica e técnica do uso de índices é a possibilidade de utilizar comandos de repetição, como o laço for, para manipular o array inteiro de forma automática.
#include <stdio.h>
#include <stdlib.h>
int main(){
int notas[100];
int i;
for (i = 0; i < 100; i++){
printf("Digite a nota do aluno %d: ", i);
scanf("%d", ¬as[i]);
}
system("pause");
return 0;
}
Nesse exemplo, o laço for executa o comando scanf() para cada uma das 100 posições. Isso torna o código muito mais enxuto, facilita a manutenção e minimiza erros, pois você não precisa reescrever o mesmo comando 100 vezes.
Características das posições do array7.3.2.2
Cada posição do array funciona exatamente como uma variável individual. Isso significa que ela pode ser usada em:
- Leitura de dados:
scanf("%d", ¬as[5]); - Atribuição:
notas[0] = 10; - Expressões:
notas[1] = notas[5] + notas[0];
Além disso, o tempo necessário para acessar qualquer posição do array é exatamente o mesmo, independentemente de ser o primeiro ou o último elemento.
É sua responsabilidade como programador garantir que os limites do array (de 0 a N-1) sejam respeitados. Tentar acessar índices como -1 ou 100 pode resultar em erros graves, pois o programa tentará acessar espaços de memória que podem pertencer a outras variáveis.
Cuidados com a atribuição de arrays7.3.3
Uma restrição importante da linguagem C é que não se pode atribuir um array inteiro a outro diretamente utilizando o operador =. Para copiar os dados, você deve realizar a atribuição elemento por elemento.
#include <stdio.h>
#include <stdlib.h>
int main(){
int v[5] = {1, 2, 3, 4, 5};
int v1[5];
// v1 = v; // ERRADO! O compilador não aceita essa operação
int i;
for(i = 0; i < 5; i++)
v1[i] = v[i]; // CORRETO: cópia individual
system("pause");
return 0;
}
Array com duas dimensões - Matriz7.4
Os arrays explorados anteriormente possuíam apenas uma dimensão e eram tratados como listas lineares de variáveis. No entanto, existem situações em que a organização dos dados exige uma estrutura mais robusta, como no caso de tabelas compostas por linhas e colunas. Para atender a essa necessidade, utilizamos arrays com duas dimensões, conhecidos tecnicamente como matrizes.
Declarando uma matriz7.4.1
Na linguagem C, a declaração de uma matriz segue uma sintaxe que expande o conceito do vetor, adicionando um segundo par de colchetes para representar a nova dimensão:
tipo_dado nome_array[nro_linhas][nro_colunas];
Esse comando reserva um espaço na memória para um conjunto de elementos adjacentes do mesmo tipo. O total de elementos criados é o resultado da multiplicação entre o número de linhas e o número de colunas. Por exemplo, para criar uma matriz de inteiros com 100 linhas e 50 colunas, utiliza-se a seguinte instrução:
int mat[100][50];
Acessando um elemento da matriz7.4.2
Diferente do vetor, onde bastava um único índice, o acesso a uma posição específica na matriz exige que você informe as coordenadas de linha e coluna. Cada índice deve ser colocado em seu próprio par de colchetes:
int mat[100][50];
mat[0][1] = 99; // Acessa a primeira linha (0) e a segunda coluna (1)
A imagem abaixo ilustra a localização desse valor na estrutura de dados:
Lembre-se que, assim como nos vetores, a contagem de cada dimensão começa obrigatoriamente no ZERO e termina em N-1. Portanto, em uma matriz de 100x50, as linhas variam de 0 a 99, enquanto as colunas variam de 0 a 49.
Percorrendo os elementos de uma matriz7.4.2.1
Para manipular todos os elementos de uma matriz de forma eficiente, é necessário utilizar o conceito de aninhamento de repetições. Como existem dois índices, você precisará de dois laços para percorrer a estrutura completa.
#include <stdio.h>
#include <stdlib.h>
int main(){
int mat[100][50];
int i, j;
// O laço externo percorre as linhas
for (i = 0; i < 100; i++){
// O laço interno percorre as colunas de cada linha
for (j = 0; j < 50; j++){
printf("Digite o valor de mat[%d][%d]: ", i, j);
scanf("%d", &mat[i][j]);
}
}
system("pause");
return 0;
}
Nesse exemplo, utilizamos as variáveis i (para as linhas) e j (para as colunas). O laço interno deve completar todo o seu ciclo (variando de 0 a 49) para cada incremento do laço externo, garantindo que todas as células da tabela sejam processadas.
Propriedades das posições da matriz7.4.2.2
Cada célula individual da matriz comporta-se exatamente como uma variável comum do tipo declarado. Elas podem ser utilizadas em qualquer operação suportada pela linguagem:
- Entrada de dados:
scanf("%d", &mat[5][0]); - Atribuição direta:
mat[0][0] = 10; - Expressões matemáticas:
mat[1][2] = mat[5][0] + mat[0][0];
Todas as posições de uma matriz são igualmente acessíveis pelo sistema. Isso significa que o tempo necessário para o computador ler ou escrever na posição mat[0][0] é idêntico ao tempo gasto para a posição mat[99][49].
Array com mais de duas dimensões7.5
Nas seções anteriores, você aprendeu a estruturar dados em uma única dimensão (vetores) ou em duas dimensões (matrizes). A linguagem C, contudo, permite que você expanda essa lógica para criar arrays com múltiplas dimensões de maneira bastante intuitiva.
A regra fundamental é que cada dimensão do array é definida por um par de colchetes [] em sua declaração.
#include <stdio.h>
#include <stdlib.h>
int main(){
// Declara array de int com 1 dimensão
int vet[5];
// Declara array de float com 2 dimensões
float mat[5][5];
// Declara array de double com 3 dimensões (cubo)
double cub[5][5][5];
// Declara array de int com 4 dimensões
int X[5][5][5][5];
system("pause");
return 0;
}
Como demonstrado acima, cada par de colchetes adicionado ao nome do array durante a declaração insere uma nova dimensão à estrutura, independentemente do tipo de dado utilizado.
Acesso e Manipulação7.5.1
Para acessar o valor de uma posição específica, você deve fornecer um índice para cada dimensão existente no array. Consequentemente, para percorrer todos os elementos de uma estrutura multidimensional, você precisará aninhar tantos laços de repetição quantas forem as dimensões do array.
Veja o exemplo de como preencher um cubo (3 dimensões) com zeros:
#include <stdio.h>
#include <stdlib.h>
int main(){
int cub[5][5][5];
int i, j, k;
// São necessários três laços para percorrer as três dimensões
for (i = 0; i < 5; i++){
for (j = 0; j < 5; j++){
for (k = 0; k < 5; k++){
cub[i][j][k] = 0; // Atribuição de valor
}
}
}
system("pause");
return 0;
}
Neste código, as variáveis i, j e k indexam cada uma das dimensões. O aninhamento é necessário porque a primeira dimensão comporta um array de duas dimensões, que por sua vez contém arrays unidimensionais.
Organização na Memória7.5.2
Embora os colchetes criem a percepção visual de que estamos trabalhando com cubos ou estruturas complexas, é vital que você compreenda que o computador armazena todos os arrays de forma linear na memória.
Por esse motivo, existe uma ordem de movimentação na memória que você deve conhecer: a dimensão que "se move" ou varia mais rapidamente é sempre a que está posicionada mais à direita na declaração.
int vet[5];float mat[5][5];double cub[5][5][5];int X[5][5][5][5];
Independentemente do número de dimensões, o índice mais à direita é o que percorre endereços adjacentes de memória de forma mais imediata.
Inicialização de arrays7.6
Como você já aprendeu, arrays funcionam como variáveis: a simples declaração reserva um espaço na memória, mas não associa a ele nenhum valor específico. Inicialmente, esse espaço contém apenas o "lixo de memória". Dependendo do software que você estiver desenvolvendo, é fundamental iniciar todas as posições com um valor predefinido.
Uma abordagem comum é utilizar um laço de repetição para zerar todas as posições do array, conforme demonstrado no código abaixo:
#include <stdio.h>
#include <stdlib.h>
int main(){
int vet[5];
int i;
// Percorre o array atribuindo zero a cada índice
for (i = 0; i < 5; i++){
vet[i] = 0;
}
system("pause");
return 0;
}
Embora útil para zerar estruturas, essa técnica torna-se pouco prática se você precisar atribuir um valor diferente e específico para cada posição. Nesses casos, a linguagem C oferece uma sintaxe simplificada utilizando o operador de chaves { } durante a declaração.
Utilizando o operador de chaves7.6.1
O operador de chaves permite que você defina uma lista de valores, separados por vírgula, que serão atribuídos ao array no momento em que ele é criado. A forma geral é:
tipo_dado nome_array[tamanho] = { valor1, valor2, ... };
Os dados são inseridos na ordem em que aparecem na lista, começando obrigatoriamente pela posição zero. É importante destacar que esta forma de atribuição em lote só pode ser realizada no momento da declaração do array.
Abaixo, compare a praticidade entre as duas formas de inicialização:
// Com o operador { }
#include <stdio.h>
#include <stdlib.h>
int main(){
// Inicialização direta
int vet[5] = {15, 12, 9, 1, 35};
system("pause");
return 0;
}
// Sem o operador { }
#include <stdio.h>
#include <stdlib.h>
int main(){
int vet[5];
// Atribuição manual posição por posição
vet[0] = 15;
vet[1] = 12;
vet[2] = 9;
vet[3] = 1;
vet[4] = 35;
system("pause");
return 0;
}
Inicializando Matrizes7.6.2
Para arrays de duas dimensões, você pode seguir dois caminhos distintos para a inicialização:
- Lista única: Utiliza-se apenas um par de chaves. O compilador preenche a matriz linha por linha, mudando para a próxima apenas quando todas as colunas da linha atual estiverem completas. Isso ocorre porque a dimensão mais à direita é a que varia mais rápido na memória.
- Chaves aninhadas: Utiliza-se um par de chaves para delimitar cada linha da matriz, o que torna o código mais legível e organizado.
#include <stdio.h>
#include <stdlib.h>
int main(){
float vetor[3] = {1.5, 22.1, 4.56};
// Forma 1: Lista única
int matriz1[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
// Forma 2: Grupos por linha (mais didático)
int matriz2[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
system("pause");
return 0;
}
Você não é obrigado a definir valores para todas as posições na inicialização. Caso forneça menos valores do que o tamanho total do array, as posições restantes serão automaticamente inicializadas com o valor ZERO (ou o caractere nulo \0).
Inicialização de caracteres (Strings)7.6.3
Para arrays de caracteres, você pode inicializar cada posição individualmente com aspas simples, mas a forma mais prática é utilizar aspas duplas, que já inclui automaticamente o caractere terminador \0.
char str1[10] = {'J', 'o', 'a', 'o', '\0'}; // Manual
char str2[10] = "Joao"; // Prático e automático
Inicialização sem tamanho7.6.4
Uma facilidade adicional da linguagem C é a possibilidade de declarar um array sem especificar seu tamanho entre os colchetes. Ao fazer isso, o compilador conta quantos elementos existem na lista de inicialização e define o tamanho fixo do array com base nessa contagem.
int vetor[] = {1, 2, 3, 4, 5}; // O compilador define tamanho 5
char texto[] = "Linguagem C."; // O tamanho será 13 (12 letras + '\0')
No caso de matrizes ou arrays multidimensionais, apenas a primeira dimensão pode ter o tamanho omitido; todas as outras dimensões devem ser explicitamente declaradas.
// O compilador deduzirá 5 linhas baseado nos 10 elementos (10/2 = 5)
int matriz[][2] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Exemplos de uso de arrays7.7
Nesta seção, você encontrará exemplos práticos que demonstram as operações fundamentais para a manipulação de vetores e matrizes na linguagem C.
Somando os elementos de um vetor7.7.1
Somar os dados contidos em um array é uma das tarefas mais comuns em programação. O processo consiste em acumular os valores individuais em uma variável específica.
Para realizar essa operação, você deve seguir estes passos:
- Inicialização: Declare uma variável (como
soma) e atribua a ela o valor 0. Isso é essencial para eliminar o lixo de memória e garantir que o acumulador comece neutro. - Percorrimento: Utilize um laço de repetição, como o
for, para acessar cada índice do vetor. - Acumulação: A cada iteração, some o valor da posição atual ao conteúdo já existente na variável
soma.
#include <stdio.h>
#include <stdlib.h>
int main(){
int i, lista[5] = {3, 51, 18, 2, 45};
int soma = 0; // Inicialização vital para o acumulador
for(i = 0; i < 5; i++)
soma = soma + lista[i]; // Acumula o valor de cada posição
printf("Soma = %d\n", soma);
system("pause");
return 0;
}
Encontrando o maior valor de um vetor7.7.2
O procedimento para localizar o maior elemento em um conjunto de dados é idêntico para vetores, matrizes ou estruturas multidimensionais.
Para isso, você utilizará uma variável auxiliar (como Maior):
- Valor Inicial: Inicialize a variável
Maiorcom o conteúdo da primeira posição do vetor (lista[0]). Nunca utilize zero para inicializar, pois se o vetor contiver apenas números negativos, o zero seria erroneamente apontado como o maior valor. - Comparação: Percorra o restante do vetor comparando cada posição com o valor armazenado em
Maior. - Atualização: Se encontrar um valor superior ao atual, a variável
Maiorassume esse novo número.
#include <stdio.h>
#include <stdlib.h>
int main(){
int i, lista[5] = {3, 18, 2, 51, 45};
int Maior = lista[0]; // Começa comparando a partir do primeiro elemento
for(i = 1; i < 5; i++){
if(Maior < lista[i]) // Se a posição atual for maior que a armazenada
Maior = lista[i]; // Atualiza o maior valor encontrado
}
printf("Maior = %d\n", Maior);
system("pause");
return 0;
}
Para encontrar o menor elemento, a lógica é exatamente a mesma: basta inverter o operador de comparação no comando if para Maior > lista[i].
Calculando a média dos elementos de um vetor7.7.3
O cálculo da média é uma extensão natural da soma. Primeiramente, você deve somar todos os elementos utilizando um laço de repetição e, em seguida, dividir o total pelo número de elementos do array.
#include <stdio.h>
#include <stdlib.h>
int main(){
int i, lista[5] = {3, 51, 18, 2, 45};
int soma = 0;
for(i = 0; i < 5; i++)
soma = soma + lista[i];
// Divide pelo total de elementos usando um valor real para precisão
float media = soma / 5.0;
printf("Media = %f\n", media);
system("pause");
return 0;
}
Somando os elementos de uma matriz7.7.4
A lógica para somar elementos em uma matriz é análoga à do vetor, com a necessidade de adaptar o percorrimento para as duas dimensões (linhas e colunas).
Para processar cada célula, você deve utilizar dois laços de repetição aninhados. Assim como no vetor, a variável acumuladora deve ser inicializada com 0.
#include <stdio.h>
#include <stdlib.h>
int main(){
int mat[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int i, j, soma = 0;
// Dois laços são necessários para percorrer as duas dimensões
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
soma = soma + mat[i][j]; // Acumula cada célula da matriz
printf("Soma = %d\n", soma);
system("pause");
return 0;
}
Questões7.8
1. Escreva um programa em C que declare um vetor de inteiros com 5 posições. Inicialize o vetor com os valores {10, 20, 30, 40, 50} e, em seguida, imprima o valor armazenado na terceira posição (índice 2).
- Entrada: Nenhuma.
- Saída Esperada: 30.
2. Crie um programa que leia 5 números inteiros fornecidos pelo usuário e os armazene em um vetor. Após a leitura, o programa deve imprimir os números na ordem inversa em que foram digitados.
- Entrada: 1, 2, 3, 4, 5.
- Saída Esperada: 5 4 3 2 1.
3. Desenvolva um programa que leia as notas de 5 alunos e as armazene em um vetor de float. O programa deve calcular a média aritmética da turma e imprimir a média.
- Entrada: 5.0, 6.0, 7.0, 8.0, 9.0.
- Saída Esperada: Media: 7.0.
4. Crie um programa que leia 10 números inteiros e os armazene em um vetor. O programa deve contar e imprimir quantos números pares foram digitados.
- Entrada: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.
- Saída Esperada: Pares: 5.
5. Escreva um programa que leia um vetor de 10 números inteiros. Em seguida, peça ao usuário para digitar um número X. O programa deve verificar se X está presente no vetor e, se estiver, imprimir a posição (índice) da primeira ocorrência. Se não estiver, imprima "Nao encontrado".
- Entrada: Vetor: {10, 20, ...}, X: 20.
- Saída Esperada: Indice: 1.
6. Crie um programa que declare uma matriz 3x3 de inteiros. Peça ao usuário para preencher a matriz e, ao final, imprima a matriz formatada (linhas e colunas alinhadas). A entrada deve preencher a matriz começando na linha superior e no canto esquerdo, ao chegar no limite de 3 números deve descer para a linha debaixo voltando para a primeira posição da linha.
- Entrada: 1, 2, 3, 4, 5, 6, 7, 8, 9.
- Saída Esperada:
1 2 3
4 5 6
7 8 9
7. Escreva um programa que leia uma matriz 3x3 de inteiros e calcule a soma dos elementos da diagonal principal (onde linha == coluna). O preenchimento deve ser feito como na questão anterior.
- Entrada: 1 2 3 4 5 6 7 8 9
- Saída Esperada: Soma Diagonal: 15 (1 + 5 + 9).
8. Desenvolva um programa que leia dois vetores de inteiros com 5 posições cada, A e B. O programa deve gerar um terceiro vetor C, onde cada elemento é a soma dos elementos correspondentes de A e B (C[i] = A[i] + B[i]). Imprima o vetor C.
- Entrada: A={1,1,1,1,1}, B={2,2,2,2,2}.
- Saída Esperada: C = {3, 3, 3, 3, 3}.
9. Crie um programa que leia uma matriz 4x4 de inteiros. O programa deve identificar o maior valor presente na matriz e informar em qual posição (linha e coluna) ele se encontra.
- Entrada: Matriz com valores variados.
- Saída Esperada: Maior: 50, Posicao: [2][3].
10. Escreva um programa que leia uma matriz 3x3 e calcule a soma de cada linha separadamente. Armazene as somas em um vetor de 3 posições e imprima o resultado.
- Entrada: 1 1 1 2 2 2 3 3 3
- Saída Esperada: Soma Linha 0: 3, Soma Linha 1: 6, Soma Linha 2: 9.
11. Implemente a multiplicação de duas matrizes 2x2. O programa deve ler duas matrizes A e B, calcular o produto C = A * B e imprimir a matriz resultante. Lembre-se da regra de multiplicação de matrizes (linha de A x coluna de B).
- Entrada: A={{1,2},{3,4}}, B={{2,0},{1,2}}.
- Saída Esperada: 4 4 10 8
Próximos passos7.9
No próximo capítulo, Strings e Manipulação de Texto, focaremos especificamente nos arrays de caracteres. Você aprenderá funções essenciais da biblioteca string.h para copiar, concatenar, comparar e medir o tamanho de textos, habilidades fundamentais para lidar com dados não numéricos.