主题:请教各位大哥大姐:用结构体数组和它指针做点间距和排排序出问题
#include <stdio.h>
#include <math.h>
struct dd //坐标距离结构体,点坐标为(x,y),输入点与已知点距离为d
{
double x;
double y;
double d;
}dn[5]={{0,0,0},{2,2,0},{-2,2,0},{-2,-2,0},{2,-2,0}};
void main()
{
void distance(struct dd *); //求距离函数声明
void order(struct dd *); //点间距离排序函数声明
void output(struct dd *); //排序结果输出函数声明
while(1)
{
printf("--------计算点(x,y)与点(2,2) (2,-2) (-2,-2) (-2,2)距离、排序------------\n");
printf("坐标形式如: 10 20 ,输入点坐标: ");
scanf("%lf %lf",&dn[0].x,&dn[0].y);
distance(dn); //求点距离
order(dn); //对点距离从小到大排列
output(dn); //对排序后的结果进行输出
}
}
//求距离函数
void distance(struct dd *q)
{
int i;
double dx , dy , dx2 , dy2;
for(i=1;i<5;i++)
{
dx=(q->x)-((q+i)->x);
dy=(q->y)-((q+i)->y);
dx2=dx*dx;
dy2=dy*dy;
(q+i)->d=sqrt(dx2+dy2);
}
}
//点间距离排序函数
void order(struct dd *p)
{
int i;
struct dd middle;
for(i=1;i<=3;i++)
{
if((p+i)->d>(p+i+1)->d)
{
middle=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=*(p+i);
}
}
}
//排序结果进行函数
void output(struct dd *h)
{
int i;
printf("\t***********输入点到下列各点距离***************\n");
for(i=1;i<=4;i++)
printf("\t 到点(%.0lf , %.0lf)的距离为: %.0lf\n",(h+i)->x, (h+i)->y,(h+i)->d);
printf("\n\n");
}
#include <math.h>
struct dd //坐标距离结构体,点坐标为(x,y),输入点与已知点距离为d
{
double x;
double y;
double d;
}dn[5]={{0,0,0},{2,2,0},{-2,2,0},{-2,-2,0},{2,-2,0}};
void main()
{
void distance(struct dd *); //求距离函数声明
void order(struct dd *); //点间距离排序函数声明
void output(struct dd *); //排序结果输出函数声明
while(1)
{
printf("--------计算点(x,y)与点(2,2) (2,-2) (-2,-2) (-2,2)距离、排序------------\n");
printf("坐标形式如: 10 20 ,输入点坐标: ");
scanf("%lf %lf",&dn[0].x,&dn[0].y);
distance(dn); //求点距离
order(dn); //对点距离从小到大排列
output(dn); //对排序后的结果进行输出
}
}
//求距离函数
void distance(struct dd *q)
{
int i;
double dx , dy , dx2 , dy2;
for(i=1;i<5;i++)
{
dx=(q->x)-((q+i)->x);
dy=(q->y)-((q+i)->y);
dx2=dx*dx;
dy2=dy*dy;
(q+i)->d=sqrt(dx2+dy2);
}
}
//点间距离排序函数
void order(struct dd *p)
{
int i;
struct dd middle;
for(i=1;i<=3;i++)
{
if((p+i)->d>(p+i+1)->d)
{
middle=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=*(p+i);
}
}
}
//排序结果进行函数
void output(struct dd *h)
{
int i;
printf("\t***********输入点到下列各点距离***************\n");
for(i=1;i<=4;i++)
printf("\t 到点(%.0lf , %.0lf)的距离为: %.0lf\n",(h+i)->x, (h+i)->y,(h+i)->d);
printf("\n\n");
}