问答题 【说明】 本程序的功能是生成螺旋方阵,用户可以输入该方阵的行列数,然后就生成对应的螺旋方阵。例如:当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]={{U}} (1) {{/U}}; 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++; {{U}}(2) {{/U}}; } 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++) {{U}} (3) {{/U}}; m=1; a=d=1; b=c=ROW; max={{U}} (4) {{/U}}; whiie(m<=max) { godown(m,a); {{U}} (5) {{/U}}(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。