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

異なるタイプで同じことが必要な場合は、マクロを使用できます(まともなコンパイラは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 に答える