/*矩阵式螺旋输出*/
#include <stdio.h>
#include <malloc.h>
/*
填充数组:从数组的最外围开始,先向下填充一列,
再向右填充一行,再向上填充一列,最后向左填充
一行,注意向上向左填充时的约束条件
*/
void fillArray(int m,int n,int **array)
{
int start_row = 0,start_column = 0;
int end_row = m-1,end_column = n-1;
int num = 1;
int i,j;
while(start_row <= end_row && start_column <= end_column)
{
for(i=start_row,j=start_column;i<=end_row;i++)
{
array[i][j] = num++;
}
for(i--,j++;j<=end_column;j++)
{
array[i][j] = num++;
}
for(j--,i--;(i>=start_row && j>start_column);i--)
{
array[i][j] = num++;
}
for(i++,j--;(j>start_column && i<end_row);j--)
{
array[i][j] = num++;
}
start_row += 1;start_column += 1;
end_row -= 1;end_column -= 1;
}
}
//输出数组
void outputArray(int m,int n,int **array)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%-4d ",array[i][j]);
}
printf("/n");
}
}
int main()
{
int **array;//二维数组元素的头指针
int m,n;//m为数组元素的行数,n为数组元素的列数
int i;
printf("输入数组的行数与列数(中间以空格相隔):");
scanf("%d%d",&m,&n);
//根据数据的行数与列数申请相应的数据存储空间
array = (int **)malloc(sizeof(int *) * m);
for(i=0;i<m;i++)
{
array[i] = (int *)malloc(sizeof(int) * n);
}
fillArray(m,n,array);
outputArray(m,n,array);
free(array);
return 0;
}