计算距离但结果是 - 2147483648

时间:2012-03-16 17:56:20

标签: c++ arrays distance

以下是计算距离的代码

// creating array of cities
double x[] = {21.0,12.0,15.0,3.0,7.0,30.0};
double y[] = {17.0,10.0,4.0,2.0,3.0,1.0};

// distance function - C = sqrt of A squared + B squared

4 个答案:

答案 0 :(得分:4)

一个问题是order of operations让你搞砸了(乘法在减法之前完成)

更改

(x[c1] - x[c2] * x[c1] - x[c2]) + (y[c1] - y[c2] * y[c1] - y[c2])

((x[c1] - x[c2]) * (x[c1] - x[c2])) + ((y[c1] - y[c2]) * (y[c1] - y[c2]))

我还建议,为了清楚起见,在不同的行上进行一些计算(显然这是我喜欢的样式选择,我相信有些人不同意)。它应该对编译器没有影响

double deltaX = x[c1] - x[c2];
double deltaY = y[c1] - y[c2];

double distance = sqrt(deltaX * deltaX + deltaY * deltaY);

在我看来,这使得代码更易于维护(并且更容易出错)。请注意,在重写时,操作顺序不需要额外的括号。

答案 1 :(得分:0)

记住运营商优先级:a - b * c - d表示a - (b * c) - d

答案 2 :(得分:0)

你想要吗

(x[c1] - (x[c2] * x[c1]) - x[c2])

((x[c1] - x[c2]) * (x[c1] - x[c2]))

(x[c1] - x[c2] * x[c1] - x[c2])(x[c1] - (x[c2] * x[c1]) - x[c2])类似,因为*的优先级高于-

答案 3 :(得分:0)

我将继续解决几个问题:

 // creating array of cities
double x[] = {21.0,12.0,15.0,3.0,7.0,30.0};
double y[] = {17.0,10.0,4.0,2.0,3.0,1.0};

// distance function - C = sqrt of A squared + B squared

double dist(int c1, int c2) {
   double z = sqrt (
        ((x[c1] - x[c2]) * (x[c1] - x[c2])) + ((y[c1] - y[c2]) * (y[c1] - y[c2])));
   return z;
}  

void main()
{
  int a[] = {1, 2, 3, 4, 5, 6};
  execute(a, 0, sizeof(a)/sizeof(int));


    int  x;

    printf("Type in a number \n");
    scanf("%d", &x);


    int  y;

    printf("Type in a number \n");
    scanf("%d", &y);

 double z = dist (x,y);
 cout << "The result is " << z;
}

这会修复未使用的返回值,并修复操作顺序和int的不正确变量类型。