编写一个测试Point是否在Rectangle中的函数

时间:2015-10-08 11:57:15

标签: c arrays pointers struct floating-point

问题如下:

编写并测试具有以下功能的程序。

首先,定义一个名为Point的新结构类型,用x和y值的浮点数表示

。另外,定义一个名为Rectangle的新结构类型,它具有与x轴和y轴平行的边,允许您使用bottom_left和top_right Points来表示矩形。

接下来编写一个函数,根据传递给函数的Rectangle参数计算并返回Rectangle的区域。

避免按值传递,确保函数显示通过引用行为传递

确保该函数返回适当类型的数据

接下来编写一个测试Point是否在Rectangle中的函数。这个函数应该通过引用接受两个参数,Point和Rectangle来测试。如果该点在矩形内,则该函数必须返回一个整数值,否则它应返回零。编写一个main函数,使用适当的局部变量作为测试数据,然后使用上面的两个函数

 #include <stdio.h>

 struct Point
 {
     float x;
     float y;
 };

 struct Rectangle
 {
     struct Point lb;    // left below point
     struct Point ru;    // right upper point
 };

 float getArea(struct Rectangle r)
 {
     return (r.ru.x - r.lb.x)*(r.ru.y - r.lb.y);
 }

 void setValue(struct Point* p, float x, float y)
 {
     p->x = x;
    p->y = y;
 }

 void setValueP(struct Rectangle* r, struct Point* lb, struct Point* ru)
 {
    r->lb = *lb;
     r->ru = *ru;
 }

 void setValueR(struct Rectangle* r, float x1, float y1, float x2, float y2)
 {
     r->lb.x = x1;
     r->lb.y = y1;
     r->ru.x = x2;
     r->ru.y = y2;
 }

 int contains(struct Rectangle r, struct Point p)
 {
     if((p.x > r.lb.x && p.x && p.x < r.ru.x) && (p.y > r.lb.y && p.y && p.y < r.ru.y))
        return 1;
     return 0;
 }

 int main()
 {
     struct Rectangle r;
    setValueR(&r, 1, 2, 6, 8);

     printf("%f\n", getArea(r));

     struct Point p1;
    setValue(&p1, 4, 5);
     struct Point p2;
     setValue(&p2, 4, 1);

     if(contains(r, p1))
         printf("inside the Rectangle\n");
     else
         printf("outside the Rectangle\n"); 

     if(contains(r, p2))
         printf("inside the Rectangle\n");
     else
         printf("outside the Rectangle\n"); 
 }

2 个答案:

答案 0 :(得分:0)

确保编译c ++,这些错误看起来像用c编译器编译的c ++代码

答案 1 :(得分:0)

  

我需要它作为c编程代码,你能帮帮我吗?

C语言没有'reference'参数,没有'classes',也没有'this'的概念。

需要将代码更改为不使用引用而不使用类,也不要使用“this”。

你可以从改变开始:

struct Point
{
    float x;
    float y;
    Point(float x, float y) : x(x), y(y)
{}
Point()
{}
};

到此:

struct Point
{
    float x;
    float y;
};

然后,在引用'Point'时需要包含'struct'修饰符,因为没有'Point'类但是有一个'Point'结构。

所以改变这个:

struct Rectangle
{
    Point lb;       //  left below point
    Point ru;       //  right upper point
    ...

到此:

struct Rectangle
{
    struct Point lb;       //  left below point
    struct Point ru;       //  right upper point
};

setValue()函数正在使用参数的引用,并使用C ++'this'来指示当前对象:

void setValue(Point& lb, Point& ru)
{
    this->lb = lb;
    this->ru = ru;
}

但是,C没有'this'或'references'。要为C编写它,请使用:

void setValue( struct rectangle *pRect, struct Point *pLB, struct Point *pRU)
{
    pRect->lb.x = pLB->x;
    pRect->lb.y = pLB->y;
    pRect->ru.x = pRU->x;
    pRect->ru.y = pRU->y;
} // end function: setValue

类似的考虑因素与其他发布的代码有关。