#include <stdio.h>
#include <stdlib.h>
#define M 5
int arr[M][M] = { 0 }; //初始化数组全0 ,用0来判断数组是否赋有正确的值
void HuiJu(void); //矩阵赋值函数
void ShowArr(void); //输出矩阵
int main()
{
HuiJu();
ShowArr();
system("pause");
return 0;
}
void ShowArr(void)
{
int i = 0;
int j = 0;
for (i = 0; i < M; i++)
{
for (j = 0; j < M; j++)
{
printf("%d\t", arr[i][j]);
}
printf("\n");
}
}
void HuiJu(void)
{
int i = 0; //数组索引
int j = 0; //数组索引
int direc = 1; //方向控制
int num = 1; //给数组进行赋值的变量
while (num <= M*M)//对矩阵循环赋值
{
switch (direc)
{
case 1: //从左到右
while (arr[i][j] == 0 && j < M) //数组值为0以及索引j没有越界时进行
{
arr[i][j] = num;
num++;
j++; //i不变 j递增
}
j--; //改变索引为下一个变量的索引
i++; //改变索引为下一个变量的索引
direc = 2;//把方向从左到右改变为从上到下
break;
case 2: //从上到下
while (arr[i][j] == 0 && i < M)//数组值为0以及索引i没有越界时进行
{
arr[i][j] = num;
num++;
i++; //j不变 i递增
}
i--; //改变索引为下一个变量的索引
j--; //改变索引为下一个变量的索引
direc = 3;//把方向从上到下改变为从右到左
break;
case 3: //从右到左
while (arr[i][j] == 0 && j >= 0)//数组值为0以及索引j没有越界时进行
{
arr[i][j] = num;
num++;
j--; //i不变 j递减
}
j++; //改变索引为下一个变量的索引
i--; //改变索引为下一个变量的索引
direc = 4;//把方向从右到左改变为从上到上
break;
case 4: //从下到上
while (arr[i][j] == 0) //从下到上只需要判断是否被正确赋值
{
arr[i][j] = num;
i--; //j不变 i递减
num++;
}
i++; //改变索引为下一个变量的索引
j++; //改变索引为下一个变量的索引
direc = 1; //把方向从下到上改变为从左到右
break;
}
}
}
// 1[0][0] 2[0][1] 3[0][2] 4[0][3] 5[0][4]
//16[1][0] 17[1][1] 18[1][2] 19[1][3] 6[1][4]
//15[2][0] 24[2][1] 25[2][2] 20[2][3] 7[2][4]
//14[3][0] 23[3][1] 22[3][2] 21[3][3] 8[3][4]
//13[4][0] 12[4][1] 11[4][2] 10[4][3] 9[4][4]
评论2
最新资源