Objetivo: leitura e saída tabular com alinhamento.
Descrição: leia uma matriz
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.
Descrição: leia uma matriz
Critérios:
Passo 1
O que o enunciado pede:
- Ler uma matriz de inteiros de dimensão
. - 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:
. - Deve usar dois laços
foraninhados para ler e dois laçosforaninhados 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çãoa[i][j]representa a linhae a coluna . - Em C, convencionamos índices iniciando em
. Então as linhas e colunas variam e . - Para ler todos os elementos usaremos dois
foraninhados:- laço externo percorre as linhas
, - laço interno percorre as colunas
.
- laço externo percorre as linhas
- 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"noprintfsignifica: 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
com "%4d"o resultado será três espaços e o7:" 7". - Se imprimir
com "%4d"o resultado será dois espaços e42:" 42". - Se imprimir
com "%4d"o resultado será"1234".
- Se imprimir
- 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
inas linhas ejnas colunas, e para cada elemento fazemosprintf("%4d", a[i][j]);. Ao terminar a linha (fim do laço interno) imprimimosprintf("\n");. - Para imprimir a matriz transposta: lembramos que a transposta troca linhas por colunas. Ou seja, o elemento da transposta na posição
é o elemento original em . Logo, para imprimir a transposta fazemos printf("%4d", a[j][i]);dentro do mesmo esquema de dois laços (laço externo em, laço interno em ). 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++)efor (j = 0; j < 3; j++)é exatamente o que o enunciado pede (doisforduplos).
Passo 5
Exemplo de execução rápida (mental) para fixar.
- Suponha que a entrada (linha a linha) seja:
(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"
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;
}