问题遇到的现象和发生背景
C语言编写一个能计算平面上两点间距离的程序。
相关知识
为了完成本关任务,你需要掌握如下知识:
平面上点与点之间的距离
平面上有两点A(a,c)、B(b,d),则两点的距离为 L² = (b-a)² + (d-c)²
EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。 C标准函数库中表示文件结束符。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。 在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0127,不可能出现-1,因此可以用EOF作为文件结束标志。
编程要求
给定平面上的若干个点,设最多不超过10个点,求出各个点之间的距离。每个点用一对整数坐标表示,键盘输入若干对点的坐标,限定坐标在[0,0][10,10]内,输出点与点之间的距离。 点的实现可以用一个结构体来实现,例如: struct point{int x,int y} 注意:如果输入的点数量或点坐标超出了范围,则提示“out of range, try again!”,同时,请注意输出格式。
我的解答思路和尝试过的方法
#include<stdio.h>
#include<stdlib.h>
#define EOF -1
struct point
{
int x,y;
};
int paic(struct point s[],int sum)
{
int i;
if(sum>10)
{
printf("out of range,try again!");
return 0;
}
for(i=0;i<sum;i++)
if(s[i].x>10 || s[i].y>10)
{
printf("out of range,try again!");
return 0;
break;
}
return 1;
}
int main()
{
int i,j,k,sum=0;
double len;
struct point p[12];
while(scanf("%d",&p[i].x)!=EOF&&scanf("%d",&p[i].y)!=EOF)
{
sum++;
}
malloc((strlen(p)+1)*sizeof(struct point));
j= paic(p,sum);
while(j)
for(k=0;k<sum;k++)
{
for(i=0;i<sum;i++)
{
len=sqrt((p[k].x-p[i].x)*(p[k].x-p[i].x)+(p[k].y-p[i].y)* (p[k].y-p[i].y));
if(i)
printf("%.1f",len);
else printf(" %.1f",len);
}
printf("\0");
}
return 0;
}
我想要达到的结果
测试输入:
2 3
1 7
4 6
9 3
预期输出:
0.0 4.1 3.6 7.0
4.1 0.0 3.2 8.9
3.6 3.2 0.0 5.8
7.0 8.9 5.8 0.0
测试输入:
12 2
2 12
预期输出:
out of range, try again!
测试输入:
0 0
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 0
预期输出:
out of range, try again!