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

#include <stdio.h> int main() { int x1, x2, y1, y2, a, b, distance; scanf("%d %d %d %d", &x1, &y1, &x2, &y2); a = x1 - x2; b = y1 - y2; distance = sqrt( a * a + b * b); printf("%d\n", distance); return 0; }
这段代码试图计算两个点 (x1,y1) 和 (x2,y2) 之间的欧几里得距离,并输出结果。但存在几个问题。

- 变量 `distance` 是 `int` 类型,但距离通常不是整数,使用 `int` 会丢失小数部分。
- `sqrt` 函数需要包含 `<math.h>` 头文件,并且它返回 `double` 类型,直接赋值给 `int` 会截断小数。
- 输入顺序是 `x1, y1, x2, y2`,但代码中 `scanf` 的格式字符串与变量顺序一致,这点没问题。

- 考虑将 `distance` 声明为 `double` 类型,并包含 `<math.h>` 头文件。
- 注意 `sqrt` 的参数是 `double` 类型,`a*a + b*b` 是 `int` 运算,可以强制转换或使用浮点数乘法。