您好我是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);
}
答案 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个值略有不同(通常这种差异是不需要的)。