Ejercicio 01 — Lee una matriz MxN (max 10x10) e imprimela con formato alineado

Dificultad: verde · Módulo 06 (Matrices (arrays 2D))

Enunciado

Lee una matriz MxN (max 10x10) e imprimela con formato alineado.

Diagrama de flujo

Diagrama de flujo del ejercicio 01

Cómo se resuelve

Este es el “hola mundo” de las matrices: leer una cuadrícula de números y volver a imprimirla ordenada. Una matriz es un array de dos índices: el primero elige la fila y el segundo la columna, así que m[i][j] es la casilla de la fila i, columna j.

  1. Reservamos siempre el tamaño máximo con int m[MAX][MAX] (una cuadrícula de 10×10), pero luego solo usamos las filas × cols que pida el usuario. En C el tamaño de un array se fija al declararlo, así que reservas de sobra y trabajas con una esquina.
  2. Para recorrer toda la cuadrícula se usa el patrón clave del módulo, el doble bucle: el for exterior avanza por las filas (i) y, dentro, otro for recorre las columnas (j). Con eso lees cada celda con scanf("%d", &m[i][j]) — ojo al &, obligatorio porque scanf necesita la dirección de la casilla.
  3. Al imprimir, printf("%4d", ...) reserva un ancho de 4 caracteres por número para que las columnas queden alineadas.

La trampa típica está en dónde va el salto de línea. El "\n" no va dentro del bucle de columnas, sino justo después, en el cuerpo del bucle de filas: primero se pinta la fila entera y solo entonces se baja de línea.

for (int i = 0; i < filas; i++) {
    for (int j = 0; j < cols; j++)
        printf("%4d", m[i][j]);
    printf("\n");   // salto AL TERMINAR cada fila, no en cada número
}

Para practicar — cópialo en Dev-C++

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

/*
 * Curso de C — Modulo 06: Matrices (arrays 2D)
 * Ejercicio 01 — PRACTICA (rellena los TODO)
 * Enunciado: Lee una matriz MxN (max 10x10) e imprimela con formato alineado.
 * Dificultad: verde
 * Compilar: gcc -std=c11 -Wall ej01_practica.c -o ej01 && ./ej01
 */
 
#include <stdio.h>
 
#define MAX 10
 
int main(void) {
    int m[MAX][MAX];
    int filas, cols;
 
    // TODO 1: pedir al usuario el numero de filas y columnas con scanf
    //         (recuerda: scanf necesita & delante de la variable)
 
    // TODO 2: con un doble bucle for (i = filas, j = cols),
    //         leer cada elemento m[i][j] con scanf
 
    // TODO 3: con otro doble bucle, imprimir la matriz:
    //         - usa printf("%4d", m[i][j]) para alinear
    //         - al terminar cada fila (bucle exterior), imprime "\n"
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 06: Matrices (arrays 2D)
 * Ejercicio 01 — MODELO (resuelto)
 * Enunciado: Lee una matriz MxN (max 10x10) e imprimela con formato alineado.
 * Dificultad: verde
 * Compilar: gcc -std=c11 -Wall ej01_modelo.c -o ej01 && ./ej01
 */
 
#include <stdio.h>
 
#define MAX 10
 
int main(void) {
    int m[MAX][MAX];
    int filas, cols;
 
    // Leer dimensiones
    printf("Numero de filas (1-%d): ", MAX);
    scanf("%d", &filas);
    printf("Numero de columnas (1-%d): ", MAX);
    scanf("%d", &cols);
 
    // Leer matriz elemento a elemento
    printf("Introduce los %d valores fila a fila:\n", filas * cols);
    for (int i = 0; i < filas; i++)
        for (int j = 0; j < cols; j++)
            scanf("%d", &m[i][j]);
 
    // Imprimir la matriz con campo de 4 caracteres para alinear
    printf("\nMatriz %dx%d:\n", filas, cols);
    for (int i = 0; i < filas; i++) {
        for (int j = 0; j < cols; j++)
            printf("%4d", m[i][j]);
        printf("\n");   // nueva fila
    }
 
    return 0;
}

Cómo usarlo

Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.

Conexiones