帮忙逐行解释一下这段代码

#include
void main()
{ int a[100];
int i,j,n,k;

printf("input hang number:");
scanf("%d",&n);
k=0;
while(n--)
{
a[k++]=1;
for(i=k-2;i>=1;i--) a[i]+=a[i-1];

for(i=0;i<n;i++)

printf(" ");
for(i=0;i<k;i++)
printf("%6d",a[i]);
printf("\n");
}
{
printf("finish");
}

}

#include
void main()
{ int a[100]; 定义一个100大小的数组
int i,j,n,k; 定义变量

printf("input hang number:"); 显示
scanf("%d",&n); 输入 n
k=0; 让k=0
while(n--) 循环直到n=0
{
a[k++]=1; a[k] = 1,然后k+1
for(i=k-2;i>=1;i--) a[i]+=a[i-1]; 循环累加

for(i=0;i<n;i++) 循环

printf(" "); 打印一个空白
for(i=0;i<k;i++) 内循环
printf("%6d",a[i]); 输出a[i] ,每个输出6个字节
printf("\n"); 输出换行
}
{
printf("finish");
}

}

 这个程序的作用是打印杨辉三角

                                 1
                             1     1
                          1     2     1
                       1     3     3     1
                    1     4     6     4     1
                 1     5    10    10     5     1
              1     6    15    20    15     6     1
           1     7    21    35    35    21     7     1
        1     8    28    56    70    56    28     8     1
     1     9    36    84   126   126    84    36     9     1
...

        杨辉三角的每项等于它上一行左右两项的和