阅读以下说明及C++程序代码,将应填入(n)处的语句写在对应栏内。 【说明】 本程序的功能是生成螺旋方阵,用户可以输入该方阵的行列数,然后就生成对应的螺旋方阵。例如:当n=5时,对应的螺旋方阵如下: 1 16 15 1

admin2010-01-15  28

问题 阅读以下说明及C++程序代码,将应填入(n)处的语句写在对应栏内。
    【说明】
   本程序的功能是生成螺旋方阵,用户可以输入该方阵的行列数,然后就生成对应的螺旋方阵。例如:当n=5时,对应的螺旋方阵如下:
   1    16    15    14    13
   2    17    24    23    12
   3    18    25    22    11
   4    19    20    21    10
   5     6    7     8      9
   【C++代码】
   #include"stdio.h"
   #include"iostream,h"
   int array[11][11];
   int temp;
   int ROW;
   void godown(int &m,int &a)
   {
       for(temp=1; temp<=ROW;temp++)
           if(array[temp][a]==0)
               array[temp][a]=(1);
       a++;
   }
   void goright(int &m,int &b)
   {
       for(temp=1;temp<=ROW;temp++)
           if(array[temp]==0)
               array[temp]=m++;
       b--;
   }
   void goup(int &m.int &c)
   {
       for(temp=ROW;temp>0;temp-)
           if(array[temp][c]==0)
               array[temp][c]=m++;
       c--;
   }
   void goleft(int &m,int &d)
   {
       for(temp=ROW;temp>0;temp--)
           if(array[d][temp]==0)
               array[d][temp]=m++;
       (2);
   }
   void main()
   {
       int a,b,c,d,max,m;
       cin>>ROW;
       cout>>end1;
       for(a=1;a<=ROW;a++)
           for(b=1;b<=ROW;b++)
             (3);
       m=1;
       a=d=1;
       b=c=ROW;
       max=(4);
       whiie(m<=max)
       {
           godown(m,a);
             (5)  (m,b);
           goup(m,c);
           goleft(m,d):
       }
       for(a=1;a<=ROW;a++)
        {        
           for(b=1;b<=ROW;b++)
               printf("%3d ",array[a]);
           cout<<end1;
       }
   }

选项

答案(1)m++ (2)d++ (3)array[a][b]=0 (4)ROW*ROW (5)goright

解析 本题考查C++中螺旋方阵的实现。
   题目要求在用户输入该方阵的行列数后,自动生成对应的螺旋方阵。首先我们来简单分析一下螺旋方阵的特点,顾名思义,其基本结构是成螺旋形状的,按照螺旋的方向数值逐渐增大,直到最中间的一点结束。程序中分别用4个函数来实现其螺旋方向向下、向右、向上和向左时,数组中相应元素的变化,结合程序可以发现数组的初值是全0。
   第(1)空在螺旋方向向下的实现函数中,当螺旋方向向下时,二维数组中列不变而逐行加1,从程序中可以看出此空所在行的作用就是用来改变数组中元素的值,结合整个程序知道变量m中存放的是当前位置的数值,因此,此空答案为m++。
   第(2)空在螺旋方向向左的实现函数中,当螺旋方向向左时,二维数组中行不变而随列下标temp的变化逐列加1,直到数组元素不为0,这个时候说明已经到了被螺旋线经过的列,因此,要往后退一列即列下标变量d加1,此空答案为d++。
   第(3)空在一个二重循环下面,程序声明了一个二维数组且没有初值,结合程序可以推断出此空的任务就是给数组赋初值。而根据上面的分析,数组的初值应该是全0,因此,此空答案为array[a]=0。
   第(4)空很明显是给变量max赋初值,这要求先去弄清楚变量max的作用。由语句while(m<=max)我们可以推断出变量max中存放的是最大的数据项,而一个n阶的方阵中最多有n×n个元素,从程序中可以知道,这是一个ROW阶的方阵,因此,此空答案为ROW*ROW。
   第(5)空是调用上面的4个函数,根据螺旋方阵的生成规则,应该是先向下,接着向右,再向上,最后向左,结合程序我们知道此空是调用向右的函数。因此,此空答案为goright。
转载请注明原文地址:https://jikaoti.com/ti/KXW7FFFM
0

最新回复(0)