Онлайн компилятор C

#include <stdio.h> #include <math.h> int main() { int x1, y1, x2, y2, a, b; float distance; scanf("%d %d %d %d", &x1, &y1, &x2, &y2); a = x1 - x2; b = y1 - y2; distance = sqrt( a * a + b * b); printf("%.2f", distance); return 0; }
这段代码的功能是:读取两个点的坐标(x1,y1)和(x2,y2),计算它们之间的欧几里得距离,并保留两位小数输出。

代码整体逻辑正确,但有一个潜在问题需要注意:

- 变量 `a` 和 `b` 被声明为 `int` 类型,而 `x1 - x2` 和 `y1 - y2` 的结果也是整数。当计算 `a * a + b * b` 时,如果差值较大,整数乘法可能溢出,导致结果错误。例如,坐标差值超过46340时,平方和会超出 `int` 的表示范围。

- 建议将 `a` 和 `b` 改为 `float` 或 `double` 类型,或者直接在 `sqrt` 的参数中使用 `(x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2)` 并确保结果为浮点数。