阅读下列函数说明和C代码,填入(n)处。 [说明] 以下C语言程序实现了生成从里到外是连续的自然数排列的回旋矩阵,矩阵形式如下: 7 6 5 16 8 1 4 15 9 2 3

admin2009-02-15  33

问题 阅读下列函数说明和C代码,填入(n)处。
   [说明]
   以下C语言程序实现了生成从里到外是连续的自然数排列的回旋矩阵,矩阵形式如下:
   7    6    5    16
   8    1    4    15
   9    2    3    14
   10    11    12    13
   程序的变量说明如下:
       x1:矩阵上边界;
       x2:矩阵下边界;
       y1:矩阵左边界;
       y2:矩阵右边界;
       s:数组元素升降标记,s等于1为升,s等于-1为降;
       a[]:存放矩阵元素的数组。
   仔细阅读C语言程序源码,将(n)处的语句补充完整。(注:每处仅一个语句)
   [C程序]
   #include<stdio.h>
   void main ( )
   {
     const int N=20;
     int i=0,j=0,a[N][N],n;
     int m,x1,x2,y1,y2,s;
     while (1)
     {
       Printf ("\ninput matrix row N( N>=2): ");
       scanf ("%d",&n);
       printf ("\n");
       if (n>=2)
       break;
     }
     m=n*n;
     x1=0; y1=0; x2=n; y2=n;
     if(n%2==0)
   {j=n-1; y2=n-1; s=1;}
     else
   {i=n-1; y1=1; s=-1; }
     while (1)
     {
         if (s==1)
         {
         for (i; i<x2; i++)    a[j]=m--;
     i--;
     j--;
       (1)  
         for (j;j>=y1;j--)   a[j]=m--;
     j++;
     i--;
     y1++;
       (2)  
         }
         else
         {
          for (i;i>=x1;i--)
          a[j]=m--;
          i++;
          j++;
           (3)  
          for (j;j<y2;j++)
           (4)  
           (5)  
          i++;
           (6)  
          S=i;
         }
     if (m<1)   break;
     }
     for (i=O;i<n; i++)
     {
       for (j=O;j<n;j++)
       printf ("%6d",a[j]);
       printf ("\n");
     }
       printf ("\n");
   }

选项

答案(1)x2--; (2)s=-1; (3)x1++; (4)a[i][j]=m--; (5)j--; (6)y2--;

解析 自然数排列的回旋矩阵是一个经典程序设计题目。本题中生成的是一个从里到外是连续的自然数排列的回旋矩阵。仔细阅读代码,能够发现(1)处应该为矩阵下边界递减;(2)处应该为数组元素递减状态,即为降;(3)处应该为矩阵上边界递增;(4)处应该为存放矩阵元素的数组中的数据递减;(5)处应该为数组元素的列序号递减,即j--;(6)矩阵右边界递减。
转载请注明原文地址:https://jikaoti.com/ti/Q2i7FFFM
0

相关试题推荐
最新回复(0)