给定实数 x 和 y。我们需要判断一个坐标为(x; y)的点是否属于阴影区域

Real numbers x and y are given. We need to determine whether or not a point with coordinates (x; y) belong to the shaded area

给出了实数 x 和 y。我们需要判断一个坐标为(x; y)的点是否属于阴影区域。(仅使用C语言编程)

我是 C 编程的初学者。我不知道如何解决这个问题。但是非常想学习这个。请给我解释一下。

好吧,让我们看看我的数学是否没让我失望 要定义这样的东西,方程式应该是这样的:

  • 1
  • Y<3/4X+1, 0<=X<=4
  • Y<4/3X+1, -4<=X<=0
  • Y<3X+1, -5<=X<=-4
  • Y<1/3X+1, 4<=X<=5

这是一堆方程式,基本上用它来设置面积,如果和 else() 我们可以使用一些数学知识,如果你像一年前那样问我这个问题,我仍然会记住 analitics class 不幸的是,那已经过去了,但我还有最后一张卡片,那就是 wolfram alpha 我提出了它粘贴以下的方程式(除了 1

(Y<3/4X+1, 0<=X<=4) and(Y<4/3X+1, -4<=X<=0) and (Y< 3X+1, -5<=X<=-4) 和 (Y<1/3X+1, 4<=X<=5)

不幸的是,它输出了同样的结果,所以我们现在要进入代码,我们只需要创建一个函数,明天我会尝试找到更好的“公式压缩” 另外,由于您是新手,我将不得不解释一些事情||是合乎逻辑的,而 && 是合乎逻辑的,这与数学有关我选择了 double 而不是 float 因为问题主要是数学问题所以我选择了一些精度尽管输入是 int 因为我懒惰我已经回答了如何在 保护 scanf 免受错误的输入请求 因此,如果您需要全面完善此代码并阅读上面的用户证明 在 C 中,true 是任何不为零的数字,这意味着 while(1) 或 while(133) 会产生无限循环,因为它们始终为真 scanf 中的 %d 是格式修饰符,基本上告诉 C “我正在等待一个整数”

int IsItInside(double x, double y){
    if (y>3 || y<1 ){// i dont need to "range" this since the its always like this
        return 0; 
    }
    
    if (y<(((3*x)/4)+1)&& x>=0 && x<=4){
        return 1; 
    }
    if (y<((4/(3*x))+1) && x>=-4 && x<=0){
        return 1; 
    }
    if (y<((3*x)+1) && x>=-5 && x<=-4){
        return 1;
    }
    if (y<((1/3*x)+1) && x>=4 &&  x<=5){
        return 1;
    }
    return 0;
}
int main(int argc, char const *argv[]){
    int x=0, y=0;
    
    printf("Enter x: ");
    scanf ("%d", &x); 
    
    printf("Enter y: ");
    scanf ("%d", &y);
    if(IsItInside(x,y)){
        printf("It is inside");
    }else{
        printf("It is outside");
    }
    
    return 0;
}