[ad_1]
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 つがゼロの場合、調和平均はゼロとして定義されます。 もちろん、これはプログラムで実装する必要があります。
[ad_2]
コメント