请教各位大哥大姐:用结构体数组和它指针做点间距和排排序出问题
程序代码:
#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"); }