#include<stdio.h>
#define N 20
main()
{
int a[N][N]={0};
int t,j,k,l,m,n,i;
printf("请输入矩阵的大小:\n");
scanf("%d",&t);l=t;
for(j=0;j<t;j++)
//
输出t行
{
m=j+1;n=j;
//定义两个变量m和n。
for(k=0;k<l;k++)
//每行输出l个数,结合后面的l--,每行比上一行少一个数
{
if(k>0)
//从第二列开始每个数是这一行前一列数字加上m。
a[j][k]=a[j][k-1]+m;
// 因为你这程序所描述的矩阵实际上是从左到右按45°向上依次递增。所以第一层循环中的m=j+1,实现了
else if(j>0) a[j][k]=a[j-1][k]+n;
//a[j][k-1]向右上方数到第一行,就是a[j][k-1]所在的行数,结合下面的m++,m就是a[j][k]所在的(前面的
else
a[j][k]=1;
//列数(k)+所在的行数(j+1))。
m++;
//else
if(j>0) a[j][k]=a[j-1][k]+n; 这句话从第二行开始每一行的第一个数都是上一行的第一个数+他所在行
printf("%4d",a[j][k]);
//数-1就是+j
}
//else
a[j][k]=1;表示第一行第一列a[0][0]=1
l--;
//l--,实现每一行比上一行少输出一个数
printf("\n");
//每输出一行换行
}
}