Objetivo: leitura e saída tabular com alinhamento.
Descrição: leia uma matriz 3 \times 3 de inteiros e imprima no formato de matriz, com colunas alinhadas.
Critérios:
  • for duplo para ler; for duplo para imprimir.
  • Usar largura fixa no printf (ex.: %4d).
Extensão: imprimir também a matriz transposta.

Passo 1

O que o enunciado pede:
  • Ler uma matriz de inteiros de dimensão 3\times3.
  • Imprimir essa matriz no formato de matriz, com colunas alinhadas usando largura fixa no printf (por exemplo "%4d").
  • Imprimir também a matriz transposta.
    Informações dadas (resumo):
  • Dimensão fixa: 3\times3.
  • Deve usar dois laços for aninhados para ler e dois laços for aninhados para imprimir (critério obrigatório).
  • Deve usar largura fixa no printf, exemplo indicado: "%4d".

Passo 2

Estrutura de armazenamento e índices (o pensamento por trás do código).
  • Vamos guardar os inteiros em um vetor bidimensional int a[3][3];. Cada posição a[i][j] representa a linha i e a coluna j.
  • Em C, convencionamos índices iniciando em 0. Então as linhas e colunas variam i=0,1,2 e j=0,1,2.
  • Para ler todos os elementos usaremos dois for aninhados:
    • laço externo percorre as linhas i,
    • laço interno percorre as colunas j.
  • A leitura usa scanf("%d", &a[i][j]);. Aqui "%d" diz que lemos um inteiro e &a[i][j] passa o endereço onde armazenar esse inteiro.

Passo 3

Como o alinhamento funciona: o printf com largura fixa.
  • O especificador "%4d" no printf significa: reservar exatamente 4 caracteres para imprimir um inteiro decimal; o valor fica alinhado à direita dentro desses 4 espaços.
  • Exemplos simples (explicação visual):
    • Se imprimir \,7 com "%4d" o resultado será três espaços e o 7: " 7".
    • Se imprimir \,42 com "%4d" o resultado será dois espaços e 42: " 42".
    • Se imprimir \,1234 com "%4d" o resultado será "1234".
  • Isso cria colunas visualmente alinhadas quando cada elemento é impresso com o mesmo "%4d" e sem separador extra (ou com um separador fixo).

Passo 4

Como imprimir a matriz original e a transposta usando for duplos.
  • Para imprimir a matriz original: iteramos i nas linhas e j nas colunas, e para cada elemento fazemos printf("%4d", a[i][j]);. Ao terminar a linha (fim do laço interno) imprimimos printf("\n");.
  • Para imprimir a matriz transposta: lembramos que a transposta troca linhas por colunas. Ou seja, o elemento da transposta na posição (i,j) é o elemento original em (j,i). Logo, para imprimir a transposta fazemos printf("%4d", a[j][i]); dentro do mesmo esquema de dois laços (laço externo em i, laço interno em j). Repare que não criamos uma nova matriz transposta em memória; só mudamos a ordem de acesso — isso é suficiente para imprimir a transposta.
  • Observação prática para prova: escrever for (i = 0; i < 3; i++) e for (j = 0; j < 3; j++) é exatamente o que o enunciado pede (dois for duplos).

Passo 5

Exemplo de execução rápida (mental) para fixar.
  • Suponha que a entrada (linha a linha) seja: 1\\\ 23\\\ 456\\\ 7\\\ 0\\\ -5\\\ 99\\\ 8\\\ 10 (nove inteiros).
  • A matriz lida (original), impressa com "%4d", fica visualmente assim:
    (cada número ocupa 4 caracteres)
    1ª linha: " 1 23 456"
    2ª linha: " 7 0 -5"
    3ª linha: " 99 8 10"
  • A transposta será obtida lendo as colunas como linhas:
    1ª linha da transposta = primeira coluna original: 1,\;7,\;99" 1 7 99"
    etc.
  • Esse exercício mental mostra por que "%4d" alinha as colunas mesmo quando os inteiros têm diferentes números de dígitos.

Resposta

#include <stdio.h>

int main(void) {
    int a[3][3];
    int i, j;

    /* Leitura da matriz 3x3 */
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            if (scanf("%d", &a[i][j]) != 1) return 0; /* leitura simples e segura */
        }
    }

    /* Impressão da matriz lida com colunas alinhadas usando largura fixa %4d */
    printf("Matriz lida:\n");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            printf("%4d", a[i][j]);
        }
        printf("\n");
    }

    /* Impressão da transposta (sem criar nova matriz): acessa a[j][i] */
    printf("Transposta:\n");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            printf("%4d", a[j][i]);
        }
        printf("\n");
    }

    return 0;
}

Exercícios relacionados