魔方阵,又叫幻方,在我国古代称为"纵横图".由1…N2共N2个自然数构成每行、每列及两对角线上各数

6 查阅

阅读以下说明和C语言程序,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

魔方阵,又叫幻方,在我国古代称为"纵横图".由1…N2共N2个自然数构成每行、每列及两对角线上各数之和都相等的N×N方阵,这样的方阵就叫做N阶魔方阵。顾名思义,奇阶魔方阵就是N为奇数的幻方。

奇数阶魔方阵的生成方法如下:

(1)第一个位置在第一行正中。

(2)新位置应当处于最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。

(3)若最近一个插入元素为N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数据n,然后打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。例如,当n=3时,魔方阵为:

816

357

492

了解其生成方法后,就可以根据此方法来写出程序了。首先设置int变量i,j,m,n.其中i标记魔方阵的行;j标记魔方阵的列;n表示魔方阵的维数,通过输入得到;通过m递加得到插入的数据。数组a[MAX][MAX]用于存放魔方阵元素。这里预定义了MAX的大小,没有采用动态分配,在此设置为15,即最大求得15×15阶魔方阵。

【程序】

#include

#defineMAX15

voidmain()

{

intn;

intm=1;

inti,j;

inta[MAX][MAX];

printf("Pleaseinputtherankofmatrix:");

scanf("%d",&n);

i=0;

(1)

while((2))

{

a[i][j]=m;

m++;

i--;

j++;

if((m-1)%n==0&&m>1)

{

(3)

j=j-1;

}

if(i<0)//超出上界

(4)

if(j>(n-1))//超出右边界

(5)

}

for(i=0;i

for(j=0;j

{

if(a[i][j]/10==0)

printf("%d",a[i][j]);//对程序无影响,只是使输出的数每一列对齐

else

printf("%d",a[i][j]);

if(j==(n-1))

printf("\n");

}

}

参考答案:

(1)j=(n+1)/2-1;(2)m<=n*n(3)i=i+2;(4)i=i+n;(5)j=j-n;解析:本题考查我们对魔方阵的理解及用C语言的实现。题目给出了魔方阵的原理和生成过程,现在要我们往15×15的二维数组中添加元素,使其呈现魔方阵的结构。程序中的变量i和j确定增加的元素在数组中的位置,每次增加的元素在原来的基础上加1,只是位置按魔方阵的原理存放。下面来看代码,在第(1)空处,还没有进入增加元素的循环中,应该是赋初值阶段,而用来确定元素在数组中位置的变量i已有值,j没有,再根据魔方

软考初级