2
for( k = 0; k < n; k++ )
{
   total += total + temps[k];
}

avgTemp = total / n;

tempsn要素を含む私の配列です。avgTempすべての値の平均をに格納しますtemps。kは、ループを機能させるための整数です。k、n、およびtotalは、すでに上記のどこかで適切に宣言されています。total配列内の要素の合計を追跡します。

私の運動はこれが間違っていると言っています。私は何が間違っているのですか?

4

5 に答える 5

7

これ

for( k = 0; k < n; k++ )
{
    /// here's the error.
    /// You assign the new value to total as (total = total + total + temps[k])
    total += total + temps[k];
}

avgTemp = total / n;

する必要があります

for( k = 0; k < n; k++ ) { total += temps[k]; }

avgTemp = total / n;

また

for( k = 0; k < n; k++ ) { total = total + temps[k]; }

avgTemp = total / n;

反復合計を使用するとさらに良いでしょう。これにより、丸め誤差を回避できます。

avgTemp = temps[0];

for(k = 1 ; k < n ; k++) { total = (temps[k] + (double)(k-1) * total)/ (double)k; }

bames53はまた、コメントで素晴らしいSTLベースのコードを提供します。

于 2012-05-30T23:14:53.800 に答える
2

初め、total += temps[k]

+=total = total + temps[k]すでに意味

ちなみに、totalはfloatまたはdoubleとして宣言されていますか?それ以外の場合は、整数除算を実行しています。

于 2012-05-30T23:14:47.017 に答える
2

あなたのコードは、反復ごとにそれ自体に「合計」を追加していますが、これはあなたが望むものではありません。変更する必要があります:

total += total + temps[k];

total += temps[k];
于 2012-05-30T23:16:48.963 に答える
1

数値の合計を取得するときは、合計をそれ自体に加算してから、次の要素を加算します。

total += total + temps[k];

する必要があります:

total += temps[k];
于 2012-05-30T23:15:53.477 に答える
0

bames53のコメント で述べられているように、accumulateこれを解決するための最善の策は本当にです。nどちらがコンテナーのサイズで、どちらがコンテナーの最初の要素へのポインターまたはイテレーターであるかを考えるとit、配列、動的に割り当てられた配列、またはベクトルに対してこれを行うことができます。

const auto avgTemp = accumulate(it, next(it, n), typename iterator_traits<remove_const_t<decltype(foo)>>::value_type{}) / n;

Live Example

于 2019-01-09T16:54:55.997 に答える