请用C语言设计以下内容:描述坐标点结构体Point,有成员x, y。现平面上两个点分别为(x1, y1) (x2, y2) ,请利用结构体计算输出曼哈顿距离和直线距离:
时间: 2024-02-12 16:04:24 浏览: 142
以下是C语言代码实现:
```c
#include <stdio.h>
#include <math.h>
// 定义坐标点结构体
typedef struct {
int x;
int y;
} Point;
// 计算曼哈顿距离
int manhattan_distance(Point p1, Point p2) {
return abs(p1.x - p2.x) + abs(p1.y - p2.y);
}
// 计算直线距离
float line_distance(Point p1, Point p2) {
return sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2));
}
int main() {
// 初始化两个点的坐标
Point p1 = {1, 2};
Point p2 = {4, 6};
// 计算曼哈顿距离并输出
int manhattan = manhattan_distance(p1, p2);
printf("曼哈顿距离为:%d\n", manhattan);
// 计算直线距离并输出
float line = line_distance(p1, p2);
printf("直线距离为:%f\n", line);
return 0;
}
```
运行结果:
```
曼哈顿距离为:7
直线距离为:5.000000
```
相关问题
用c语言写一个程序:描述坐标点结构体Point,有成员x, y。现平面上两个点分别为(x1, y1) (x2, y2) ,请利用结构体计算输出曼哈顿距离和直线距离: 曼哈顿距离 :MHTDistance(struct Point pt1,struct Point pt2 )的描述为: |x1 - x2 | + | y1 -y2| 直线距离:TrueDistance(struct Point pt1,struct Point pt2 )的描述略
好的,以下是您所需的程序:
```c
#include <stdio.h>
#include <math.h>
struct Point {
int x;
int y;
};
int MHTDistance(struct Point pt1, struct Point pt2) {
int dx = abs(pt1.x - pt2.x);
int dy = abs(pt1.y - pt2.y);
return dx + dy;
}
double TrueDistance(struct Point pt1, struct Point pt2) {
int dx = pt1.x - pt2.x;
int dy = pt1.y - pt2.y;
return sqrt(dx*dx + dy*dy);
}
int main() {
struct Point pt1 = {1, 2};
struct Point pt2 = {4, 6};
printf("Manhattan distance: %d\n", MHTDistance(pt1, pt2));
printf("True distance: %f\n", TrueDistance(pt1, pt2));
return 0;
}
```
程序中定义了一个结构体 `Point`,包含了 `x` 和 `y` 两个成员变量,表示一个点的坐标。然后定义了两个函数 `MHTDistance` 和 `TrueDistance`,分别用来计算曼哈顿距离和直线距离。在 `main` 函数中,定义了两个点 `pt1` 和 `pt2`,并输出它们的曼哈顿距离和直线距离。
请用c语言描述坐标点结构体Point,有成员x, y。现平面上两个点分别为(x1, y1) (x2, y2) ,请利用结构体计算输出曼哈顿距离和直线距离:
好的,这里是 C 语言描述坐标点结构体 `Point`,该结构体包含 `x` 和 `y` 两个成员:
```c
struct Point {
int x;
int y;
};
```
接下来,我们可以通过两个 `Point` 结构体变量分别表示平面上的两个点,并计算它们之间的曼哈顿距离和直线距离。曼哈顿距离指的是两点在平面上横纵坐标差的绝对值之和,直线距离指的是两点之间的欧几里得距离。
下面是一个示例代码,其中 `ManhattanDistance` 和 `EuclideanDistance` 分别计算曼哈顿距离和直线距离:
```c
#include <stdio.h>
#include <math.h>
struct Point {
int x;
int y;
};
int ManhattanDistance(struct Point p1, struct Point p2) {
return abs(p1.x - p2.x) + abs(p1.y - p2.y);
}
double EuclideanDistance(struct Point p1, struct Point p2) {
return sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2));
}
int main() {
struct Point p1 = {1, 2};
struct Point p2 = {3, 4};
printf("点1:(%d, %d)\n", p1.x, p1.y);
printf("点2:(%d, %d)\n", p2.x, p2.y);
int manhattanDist = ManhattanDistance(p1, p2);
double euclideanDist = EuclideanDistance(p1, p2);
printf("曼哈顿距离:%d\n", manhattanDist);
printf("直线距离:%f\n", euclideanDist);
return 0;
}
```
输出结果为:
```
点1:(1, 2)
点2:(3, 4)
曼哈顿距离:4
直线距离:2.828427
```
希望这个示例代码能够帮助你理解如何使用结构体计算坐标点之间的距离。
阅读全文