阅读以下说明和C程序,回答问题。[说明] 下面的程序用Dole Rob算法生成N阶(N为奇数)魔方阵(各行、列

21 查阅

阅读以下说明和C程序,回答问题。

[说明]

下面的程序用Dole Rob算法生成N阶(N为奇数)魔方阵(各行、列、对角线数字之和相等)。该算法的过程为:从1开始,按如下方法依次插入各自然数,直到N2为止。

①在第一行的正中插入1。

②新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个位置。

③若最近插入的元素是N的整数倍,则选同列的下一行位置为新位置。

例如,3阶魔方阵如下所示:

8 1 6

3 5 7

4 9 2

[C程序]

include<stdio.h>

include<stdlib.h>

define SIZE 50

main( )

{

int row, col, n, value;

int a[SIZE+1][SIZE+1]; /*不使用下标为0的元素*/

printf("请输入要输出魔方阵的阶数n(奇数, <%d):n=", SIZE);

scanf("%d", &n);

if(!(n%2) || n<1 || (1) ){

printf("输入数据有误!\n");

exit(0);

}

row=1; col=(n+1)/2; value=1;

while(value<= (2) ) {

a[row][col]=value;

/*计算下一位置*/

if(value%n!=0){

row--; (3) ;

if(row<1)row=n;

if(col>n) (4) ;

}

else row++;

value= (5) ;

}

printf("\n%d阶魔方阵如下所示:\n\n", n);

for(row=1; row<=n; row++){

for(col=1; col<=n; col++)

printf("%5d", a[row][col]);

printf("\n");

}

}

参考答案:

n>SIZE或其等价表示n*ncol++或++col或col=col+1或其等价表示col-=n或col=1或其等价表示value+1或其等价表示n>SIZE,或其等价表示n*ncol++,或++col,或col=col+1,或其等价表示col-=n,或col=1,或其等价表示value+1,或其等价表示 解析:程序中空(1)处判断n的合法性,n需为奇数,矩阵规模应不超过SIZE2。所以(1)处应为n>SIZE,或其等价表示。将数值填入方阵的语句为“a[row][col]=value;”,该语句在循环中,

软考初级