2915658109 发表于 2020-11-3 18:27:09

大佬快来救命啊~

void createMatrix(int n);//声明一个void 类型的函数他包含一个int型参数

void createMatrix(int n)//假设n为3
{
      int i, j, oi, oj, num, max;//定义6个int型变量

      // 创建一个存放矩阵的二维数组
      int matrix;//int matrix   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 = 1;//matrix==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=22 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 != 0)
                {
                        i = oi + 1;// 1 i=0+1=12 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 = 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);//1 matrix2 matrix
                }
                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循环内的

2915658109 发表于 2020-11-3 18:56:53

。。。。。。。嗯~ o(* ̄▽ ̄*)o? 人呐

2915658109 发表于 2020-11-3 19:07:32

注释不重要 那只是我自己琢磨时候写的 直接看代码就是

gy1768532 发表于 2020-11-3 19:10:57

啥题目啊,发出来看一下

2915658109 发表于 2020-11-3 20:24:03

欸嘿嘿搞定了

2915658109 发表于 2020-11-3 20:24:33

假设n=3
0 0 00 1 0
0 0 00 0 0
0 0 00 0 0
i=0
j=1
1次循环 Num=2
oi=i=0
0j=j=1
i=i-1=-1
j=j+1=2
if(i<0) 执行                备注if 1
{i=n-1==3-1=2}
if(j>n-1) 不执行         备注if 2
{j=0}
if(matrix!=0)不执行备注if 3
{i=oi+1; j=oj;}
matrix=2
0 1 0
0 0 0
0 0 2
二次 num=3
oi=i=2
oj=j=2
i=i-1=1
j=j+1=3
if1不执行 i=1
if2执行 j=0
if3不执行
matrix=3
0 1 0
3 0 0
0 0 2
三次 num=4
oi=i=1
oj=j=0
i=i-1=0
j=j+1=1
if1不执行 i=0
if2不执行 j=1
if3执行 i=oi+1==1+1=2;j=oj=0;
matrix=4
0 1 0
3 0 0
4 0 2
四次 num=5
2
0
1
1
不 i=1
不 j=1

matrix=5
0 1 0
3 5 0
4 0 2
5次 num=6
1
1
0
2
不 i=0
不 j=2

matrix=6
0 1 6
3 5 0
4 0 2
6次 num=7
0
2
-1
3
是 i=2
是 j=0
是 i=1;j=2
matrix=7
0 1 6
3 5 7
4 0 2
7次循环 num=8
1
2
0
3
不 i=0
是 j=0

matrix=8
8 1 6
3 5 7
4 0 2
9次循环 num=9
0
0
-1
1
是 i=2
不 j=1

matirx=9
8 1 6
3 5 7
4 9 2
页: [1]
查看完整版本: 大佬快来救命啊~