怎么写这个功能C.

时间:2013-04-28 22:31:40

标签: c function

您好我是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);
}

3 个答案:

答案 0 :(得分: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) ); 
}

答案 1 :(得分:0)

d = dist(0,1,v)

或dist(1,0,v)

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

编辑:我上面提到的是一个功能CALL,如要求的那样。 d =相当于e = ...写另一个函数是相当浪费代码,更重要的是,没有实现函数的用途。我坚持自己的回答。

答案 2 :(得分: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 return,你需要sqrtf或sqrtl。

将宏用于数学&#34;函数的优点&#34;是在编译之前将它们扩展到代码中,这样可以将常量计算到计算中,并且有时可以将整个计算减少到更简单的计算,有时甚至是常数值。

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