Escreva um programa em
que leia os dados de uma matriz
e calcule as somas:
c) da diagonal principal;
c) da diagonal principal;
Passo 1
O enunciado pede que eu escreva um programa em C que leia os dados de uma matriz
de dimensão
e calcule a soma da diagonal principal.
Informações dadas:
Informações dadas:
- A matriz é
com dimensão . - Devemos ler os elementos da matriz (ou seja,
valores) e calcular a soma dos elementos da diagonal principal.
O que é pedido: - Calcular e imprimir a soma dos elementos da diagonal principal, isto é, a soma dos elementos
para .
Passo 2
O que significa “diagonal principal”?
- A diagonal principal de uma matriz quadrada são os elementos que têm mesma linha e coluna. Em notação matemática, são os elementos
. - A soma que queremos é a soma desses elementos, que pode ser escrita como
Expliquei a soma com o símbolo
para ficar claro: esse sinal diz "somar para todos os
de
a
o valor
".
Passo 3
Como isso vira código em C (índices e representação)?
- Em matemática costumamos indexar linhas/colunas a partir de
, mas em C os vetores e matrizes são indexados a partir de . Portanto, os índices válidos para uma matriz em C são . Em notação matemática: . - Assim, na implementação em C os elementos da diagonal principal são
. Em forma de soma:
- Vou usar um array bidimensional em C:
int M[5][5];e uma variávelint soma = 0;para acumular.
Passo 4
Estratégia de leitura e soma (algoritmo passo a passo):
- Declarar
int M[5][5];eint soma = 0;. - Fazer dois laços aninhados
forpara percorrer linhase colunas , com variando de a e variando de a . - Para cada posição leia o valor com
scanf("%d", &M[i][j]);. - Se
(ou seja, estamos em um elemento da diagonal principal), acrescente M[i][j]emsoma. - Após ler toda a matriz, imprima o valor de
somacomprintf("%d\n", soma);.
Observação prática: podemos somar ao mesmo tempo em que lemos, sem necessidade de guardar toda a matriz, se quisermos economizar memória; mas aqui vou guardar para ficar explícito e claro (e isso ajuda na hora de depurar).
Passo 5
Explicando detalhes de programação (para a prova):
int M[5][5];cria um bloco de memória para armazenarinteiros, organizado por linhas e colunas. Em C, M[i][j]acessa o elemento da linhae coluna . - Laço
for (int i = 0; i < 5; i++)percorre as linhas. A condição i < 5garante que o último índice é. - Usamos
scanf("%d", &M[i][j]);para ler um inteiro do teclado e armazenar emM[i][j]. Sempre verifique que o usuário/arquivo fornecenúmeros; em provas, normalmente os dados vêm na ordem solicitada. - A verificação
if (i == j)detecta se estamos em um elemento da diagonal principal (mesma linha e mesma coluna). Quando verdadeira, fazemossoma += M[i][j];. - No final
printf("%d\n", soma);imprime a soma seguida de nova linha. Em questões automáticas, evite imprimir mensagens extras (como “Digite…”) — apenas o resultado.
Passo 6
Exemplo numérico didático (para fixar): suponha que a matriz lida seja
(os
* representam valores quaisquer). A soma da diagonal principal éNo código, os elementos somados seriam
M[0][0], M[1][1], M[2][2], M[3][3], M[4][4].Passo 7
Dicas para a prova e erros comuns:
- Lembre-se da diferença entre índices começando em
(na matemática) e em (em C). Esse é o erro mais comum. Em C a iteração vai atéi < 5. - Não se esqueça de inicializar a variável acumuladora (
soma = 0;) antes de somar. - Evite imprimir textos explicativos se for questão de programação automática; imprima apenas o valor final com
printf("%d\n", soma);. - Se os valores da matriz podem ser grandes, considere usar
long longparasoma. Aqui useiintpor simplicidade e porque é o caso mais comum em exercícios básicos.
Resposta
#include <stdio.h>
int main(void) {
int M[5][5];
int soma = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (scanf("%d", &M[i][j]) != 1) return 0; // lê o valor; sai se não houver entrada válida
if (i == j) soma += M[i][j];
}
}
printf("%d\n", soma);
return 0;
}