#include <stdio.h>
#include <conio.h>
void main()
{
  int i,j,k;
  for(i=1;i<=4;i++) /*画菱形的上面4层*/
  {
    for(j=1;j<=(4-i)+5;j++) printf(" "); /*针对每一行缩紧相应的空格位置*/
    /*就像如下图形*/
    /*
      line 1[i=1,j=1~8]: [][][][][][][][]
      line 2[i=2,j=1~7]: [][][][][][][]
      line 3[i=3,j=1~6]: [][][][][][]
      line 4[i=4,j=1~5]: [][][][][]
    注:[]表示一个空格,这样一来,上面四层每一行输出*的第一个位置确定了。
    */
    for(k=1;k<=(2*i-1)+5;k++) /* 对于每一行输出相应数量的* */
    {
    /*下面我对于k<=(2*i-1)做一个说明*/
    /*
      line 1[i=1,k=6]: [][][][][][][]<><><><><> *
      line 2[i=2,k=8]: [][][][][][][]<><><><><>***
      line 3[i=3,k=10]:[][][][][][]<><><><><> *****
      line 4[i=4,k=12]:[][][][][]<><><><><>  *******
    */
    /*
      其中<>也表示空格,当k<=5时输出空格,说明每一层又要插入5个空格,用于剧中。
      剩下的请看
      k=6时, k-5=1(实际插入*个数1个,一下不作说明)
      k=8时, k-5=3
      k=10时,k-5=5
      k=12时,k-5=7
      这就是四层菱形构造
      (我在注释中插入的空格为了排版需要,实际输出还是以[]和<>个数为准。)
    */
      if(k<=5) printf(" ");
      else printf("*");
    }
    printf("\n");
  }
  for(i=1;i<=3;i++)
  {
    /*输出下面三层菱形,不多说了,原理差不多,自己看看。*/
    for(j=1;j<=i+5;j++) printf(" ");
    for(k=1;k<=(7-2*i)+5;k++)
    {
      if(k<=5) printf(" ");
      else printf("*");
    }
    printf("\n");
  }
  getch();
}
以上是详细说明。。。。