【例题1】编程题,给定平面10个点的坐标X和坐标Y,输出这点与点之间的最小距离。
【解题思路】
我们可以将这些坐标点存放到一个二维数组里面去,比如 第一个 坐标的x和y分别为points[0][0]和points[0][1]
然后我们在将前面2个坐标点的距离设置为最小距离通过循环去一次与剩下的点作比较,代码里面有详细解释如下。
【代码展示】
#include<stdio.h>
#include<math.h>
#define N 10
//求两点之间的距离
double distance(double x1, double y1, double x2, double y2) {
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main() {
double points[N][N];
for(int i=0; i<N; i++) {
printf("第%d个点的横纵坐标",(i+1));
scanf("%lf %lf",&points[i][0],&points[i][1]);
}
int p1 = 0; //p1记录起点,假设起点就是二维数组的第一组元素
int p2 = 1; //p2记录终点,假设终点就是二维数组的第二组元素
double minDistance = distance(points[p1][0], points[p1][1], points[p2][0], points[p2][1]);
for(int i=0; i<N; i++) {
for(int j=i+1; j<N; j++) {
double dist = distance(points[i][0], points[i][1], points[j][0], points[j][1]);
//如果dis的值小于minDistance的值,则更新p1和p2的位置
if(dist < minDistance) {
minDistance = dist;
p1 = i;
p2 = j;
}
}
}
printf("平面内最短距离的两点是:(%.2lf,%.2lf)和(%.2lf,%.2lf)\n",points[p1][0],points[p1][1], points[p2][0], points[p2][1]);
printf("平面内最短距离是:%.2lf",minDistance);
}
【运行结果】