|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
void createMatrix(int n);//声明一个void 类型的函数他包含一个int型参数
void createMatrix(int n)//假设n为3
{
int i, j, oi, oj, num, max;//定义6个int型变量
// 创建一个存放矩阵的二维数组
int matrix[n][n];//int matrix[3][3] n 1 n n n n n n 0
// 填充为0
max = n * n;//max=3*3==9
memset(matrix, 0, max * sizeof(int));//memset(matrix,0,9*sizeof(int)==36)
// 将1存放到第0行的中间位置
matrix[0][n/2] = 1;//matrix[0][1]==1
// 记录当前的行号和列号
i = 0;
j = n / 2;//j=1
for (num = 2; num <= max; num++)//1 num=2 2 num=3 3 num=4 4 num=5 5 num=6 6 num=7 7 num=8
{
// 记住当前位置
oi = i;//1 oi=0 2 oi=1 3 oi=2 4 oi=3 5 oj=4 6 oj=5 7 oj =6
oj = j;//1 oj=1 2 oj=1 3 oj=1 4 oj=1
// 向右上角走一步
i = i - 1;//1 i=-1 2 i=0 3 i=1 4 i=2 5 i=3 6 i=4 7 i=5
j = j + 1;//1 j=2 2 j=2 4 j=2 4 j=2 5 j=2 6 i=2 7 j=2
if (i < 0)
{
i = n - 1;//1 i=2
}
if (j > n - 1)
{
j = 0;
}
if (matrix[i][j] != 0)
{
i = oi + 1;// 1 i=0+1=1 2 i=2 3 i=3 4 i=4 5 i=5 6 i=6 7 i=7
j = oj;//1 j=1 2 j=1 3 j=1 4 j=1 5 j=1 6 j=1 7 j=1
}
matrix[i][j] = num;
}
// 打印结果
for (i = 0; i < n; i++)//1 i=7
{
for (j = 0; j < n; j++)//1 j=1 2 j=2
{
printf("%2d ", matrix[i][j]);//1 matrix[7][1] 2 matrix[7][2]
}
putchar('\n');
}
}
int main(void)
{
int n;
printf("请输入一个奇数:");
scanf("%d", &n);
while (!(n % 2) || n < 3)
{
printf("输入错误,必须是一个大于2的奇数!\n");
printf("请重新输入:");
scanf("%d", &n);
}
createMatrix(n);
return 0;
}
大佬 这个void createMatrix(int n)函数内的定义我看不懂啊。。有没有谁帮忙逐条分析下的 尤其是for循环内的 |
|