如何判断坐标点所在的象限?
判断象限
任意输入一个点的X坐标和Y坐标,判断它属于哪个象限并输出。
#include <stdio.h>
int main()
{
float x, y;
printf("请输入点的X坐标: \n");
scanf("%f", &x);
printf("请输入点的Y坐标: \n");
scanf("%f", &y);
if (x > 0 && y > 0)
{
printf("该点位于第一象限\n");
} else if (x < 0 && y > 0)
{
printf("该点位于第二象限\n");
} else if (x < 0 && y < 0)
{
printf("该点位于第三象限\n");
} else if (x > 0 && y < 0)
{
printf("该点位于第四象限\n");
} else if (x == 0 && y == 0)
{
printf("该点位于原点\n");
} else if (x == 0)
{
printf("该点位于Y轴上\n");
} else if (y == 0)
{
printf("该点位于X轴上\n");
}
return 0;
}
这段代码实现了一个经典的数学功能:根据输入的平面坐标 (x, y),判断该点在笛卡尔坐标系中的具体位置
它不仅判断四个象限,还非常严谨地处理了边界情况(即点在坐标轴上或原点的情况)。
📜 代码整体结构
引入头文件:
#include <stdio.h>,用于输入输出。变量定义:使用
float类型定义x和y,支持小数坐标。输入环节:分别提示并读取用户的横纵坐标。
逻辑判断:使用
if-else if阶梯结构,覆盖所有可能的位置情况。输出结果:打印对应的象限或轴位置。
🧐 逐行详细解析
1. 变量与输入
float x, y;:这里使用了float(浮点型)而不是int。这是一个很好的设计,因为坐标系中的点往往包含小数(例如1.5, -2.3)。scanf("%f", &x);:读取用户输入的浮点数。注意这里必须用%f,如果误用%d会导致数据读取错误。
2. 核心逻辑判断(象限部分)
代码的前四个判断对应数学中的四个象限,逻辑非常清晰:
第一象限:
if (x > 0 && y > 0)含义:横坐标和纵坐标同时大于0。
位置:右上角区域。
第二象限:
else if (x < 0 && y > 0)含义:横坐标小于0(左),纵坐标大于0(上)。
位置:左上角区域。
第三象限:
else if (x < 0 && y < 0)含义:横坐标和纵坐标同时小于0。
位置:左下角区域。
第四象限:
else if (x > 0 && y < 0)含义:横坐标大于0(右),纵坐标小于0(下)。
位置:右下角区域。
注意:这里使用了
&&(逻辑与)运算符,表示两个条件必须同时满足。
3. 核心逻辑判断(边界部分)
这部分是这段代码的亮点,它没有像简易版程序那样用一个笼统的else来结束,而是细致地处理了坐标轴的情况:
原点:
else if (x == 0 && y == 0)只有当 x 和 y都为 0 时,点才在原点 (0,0)。
Y轴:
else if (x == 0)程序运行到这里,说明前面的条件(x>0, x<0, x==0且y==0)都不满足。
此时如果
x == 0,那么y一定不等于 0(因为如果 y 也是 0,会被上一句捕获)。所以,只要 x 是 0 且 y 不是 0,点就在 Y 轴上。
X轴:
else if (y == 0)同理,运行到这里说明 x 不为 0。
此时如果
y == 0,点就在 X 轴上。
💡 逻辑严密性分析
这段代码的逻辑覆盖非常完整,我们可以把它看作一个状态表:
| X 的状态 | Y 的状态 | 代码匹配分支 | 结果 |
|---|---|---|---|
| > 0 | > 0 | if (x > 0 && y > 0) | 第一象限 |
| < 0 | > 0 | else if (x < 0 && y > 0) | 第二象限 |
| < 0 | < 0 | else if (x < 0 && y < 0) | 第三象限 |
| > 0 | < 0 | else if (x > 0 && y < 0) | 第四象限 |
| = 0 | = 0 | else if (x == 0 && y == 0) | 原点 |
| = 0 | ≠ 0 | else if (x == 0) | Y 轴上 |
| ≠ 0 | = 0 | else if (y == 0) | X 轴上 |
