#ifndef XUNHUAN_H
#define XUNHUAN_H
#include <stdio.h>
#include <stdlib.h>
#define N 40//定义数组的最大容量
void XunhuanCreate(int n,int a[N][N]);//采用循环的方法创建
void DiguiCreate(int n,int a[N][N]);//采用递归的方法创建
void DiguiCreate2(int n,int a[N][N]);//采用递归的方法创建
void Print(int n,int a[N][N]);//遍历并输出
#endif // XUNHUAN_H
#include "HE.h"
void XunhuanCreate(int n,int a[N][N])//通过循环的方式建立螺旋数组
{
int i,j,k;
k=1;
for(i=0; i<n/2; i++)//将函数分为一个大循环和四个小循环,由n来确定循环的次数
{
for(j=i; j<n-i-1; j++)
{
a[i][j]=k++;
}
for(j=i; j<n-i-1; j++)
{
a[j][n-i-1]=k++;
}
for(j=n-i-1; j>i; j--)
{
a[n-i-1][j]=k++;
}
for(j=n-i-1; j>i; j--)
{
a[j][i]=k++;
}
}
if(n%2==1)//循环分为模块进行,当n为奇数是,需要独立为最中心元素赋值
a[n/2][n/2]=k;//因为为Int型,所以自动取整
}
void DiguiCreate(int n,int a[N][N])//通过递归的方法建立螺旋数组
{
static int i=0;//为了防止每次递归都被初始化,所以使用static
static int k=1;
static int j;
for(j=i; j<n-i-1; j++)
{
a[i][j]=k++;
}
for(j=i; j<n-i-1; j++)
{
a[j][n-i-1]=k++;
}
for(j=n-i-1; j>i; j--)
{
a[n-i-1][j]=k++;
}
for(j=n-i-1; j>i; j--)
{
a[j][i]=k++;
}
if(i<n/2)//递归结束的条件
{
i++;
DiguiCreate(n,a);
}
}
void DiguiCreate2(int n,int a[N][N])//因为递归时函数都要访问,而只需要一次中心的赋值,所以分开完成
{
int i,j,k=n*n;
if(n%2==1)
a[n/2][n/2]=k;
}
void Print(int n,int a[N][N])//数组的输出
{
int i,j;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
#include "HE.h"
int main()
{
int n,select=1;
int a[N][N];
printf("******************************\n");
printf("*请输入下列指定数字进行操作 *\n");
printf("*[0] 退出程序 *\n");
printf("*[1] 采用循环方式建立螺旋数组*\n");
printf("*[2] 采用递归方法建立螺旋数组*\n");
printf("*[3] 输出螺旋数组 *\n");
printf("******************************\n");
while(select)
{
printf("请选择:>>");
scanf("%d",&select);
if(select==0)
break;
switch(select)//通过select的值来实现不同的操作
{
case 1:
printf("请输入所要创建螺旋数组的阶数\n");
scanf("%d",&n);
if(n>30)
{
printf("螺旋数组可以建立,但无法在屏幕上完整打印,请重新输入\n");
scanf("%d",&n);
}
XunhuanCreate(n,a);
break;
case 2:
printf("请输入所要创建螺旋数组的阶数\n");
scanf("%d",&n);
if(n>30)
{
printf("螺旋数组可以建立,但无法在屏幕上完整打印,请重新输入\n");
scanf("%d",&n);
}
DiguiCreate(n,a);
DiguiCreate2(n,a);
break;
case 3:
Print(n,a);
break;
default:
printf("输出指令有误,请重新输入\n");
break;
}
}
return 0;
}
写的最完整,最认真的代码