|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
//函数声明
void array();
int main()
{
array(); //调用函数
system ("pause");
return 0;
}
//函数定义
void array()
{
int n;
int i,j,idx,num,MAX;
int* M; //定义一个一维数组指针,按行优先存储矩阵中的元素
printf("请输入n:");
input:
scanf("%d",&n);
if (n % 2 == 0) // n是偶数,则重新输入
{
printf("n不为奇数,请重新输入:");
goto input;
}
MAX = n*n; //幻方中的最大值,也是元素个数
M = (int*)malloc(sizeof(int)*MAX); //分配存储空间
M[n / 2] = 1; //获取数值为1的列表
i = 0;
j = n / 2;
//从2开始确定每个数的存放位置
for(num = 2;num <= MAX; num++)
{
i = i - 1;
j = j + 1;
if((num - 1) % n == 0) //当前数是n 的倍数
{
i = i + 2;
j = j - 1;
}
if(i < 0) // 当前数在第零行
{
i = n - 1;
}
if(j > n - 1) //当前数在最后一列,即n - 1列
{
j = 0;
}
idx = i*n + j; //根据二维数组下标与元素的对应关系
//找到当前在数组中的存放位置
M[idx] = num;
}
//打印生成幻方
printf("生成的%d阶幻方:",n);
idx = 0;
for(i = 0;i < n;i++)
{
printf("\n"); //每n个数据为一行
for(j = 0;j <n;j++)
{
printf("%3d",M[idx]);
idx++;
}
}
printf("\n");
free(M);
}
这个代码里没有定义一维数组只定义了一个指针m,指针m也没有指向数组为什么后面指针m不仅能存储值还能把值给打印出来呢?
数组就是一段内存空间,只不过为了好理解才弄成数组的形式
所以M = (int*)malloc(sizeof(int)*MAX);M 就可以用数组形式使用
M[i]等价于*(M+i)
|
|