Hola! esos for lo que hacen es dibujar la forma de diamante o rombo, lo que contienen es la lógica para ir introduciendo asteriscos o espacios de manera que se dibuje un diamante o rombo de cierta manera.
Hay dos for, uno dibuja parte superior del diamante y otro la parte inferior, si ejecutas este código ves lo que hace cada for:
#include <stdio.h>
int main() {
int NFILAS = 4;
int NCOLUMNAS = 4;
int n, c, k, space = 1;
//n es el numero de filas del rombo
n = NFILAS;
space = n - 1;
for (k = 1; k <= n; k++) {
for (c = 1; c <= space; c++)
printf(" ");
space--;
for (c = 1; c <= 2*k-1; c++)
if (c%2 ==0) {
printf("*");
} else {
printf(" ");
}
printf("\n");
}
printf("Esto es lo que ha dibujado el primer for\n");
space = 1;
for (k = 1; k <= n - 1; k++) {
for (c = 1; c <= space; c++)
printf(" ");
space++;
for (c = 1 ; c <= 2*(n-k)-1; c++)
if (c%2 ==0) {
printf("*");
} else {
printf(" ");
}
printf("\n");
}
printf("Esto es lo que ha dibujado el segundo for\n");
return 0;
}
Saludos!