#include<stdio.h> #include<assert.h> void MagicSquare() { #define ROW 5//魔方阵行数 int arr[ROW][ROW]={0};//必须初始化为0 int preROW;//前一个数据存放的行 int preCol;//前一个数据存放的列 int i; int j; assert(ROW%2!=0);//魔方阵必须为奇数 arr[0][ROW/2]=1;//1总是放在第一行中间 preROW=0; preCol=ROW/2; for(i=2;i<=ROW*ROW;i++)//填充魔方阵 { if(arr[(preROW+ROW-1)%ROW][(preCol+1)%ROW]!=0)//正常位置已被占用 { preROW=(preROW+ROW+1)%ROW; } } else { preROW=(preROW+ROW-1)%ROW;//第1行的前1行为第ROW行 preCol=(preCol+1)%ROW;//第1行的前1行为第ROW列 } arr[preROW][preCol]=i; } for(i=0;i<ROW;i++) { for(j=0;j<ROW;j++) { printf("%-4d",arr[i][j]); } printf("\n"); } #undef ROW//解除ROW的宏定义 } int main() { MagicSquare(); return 0; } 运行结果如图