【解決方法】異なる手段のC


2 つの正の実数の算術平均、幾何平均、調和平均を計算するコードを作成する必要があります。 私が書いた :

#include <stdio.h>
#include <math.h>
int main()
{
    double num1, num2;
    float avg;
    float squareroot;
    float mharmonic;
    scanf("%lf %lf",&num1,&num2);

    avg= (float)(num1+num2)/2;

    printf("arithmetic mean is %lf\n" , avg);
    
    squareroot = sqrt(num1*num2);
    
    mharmonic = (2*(num1*num2)/num1+num2);
    
    printf("Geometrical mean is %lf\n" , squareroot);
    
     printf("Harmonic mean is %lf\n" , mharmonic);
    
    return 0;
}

算術平均と幾何平均では正常に機能していますが、調和平均では正しい結果が得られませんでした。 私はインターネットを検索しましたが、それは正しいフォーラムですが、正しい結果が得られない理由がわかりません

私が試したこと:

調和平均の式を検索したところ、それが見つかりましたが、機能していません

解決策 1

調和平均は

与えられた一連の観測値の逆数の算術平均の逆数

そして、逆数の算術平均は ((1 / num1) + (1 / num2)) / 2 その逆数が必要です。
だからこれを試してください:

mharmonic = 2 / ((1 / num1) + (1 / num2));

配列とその中の要素の数を受け取り、そのようにハードコーディングするのではなく、一般的なコレクションの結果を返す関数を作成します-長期的にははるかに柔軟で、読みやすくなります!

解決策 2

2 つの小さな変更を提案します。 データ型は均一に倍精度にする必要がありますが、数式で括弧が正しく設定されていません。

C++
// float squareroot;
double squareroot;
// float mharmonic;
double mharmonic;

// ...

// mharmonic = (2 * (num1*num2) / num1 + num2);
mharmonic = (2*num1*num2) / (num1 + num2);

式は、2 つの値のいずれかがゼロであっても機能します。 いずれにせよ: 平均化される量の少なくとも 1 つがゼロの場合、調和平均はゼロとして定義されます。 もちろん、これはプログラムで実装する必要があります。

コメント

タイトルとURLをコピーしました