【说明】
本程序的功能是生成螺旋方阵,用户可以输入该方阵的行列数,然后就生成对应的螺旋方阵。例如:当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 - [b][temp]==0)
array[b][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][b]);
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][b]=0。
第(4)空很明显是给变量max赋初值,这要求先去弄清楚变量max的作用。由语句while(m<=max)我们可以推断出变量max中存放的是最大的数据项,而一个n阶的方阵中最多有n×n个元素,从程序中可以知道,这是一个ROW阶的方阵,因此,此空答案为ROW*ROW。
第(5)空是调用上面的4个函数,根据螺旋方阵的生成规则,应该是先向下,接着向右,再向上,最后向左,结合程序我们知道此空是调用向右的函数。因此,此空答案为goright。