C语言的螺旋数组
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用C语言的螺旋数组
--输出螺旋数组所谓螺旋数组,就是指向像 1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
这样的数组,这是一个五阶的螺旋数组,那么怎样用c语言来实现螺旋数组的输出呢?
一.算法分析:
以3阶为例:
1 2 3
8 9 4
7 6 5
转化成数组就是:
a00 a01 a02
a10 a11 a12
a20 a21 a22
看一下规律:
1. a00 a01 a02 →
2. a12 a22 ↓
3. a21 a20 ←
4. a10 ↑
5. a11 →
第1步是(→)写的,就是一个循环写完
第2步是(↓)写的,列号(2)是跟第1步的最后一个数a02的列号相同
第3步是(←)写的,行号(2)是跟第2步的最后一个数a22的行号相同
第4步是(↑)写的,列号(0)是跟第3步的最后一个数a20的列号相同
到此一个大循环结束。
从第5步开始,就重复以上循环
二.算法设计:
对于1、2阶的矩阵,大循环1次
对于3、4阶的矩阵,大循环2次
……
所以n、n+1阶矩阵,大循环的次数应该是( n + 1 )/2
也可以这样理解:
第1个子循环:就像普通的循环就可以了
第2个子循环:记下最后的列号,行号依次加1
第3个子循环,记下最后的行号,列号依次减1
第4个子循环,记下最的的列号,行号依次减1
三.程序实现
程序代码为:
#include <stdio.h>
//宏定义,定义螺旋矩阵的阶数,要想改变数组的阶数,只需在改变N的值即可
#define N 5
main()
{
int n,i,j,m=1;
int a[N][N]={0};//定义螺旋数组,并初始化
//螺旋数组的实现
for(n=0;n<=N/2;n++)
{
for(j=n;j<N-n;j++)
a[n][j]=m++;
for(i=n+1;i<N-n;i++)
a[i][N-n-1]=m++;
for(j=N-n-2;j>=n;j--)
a[N-n-1][j]=m++;
for(i=N-n-2;i>n;i--)
a[i][n]=m++;
}
//输出螺旋数组
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
运行的结果为:。