Questão 11.

Escreva um programa para entrar com valores para uma matriz A_{n x n} simétrica.

Passo 1

O enunciado pede um programa para ler valores de uma matriz A_{n\times n} simétrica, isto é, com a propriedade
A_{ij} = A_{ji}
para todo 1 \le i,j \le n. Vamos usar um array bidimensional, ler apenas a “metade” superior da matriz e aproveitar a simetria para preencher automaticamente a metade inferior.

Passo 2

A estratégia é:
  1. Ler do usuário o valor de n, a ordem da matriz.
  2. Declarar um array A de tamanho n\times n.
  3. Usar dois laços aninhados com índice externo i variando de 0 até n-1 e índice interno j variando de i até n-1.
  4. Para cada par (i,j), ler A[i][j] e atribuir imediatamente A[j][i]=A[i][j].
  5. (Opcional) Exibir toda a matriz para confirmar que ficou simétrica.

Passo 3

No código em C:
  • Incluímos <stdio.h>.
  • Declaramos int A[MAX][MAX], n, i, j; com #define MAX 100 (ou outro limite maior que n).
  • Lemos n com scanf.
  • Fazemos os dois laços for(i=0; i<n; i++) e for(j=i; j<n; j++) para leitura e espelhamento.
  • Finalmente, imprimimos a matriz completa com mais dois laços for.

Resposta

#include <stdio.h>
#define MAX 100

int main() {
    int A[MAX][MAX];
    int n, i, j;

    printf("Digite a ordem n da matriz: ");
    scanf("%d", &n);

    // Leitura apenas da metade superior (i <= j) e espelhamento
    for (i = 0; i < n; i++) {
        for (j = i; j < n; j++) {
            printf("A[%d][%d] = ", i+1, j+1);
            scanf("%d", &A[i][j]);
            A[j][i] = A[i][j];  // preenche o elemento simétrico
        }
    }

    // Impressão da matriz completa
    printf("\nMatriz simétrica A:\n");
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            printf("%4d", A[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Exercícios relacionados