问题 问答题

[说明] 以下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[i][j]=m--; i--; j--; (1) for (j;j>=y1;j--) a[i][j]=m--; j++; i--; y1++; (2) }else{ for (i;i>=x1;i--) a[i][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[i][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)矩阵右边界递减。

单项选择题
单项选择题