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

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 columnaEse 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.