现在的位置: 首页 > 10 结构体 > 正文

结构体的声明和使用(两点之间的距离)

2013年11月17日 10 结构体 ⁄ 共 1054字 ⁄ 字号 结构体的声明和使用(两点之间的距离)已关闭评论

自定义数据类型之结构体

浮点数:两点之间的距离

求两点之间的距离,结果保留两位小数。点的坐标都是双精度浮点数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <math.h>
 
typedef struct point {
    double x;
    double y;
} Point;
 
int main(int argc, char *argv[])
{
    Point p1, p2;
    double distance;
    scanf("%lf%lf%lf%lf", &p1.x, &p1.y, &p2.x, &p2.y);
    distance = sqrt((p1.x-p2.x)*(p1.x-p2.x)+
                (p1.y-p2.y)*(p1.y-p2.y));
    printf("%.3lf\n", distance);
    return 0;
}

从上面的这段代码中,你需要注意:第一个point是小写,第二个point是首字母大写。这是很好的习惯。(《C程序设计语言 第二版新版》第127页 the last line)

第一个小写的point也是可以省略的,Point的定义如下:

1
2
3
4
typedef struct {
    double x;
    double y;
} Point;

typedef 的作用是 struct point = Point,所以下面的写法也是可以的。

1
2
3
4
5
6
7
8
9
10
int main(int argc, char *argv[])
{
    struct point p1, p2;
    double distance;
    scanf("%lf%lf%lf%lf", &p1.x, &p1.y, &p2.x, &p2.y);
    distance = sqrt((p1.x-p2.x)*(p1.x-p2.x)+
                (p1.y-p2.y)*(p1.y-p2.y));
    printf("%.3lf\n", dist);
    return 0;
}

可以把计算距离的代码单独列出来作为函数,这样可以使得主程序更容易理解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <math.h>
 
typedef struct point {
    double x;
    double y;
} Point;
 
double distance(Point p1, Point p2)
{
    return sqrt((p1.x-p2.x)*(p1.x-p2.x)+
                (p1.y-p2.y)*(p1.y-p2.y));
}
 
int main(int argc, char *argv[])
{
    Point p1, p2;
    scanf("%lf%lf%lf%lf", &p1.x, &p1.y, &p2.x, &p2.y);
    printf("%.3lf\n", distance(p1, p2));
    return 0;
}

自定义的类型也是可以作为函数返回值类型的。例如,求两个点连线的中点。

抱歉!评论已关闭.