给定一个整数N,生成一个N*N的矩阵,矩阵中元素取值为1至N2,1在左上角,
其余各数按顺时针方向旋转前进,依次递增放置。例如,当N=4时,矩阵中的内
容如下:
1 | 2 | 3 | 4 |
12 | 13 | 14 | 5 |
11 | 16 | 15 | 6 |
10 | 9 | 8 | 7 |
#include <stdio.h>
#include <malloc.h>
/*
矩阵赋值
思想是:就是一圈一圈的赋值
*/
void evaluate(int **a, int dimension)
{
int start = 1;
int i = 0;
int j = 0;
int row = 0;
int column = dimension;
do
{
while (j < column)
{
a[i][j] = start++;
j++;
}
j--;
while (i < column-1)
{
i++;
a[i][j] = start++;
}
while (j > row)
{
j--;
a[i][j] = start++;
}
while (i > row+1)
{
i--;
a[i][j] = start++;
}
row++;
column--;
i = row;
j = row;
} while(start <= dimension*dimension);
printf("赋值完成。。。/n");
}
/*打印矩阵*/
void printfMatrix(int **a, int dimension)
{
printf("输出矩阵。。。/n");
for (int i=0; i<dimension; ++i)
{
for (int j=0; j<dimension; ++j)
{
printf("%d ",a[i][j]);
}
printf("/n");
}
}
int main(void)
{
/*输入矩阵的维数*/
printf("输入矩阵的维数:");
int dime = 0;
scanf("%d",&dime);
printf("%d/n",dime);
/*动态分配该矩阵*/
int **matrix;
matrix = (int**)malloc(sizeof(int*) * dime);
for (int i=0; i<dime; ++i)
{
matrix[i] = (int*)malloc(sizeof(int) * dime);
}
/*给动态数组赋值*/
evaluate(matrix,dime);
/*打印数组*/
printfMatrix(matrix,dime);
/*动态释放该矩阵*/
for (int j=0; j<dime; ++j)
{
free(matrix[j]);
}
free(matrix);
return 0;
}