69,371
社区成员
发帖
与我相关
我的任务
分享
/*
说明:
以下程序中若有点数据重复输入,则对数据未作剔除!
比如有2个点重复输入了,则对该2点仍作为2点处理
计算长度的时候计算2次
比如(1,1)(2,2)(1,1)
那计算出来的就是2.82
若对输入的数据还能进行剔除的话,这个功能楼主可以自己添加!
其他程序都作了比较好的保护和处理!
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <setjmp.h>
typedef struct
{
float x;
float y;
}DOT;
double Distance(DOT *p, int n)
{
int i, j;
double sum = 0;
for(i = 0; i<n-1; i++)
{
for(j = i+1; j<n; j++)
{
sum += sqrt(pow(p[i].x-p[j].x, 2.0) + pow(p[i].y-p[j].y, 2.0));
}
}
return sum;
}
int main()
{
int n, i;
DOT *dot;
double sum;
jmp_buf buf;
setjmp(buf);
printf("Input the number of the points: ");
scanf("%d", &n);
if(n > 0)
{
dot = (DOT *)malloc(n*sizeof(DOT));
if(dot == NULL)
{
printf("Memory malloc error!");
return 0;
}
for(i = 0; i<n; i++)
{
printf("point %d\tx:", i);
scanf("%f", &dot[i].x);
printf("point %d\ty:", i);
scanf("%f", &dot[i].y);
}
sum = Distance(dot, n);
printf("\nThe Result of all the distance is:%lf", sum);
}
else
{
printf("Input error!Tyr again\n");
longjmp(buf, 1);
}
getchar();
return 0;
}