一段C语言程序纠错....急

来源:百度知道 编辑:UC知道 时间:2024/09/22 20:25:56
#include <stdio.h>
main()
{
int a[16][16],i,j,k,p,n;
p=1;
while (p==1)
{
printf("enter n(n=1 to 15):");
scanf("%d",&n);
if ((n!=0)&&(n<=15)&&(n%2!=0))
p=0;
}

/*初始化*/

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;

/*建立魔方阵*/

j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
if ((i<1)&&(j>n))
{
i=i+2;
j=j-1;
}
else
{
if (i<1) i=n;
if (j>n) j=1;
}

if (a[i][j]==0)
a[i][j]=k;
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
}
这是向输出一个魔方阵
就是每行每列对角线和都相等
、但是程序不能用啊 。。。。

用我这个吧,你那个错的比较离谱了,数组的设定和初始值的设定都不对

#include<conio.h>
#include<stdio.h>

#include <stdio.h>
#define MAXSIZE 15
int magic[MAXSIZE][MAXSIZE];
int cur_i=0,cur_j=0;
main()
{
int count,size=0,i,j;
while((size%2)==0)
{
printf("\nenter ODD number:");
scanf("%d",&size);
}
cur_j=(size-1)/2;
for(count=1;count<=size*size;count++)
{
magic[cur_i][cur_j]=count;
if((count%size)==0)
{
cur_i+=1;
continue;
}
cur_i=cur_i-1;
cur_j=cur_j+1;
if(cur_i<0)
cur_i+=size;
else if(cur_j==size)
cur_j-=size;
}
for(i=0;i<size;i++)
{
printf("\n");
for(j=0;j<size;j++)
printf("%5d",magic[i][j]);
}

getch();
}