1

嗨,我是 C 编程的新手,我只是想用函数调用替换我的部分代码,但我不知道如何正确地做到这一点,请帮忙。

我只希望这条线d = ...等同于这条线e = ...

#include <stdio.h>
#include <math.h>

double dist(int i, int j, double v[100][2])
{
    return sqrt( pow((v[j][0] - v[i][0]),2) +  pow((v[j][1] - v[i][1]), 2) )
}

main()
{
    double v[100][2], d, e;

    v[1][0] = 0;
    v[1][1] = 1;

    v[2][0] = 1;
    v[2][1] = 1;

    d = sqrt( pow((v[1][0] - v[2][0]),2) +  pow((v[1][1] - v[2][1]), 2) );

    e = dist(1,2,v);

    printf("\n%f\n",d);
    printf("\n%f\n",e);
}
4

3 回答 3

10
double dist(int i, int j, double (*v)[2])
{
    return sqrt( pow((v[j][0] - v[i][0]),2) +  pow((v[j][1] - v[i][1]), 2) ); 
}
于 2013-04-28T22:34:01.560 回答
0

d = dist(0,1,v)

或 dist(1,0,v)

点 0 和点 1 之间的距离......顺序无关紧要。

编辑:根据要求,我上面有一个函数 CALL。d= 等价于 e= ... 编写另一个函数是相当浪费代码,更重要的是,不是实现函数的用途。我坚持我的答案。

于 2013-04-28T22:38:12.520 回答
0

如果您想为不同的类型使用相同的东西,您可以使用宏(不推荐用于这种情况,因为体面的编译器会将函数调用内联到 Cato 的函数)但仅用于教育目的

#define dist(i,j,v) sqrt(pow((v[j][0]-v[i][0]),2)+pow((v[j][1]-v[i][1]),2))

请记住,sqrt 返回一个 double,所以如果你想要 float 或 long double 返回,你需要 sqrtf 或 sqrtl。

将宏用于数学“函数”的优点是它们在编译之前被扩展到代码中,以便可以将常量评估到计算中,并且有时可以将整个计算简化为更简单的计算,有时甚至是一个常量值.

Mike 在数学属性上是正确的,尽管精度可能会导致 2 个值略有不同(通常这种差异是不需要的)。

于 2013-04-29T02:41:45.580 回答