C++语言程序设计

| 例6-10

#define MAX 15
#include <stdio.h>
void main(void)
{
int m,mm,i,j,k,ni,nj;
int magic[MAX][MAX];
printf("Enter the number you wanted\n");
scanf("%d",&m);
for(i = 0;i < m;i ++) //初始化
for(j = 0;j < m;j ++)
magic[i][j] = 0;
if((m > 0)&&(m % 2 != 0))//奇数阶
{
mm = m * m;
i = 0;//第一个值的位置
j = m / 2;
for(k = 1;k <= mm;k ++)
{
magic[i][j] = k;
//求右上方方格的坐标
if(i == 0)//最上一行
ni = m - 1;//下一个位置在最下一行
else
ni = i - 1;
if(j == m - 1)//最右端
nj = 0;//下一个位置在最左端
else
nj = j + 1;
//判断右上方方格是否已有数
if(magic[ni][nj] == 0)//右上方无值
{
i = ni;
j = nj;
}
else //右上方方格已填上数
i ++;
}
for(i = 0;i < m;i ++)
{
for(j = 0;j < m;j ++)
printf("%4d",magic[i][j]);
printf("\n");
}
}
else //m<=0或m_是偶数
printf("Error in input data.\n");
}

以输入值5为例，程序的运行结果为：
Enter the number you wanted
5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9