Ejercicio 06 — Lee una matriz cuadrada NxN (max 8) y calcula la suma de la diagonal…

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

Enunciado

Lee una matriz cuadrada NxN (max 8) y calcula la suma de la diagonal principal.

Diagrama de flujo

Diagrama de flujo del ejercicio 06

Cómo se resuelve

La diagonal principal de una matriz cuadrada son las celdas donde la fila y la columna coinciden: m[0][0], m[1][1], m[2][2], etc. Es decir, todas las posiciones donde i == j. Esa observación es la clave del ejercicio y también su mayor economía.

Aunque leemos e imprimimos la matriz con el doble bucle de siempre, para sumar la diagonal no hace falta doble bucle. Como solo nos interesan las celdas con i == j, basta un único for que recorra la diagonal directamente:

int diag = 0;
for (int i = 0; i < n; i++)
    diag += m[i][i];   // i vale a la vez de fila y de columna

Ese m[i][i] es el detalle bonito: al usar la misma variable para los dos índices, saltas de una casilla diagonal a la siguiente sin visitar el resto.

La trampa típica es usar un doble bucle con un if (i == j) dentro. Funciona y da el resultado correcto, pero recorre las n × n celdas para quedarse solo con n: haces mucho más trabajo del necesario. El bucle simple m[i][i] es la forma directa. Ojo también: la diagonal principal solo tiene sentido en matrices cuadradas, por eso el enunciado pide una N×N y solo se lee una dimensión.

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 06 — PRACTICA (rellena los TODO)
 * Enunciado: Lee una matriz cuadrada NxN (max 8) y calcula la suma de la diagonal principal.
 * Dificultad: amarillo
 * Compilar: gcc -std=c11 -Wall ej06_practica.c -o ej06 && ./ej06
 */
 
#include <stdio.h>
 
#define MAX 8
 
int main(void) {
    int m[MAX][MAX];
    int n;
 
    // TODO 1: leer la dimension n (entre 1 y MAX) con scanf
 
    // TODO 2: leer la matriz nxn con doble bucle
 
    // TODO 3: imprimir la matriz (opcional pero util para verificar)
 
    // TODO 4: calcular la suma de la diagonal principal
    //         Pista: la diagonal son los elementos donde i == j
    //         Un solo bucle for (i de 0 a n) sumando m[i][i] es suficiente
    //         Recuerda inicializar int diag = 0
 
    // TODO 5: imprimir el resultado
 
    return 0;
}

Solución — cópiala y ejecútala

/*
 * Curso de C — Modulo 06: Matrices (arrays 2D)
 * Ejercicio 06 — MODELO (resuelto)
 * Enunciado: Lee una matriz cuadrada NxN (max 8) y calcula la suma de la diagonal principal.
 * Dificultad: amarillo
 * Compilar: gcc -std=c11 -Wall ej06_modelo.c -o ej06 && ./ej06
 */
 
#include <stdio.h>
 
#define MAX 8
 
int main(void) {
    int m[MAX][MAX];
    int n;
 
    // Leer dimension
    printf("Dimension de la matriz cuadrada (1-%d): ", MAX);
    scanf("%d", &n);
 
    // Leer la matriz
    printf("Introduce los %d valores fila a fila:\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");
    }
 
    // Sumar diagonal: solo donde i == j
    int diag = 0;
    for (int i = 0; i < n; i++)
        diag += m[i][i];   // m[0][0], m[1][1], m[2][2], ...
 
    printf("\nSuma diagonal: %d\n", diag);
 
    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