例题:编写程序,实现魔方阵。
例图:
1)3-魔方阵
8 | 1 | 6 |
---|---|---|
3 | 5 | 7 |
4 | 9 | 2 |
2)5-魔方阵 | ||
17 | 24 | 1 |
– | – | – |
23 | 5 | 7 |
4 | 6 | 13 |
10 | 12 | 19 |
11 | 18 | 25 |
代码如下:
#include<stdio.h>
#include<stdlib.h>
int array(int n)
{
int i, j, no, num, max;
int *mtrx;
if(n%2 == 0) /*n是偶数,则加1使其变为奇数*/
{
n=n+1;
}
max=n*n;
mtrx=(int *)malloc(max+max); /*为魔方阵分配内存*/
mtrx[n/2]=1; /* 将1存入数组*/
i=0; /*自然数1所在行*/
j=n/2; /*自然数1所在列*/
/*从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) /*当前数在第0行*/
{
i=n-1;
}
if(j>n-1) /*当前数在最后一列,即n-1列*/
{
j=0;
}
no=i*n+j; /*找到当前数在数组中的存放位置*/
mtrx[no]=num;
}
/*打印生成的魔方阵*/
printf("生成的%d-魔方阵为:",n);
no=0;
for(i=0; i<n; i++)
{
printf("\n");
for(j=0; j<n; j++)
{
printf("%3d", mtrx[no]);
no++;
}
}
printf("\n");
free(mtrx);
return 0;
}
int main()
{
int n;
printf("请输入n值:\n");
scanf("%d", &n);
array(n); /*调用array函数*/
return 0;
}
输出运行窗口如下:
本周其他练习
C语言编程>第六周 ① 编写一个录入函数:用来从键盘接收n个整型数并存放在一个整型数组中。 在主函数中调用该函数计算出这n个整数之和。
C语言编程>第六周 ⑥ 输入一串字符,统计大大写字母的个数,并强调统计必须用函数。
C语言编程>第六周 ⑦ 编写一个程序用于创建一格结构BOOK,用来储存书的信息:书名,作者姓名,页数和价格,接受输入和输出 。
越努力越幸运!
加油,奥力给!!!