Ejercicio 02 — Dada una matriz 3x3, imprime la suma de cada fila y cada columna

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

Enunciado

Dada una matriz 3x3, imprime la suma de cada fila y cada columna.

Diagrama de flujo

Diagrama de flujo del ejercicio 02

Cómo se resuelve

Aquí no solo recorremos la matriz: la reducimos a totales. Sumamos cada fila por un lado y cada columna por otro. La idea central es que el mismo doble bucle sirve para las dos cosas cambiando solo cuál índice va por fuera.

  • Suma por filas: el bucle exterior recorre las filas (i) y el interior las columnas (j). Antes de entrar en cada fila declaras int suma = 0, sumas todos sus elementos y la imprimes. Como sumas a lo largo de una fila fija, dejas i quieta y mueves j.
  • Suma por columnas: es el mismo esquema pero con los bucles al revés: el exterior recorre columnas (j) y el interior filas (i), sumando m[i][j] con j fija. Ese intercambio de quién manda es lo que cambia “recorrer por filas” por “recorrer por columnas”.

Hay dos trampas clásicas, ambas sobre la variable acumuladora suma:

  1. Reiniciarla en el sitio correcto. El int suma = 0 va dentro del bucle exterior, para que se ponga a cero al empezar cada fila (o columna). Si la declaras fuera, arrastras el total de la fila anterior y todo se suma junto.
  2. Inicializarla. Un int suma; sin = 0 empieza con un valor basura de la memoria, y el resultado sale sin sentido. Siempre int suma = 0;.

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 02 — PRACTICA (rellena los TODO)
 * Enunciado: Dada una matriz 3x3, imprime la suma de cada fila y cada columna.
 * Dificultad: verde
 * Compilar: gcc -std=c11 -Wall ej02_practica.c -o ej02 && ./ej02
 */
 
#include <stdio.h>
 
#define N 3
 
int main(void) {
    int m[N][N];
 
    // TODO 1: leer la matriz 3x3 con doble bucle y scanf
 
    // TODO 2: imprimir la matriz con formato
 
    // TODO 3: suma por FILAS
    //   - bucle exterior recorre i (filas)
    //   - inicializa int suma = 0 dentro de ese bucle (se resetea cada fila)
    //   - bucle interior suma m[i][j]
    //   - imprime la suma de esa fila
 
    // TODO 4: suma por COLUMNAS
    //   - igual que antes pero el bucle exterior recorre j (columnas)
    //   - el interior recorre i (filas)
    //   - imprime la suma de cada columna
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 06: Matrices (arrays 2D)
 * Ejercicio 02 — MODELO (resuelto)
 * Enunciado: Dada una matriz 3x3, imprime la suma de cada fila y cada columna.
 * Dificultad: verde
 * Compilar: gcc -std=c11 -Wall ej02_modelo.c -o ej02 && ./ej02
 */
 
#include <stdio.h>
 
#define N 3
 
int main(void) {
    int m[N][N];
 
    // Leer la matriz
    printf("Introduce la matriz %dx%d:\n", N, N);
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            scanf("%d", &m[i][j]);
 
    // Imprimir la matriz
    printf("\nMatriz:\n");
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++)
            printf("%4d", m[i][j]);
        printf("\n");
    }
 
    // Suma por filas: bucle exterior = fila
    printf("\nSumas por fila:");
    for (int i = 0; i < N; i++) {
        int suma = 0;           // reiniciar por cada fila
        for (int j = 0; j < N; j++)
            suma += m[i][j];
        printf("  %d", suma);
    }
    printf("\n");
 
    // Suma por columnas: bucle exterior = columna
    printf("Sumas por columna:");
    for (int j = 0; j < N; j++) {
        int suma = 0;           // reiniciar por cada columna
        for (int i = 0; i < N; i++)
            suma += m[i][j];
        printf("  %d", suma);
    }
    printf("\n");
 
    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