Ecco il codice commentato.
int interspazio,prespazio,lato,i;
printf("inserisci il lato del rombo");
fflush(stdout);
scanf("%d",&lato);
// disegna la parte superiore del rombo
//
// *
// * *
// * *
// i indica la linea che stai stampando (era meglio chiamarlo 'linea' invece di 'i')
for(i = 0; i < lato; i++)
{
// se il lato del rombo è lungo 3 all' inizio metti 2 spazi (lato-1) e poi un asterisco,
// nelle righe successive il numero di spazi cala di uno ogni linea
for(prespazio = lato-i; prespazio >= 0; prespazio--)
printf(" ");
printf("*"); // dopo il prespazio mette un asterisco
if(i > 0) // gli interspazi ci sono solo dopo il primo elemento (che è un solo asterisco)
{
// gli interspazi seguono questa progressione (1, 3, 5, 7) ovvero 1+(i-1)*2
for(interspazio = 1+(i-1)*2; interspazio > 0; interspazio--)
printf(" ");
printf("*"); // dopo gli interspazi mette il secondo asterisco
}
printf("\n"); // fine linea, scrive un a capo
}
// disegna la parte inferiore del rombo
//
// * *
// * *
// *
// a questo punto hai capito il trucco e non servono altri commenti
for(i = lato-1; i > 0 ; i--)
{
for(prespazio = 0; prespazio <= (lato-i)+1; prespazio++)
printf(" ");
printf("*");
if(i > 1)
{
for(interspazio=0; interspazio < ((i-1)*2)-1 ; interspazio++)
printf(" ");
printf("*");
}
printf("\n");
}
fflush(stdout);
}
Dovrebbe essere tutto chiaro.