遍历二维数组(从外向内绕圈)

本文介绍了一种遍历二维数组的方法,即从外向内螺旋式遍历,并提供了完整的C语言实现代码。此外,还展示了如何生成随机二维数组并打印其内容。
遍历一个二维数组(从外向内绕圈)
//没有注释,但能很轻松看懂
比如数组
1 2 3
4 5 6
7 8 9
输出结果为1 2 3 6 9 8 7 4 5
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void function(int** a,int m1,int m2,int n1,int n2,int m,int n)
{
int i;
if(m1>m2||n1>n2)
{
return;
}
if(m1==m2)
{
for(i=n1;i<=n2;i++)
{
printf("%d\t",a[m1*n+i]);
}
return;
}
else if(n1==n2)
{
for(i=m1;i<m2;i++)
{
printf("%d\t",a[i*n+n1]);
}
return;
}
else
{
for(i=n1;i<=n2;i++)
{
printf("%d\t",a[m1*n+i]);
}
for(i=m1+1;i<=m2;i++)
{
printf("%d\t",a[i*n+n2]);
}
for(i=n2-1;i>=n1;i--)
{
printf("%d\t",a[m2*n+i]);
}
for(i=m2-1;i>=m1+1;i--)
{
printf("%d\t",a[i*n+n1]);
}
function(a,m1+1,m2-1,n1+1,n2-1,m,n);
}
}
void random_array(int** a,int m,int n)
{
int i,j;
srand(time(0));
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
a[i*n+j]=rand()%100+1;
}
}
}
void print_array(int** a,int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",a[i*n+j]);
}
printf("\n");
}
}
int main()
{
int m,n;
int** a;
printf("Please input m and n:");
scanf("%d%d",&m,&n);
a=(int **)malloc(sizeof(int)*m*n);
random_array(a,m,n);
printf("The array is\n");
print_array(a,m,n);
printf("The array visit is\n");
function(a,0,m-1,0,n-1,m,n);
printf("\n");
free(a);
return 0;
}
现在设计一个涂胶机软件,需要给一个平面圆进行等间距螺旋线涂布作业,给定以下参数的前提下,帮我生成该算法的C语言代码: 1.以tPoint1、tPoint2、tPoint3结构体提供三个点的坐标,结构体内包含浮点型x/y/z坐标,根据这三个不在同一直线的点生成一个圆(三点在同一直线时错误返回),涂布时由tPoint1为起点向tPoint2方向螺旋(假定后续bSequence参数为TRUE情况下)。 2.以整形变量“wIntervalsNum”间隔数量参数确定等间距阿基米德螺旋线的笔数,间隔数量参数等于一条穿过圆心与tPoint1的直线与等间距阿基米德螺旋线的交点数量减1。该参数取值范围2~100。 3.布尔变量“bSequence”涂布顺序参数,bSequence==TRUE时由向内生成阿基米德螺旋线、bSequence==FALSE由内向生成阿基米德螺旋线。 4.浮点型变量“fInsideCircleDiameter”内圆直径参数,该参数用于描述该圆型涂布中,中间部分不需要涂布区域的圆的直径,形成一个圆环涂布。该参数取值范围为0~圆直径(参数值大于圆直径时,返回错误)。当参数值为0时,整圆都涂满;该参数大于0时,则涂布效果是一个圆环,圆环以内的阿基米德螺旋线不需要。内圆与圆之间需要等间距螺旋。 5.布尔变量“bOutsideCircle”参数,该参数为TRUE时,除了生成等间距阿基米德螺旋线以,需要单独再走一遍这个平面圆轨迹。 6.布尔变量“bInsideCircel”参数,当fInnerCircleDiameter大于0进行圆环涂布时,bInsideCircel为TRUE则在圆环的内圆位置走一遍平面圆轨迹。 7.按照弓高误差为0.015打散轨迹生成各个点打印出来。
03-22
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值