Escreva um programa em C que leia os dados de uma matriz M(5,5) e calcule as somas:
c) da diagonal principal;

Passo 1

O enunciado pede que eu escreva um programa em C que leia os dados de uma matriz M de dimensão 5\times5 e calcule a soma da diagonal principal.
Informações dadas:
  • A matriz é M com dimensão 5\times5.
  • Devemos ler os elementos da matriz (ou seja, 25 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 M_{ii} para i=1,\dots,5.

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 M_{11}, M_{22}, M_{33}, M_{44}, M_{55}.
  • A soma que queremos é a soma desses elementos, que pode ser escrita como
\sum_{i=1}^{5} M_{ii}.
Expliquei a soma com o símbolo \sum para ficar claro: esse sinal diz "somar para todos os i de 1 a 5 o valor M_{ii}".

Passo 3

Como isso vira código em C (índices e representação)?
  • Em matemática costumamos indexar linhas/colunas a partir de 1, mas em C os vetores e matrizes são indexados a partir de 0. Portanto, os índices válidos para uma matriz 5\times5 em C são 0,1,2,3,4. Em notação matemática: \{0,\dots,4\}.
  • Assim, na implementação em C os elementos da diagonal principal são M[0][0], M[1][1], M[2][2], M[3][3], M[4][4]. Em forma de soma:
\sum_{i=0}^{4} M[i][i].
  • Vou usar um array bidimensional em C: int M[5][5]; e uma variável int soma = 0; para acumular.

Passo 4

Estratégia de leitura e soma (algoritmo passo a passo):
  1. Declarar int M[5][5]; e int soma = 0;.
  2. Fazer dois laços aninhados for para percorrer linhas i e colunas j, com i variando de 0 a 4 e j variando de 0 a 4.
  3. Para cada posição leia o valor com scanf("%d", &M[i][j]);.
  4. Se i == j (ou seja, estamos em um elemento da diagonal principal), acrescente M[i][j] em soma.
  5. Após ler toda a matriz, imprima o valor de soma com printf("%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 armazenar 25 inteiros, organizado por linhas e colunas. Em C, M[i][j] acessa o elemento da linha i e coluna j.
  • Laço for (int i = 0; i < 5; i++) percorre as linhas i = 0,1,2,3,4. A condição i < 5 garante que o último índice é 4.
  • Usamos scanf("%d", &M[i][j]); para ler um inteiro do teclado e armazenar em M[i][j]. Sempre verifique que o usuário/arquivo fornece 25 nú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, fazemos soma += 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
\begin{pmatrix} 1 & * & * & * & *\\\ * & 2 & * & * & *\\\ * & * & 3 & * & *\\\ * & * & * & 4 & *\\\ * & * & * & * & 5 \end{pmatrix}
(os * representam valores quaisquer). A soma da diagonal principal é
1+2+3+4+5=15.
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 1 (na matemática) e em 0 (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 long para soma. Aqui usei int por 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;
}

Exercícios relacionados