C 如何编写这个函数

C 如何编写这个函数,c,function,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() { doub

您好,我是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);
}
#包括
#包括
双区(内i、内j、双v[100][2])
{
返回sqrt(pow((v[j][0]-v[i][0]),2)+pow((v[j][1]-v[i][1]),2))
}
main()
{
双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=距离(1,2,v);
printf(“\n%f\n”,d);
printf(“\n%f\n”,e);
}
d=dist(0,1,v)

或距离(1,0,v)

点0和点1之间的距离。。。秩序并不重要

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

d=dist(0,1,v)

或距离(1,0,v)

点0和点1之间的距离。。。秩序并不重要


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

如果你想在不同的类型中使用相同的东西,你可以使用宏(不建议在这种情况下使用宏,因为一个好的编译器会将函数调用内联到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或longdouple返回,您将需要sqrtf或sqrtl

对数学“函数”使用宏的优点是,它们在编译之前会被扩展到代码中,这样常数就可以计算到计算中,有时可以将整个计算简化为更简单的计算,有时甚至是一个常量值


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

如果您希望对不同类型使用相同的内容,您可以使用宏(不建议在这种情况下使用宏,因为体面的编译器会将函数调用内联到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或longdouple返回,您将需要sqrtf或sqrtl

对数学“函数”使用宏的优点是,它们在编译之前会被扩展到代码中,这样常数就可以计算到计算中,有时可以将整个计算简化为更简单的计算,有时甚至是一个常量值


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

您编写的代码有什么问题?请注意,
main
是一个函数,因此您在某种程度上已经知道函数的语法。如果您正在学习C的基本语法,请通过书籍、教程、类等来学习,而不是通过在SO中一点一点地询问。旁注:正确声明
main()
以返回
int
(不要依赖隐式返回decl类型)并正确返回实际值。好的,谢谢大家。您编写的代码有什么问题?请注意,
main
是一个函数,因此您在某种程度上已经知道函数的语法。如果您正在学习C的基本语法,请通过书籍、教程、类等来学习,而不是通过在SO中一点一点地询问。旁注:正确声明
main()
以返回
int
(不要依赖隐式返回decl类型)并正确返回实际值。好的,谢谢大家。这取决于您如何构建程序,您根本不需要构建模块:
gcc-O3-pipe-combine-fwhole program*.c-o myapp
。。。但是大多数复杂的代码在使用-fwhole程序时最初都会失败,除非标题是经过调整的Header通常有一个#ifndef blablabla#define blablabla以避免双重包含,无论如何都要将整个程序编译为一个整体(请参见-lto,您仍然可以编译单独的模块)需要相当多的内存,而且默认情况下不会这样做。@LtWorf我使用-flto的经验是,它并不比使用-ffunction节-fdata节编译和使用-Wl,--gc节链接好多少,但开销要大得多(至少对于死代码删除来说,内联线不太容易检测到)但是-fwhole程序比这两者都好(带有-fwhole程序头的东西通常与包含顺序相关),这取决于您如何构建程序,您根本不需要构建模块:
gcc-O3-pipe-combine-fwhole程序*.c-o myapp
。。。但是大多数复杂的代码在使用-fwhole程序时最初都会失败,除非标题是经过调整的Header通常有一个#ifndef blablabla#define blablabla以避免双重包含,无论如何都要将整个程序编译为一个整体(请参见-lto,您仍然可以编译单独的模块)需要相当多的内存,而且默认情况下不会这样做。@LtWorf我使用-flto的经验是,它并不比使用-ffunction节-fdata节编译和使用-Wl,--gc节链接好多少,但开销要大得多(至少对于死代码删除来说,内联线不太容易检测到)但是-fwhole程序比这两者都好(带有-fwhole程序头的东西通常与包含顺序相关)