C ++查找数组中数字的平å‡å€¼

时间:2012-05-30 23:12:16

标签: c++ arrays average

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

avgTemp = total / n;

temps是包å«n元素的数组。 avgTemp存储temps中所有值的平å‡å€¼ã€‚ kåªæ˜¯ä¸€äº›æ•´æ•°ä½¿æˆ‘的循环工作。 k,nå’Œtotalå·²ç»åœ¨ä¸Šé¢é€‚当地声明了。 total跟踪数组中元素的总数。

我的è¿åŠ¨èƒ½å‘Šè¯‰æˆ‘这是错的。我åšé”™äº†ä»€ä¹ˆï¼Ÿ

5 个答案:

答案 0 :(得分:6)

æ­¤

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的代ç ã€‚

答案 1 :(得分:2)

首先,total += temps[k]

+ =æ„味ç€total = total + temps[k]å·²ç»

顺便说一下, 总数是浮动还是åŒå€ï¼Ÿå¦åˆ™ä½ æ­£åœ¨è¿›è¡Œæ•´æ•°é™¤æ³•ã€‚

答案 2 :(得分:2)

您的代ç åœ¨æ¯æ¬¡è¿­ä»£æ—¶éƒ½ä¼šå‘自身添加“totalâ€ï¼Œè¿™ä¸æ˜¯æ‚¨æƒ³è¦çš„。你需è¦æ”¹å˜ï¼š

total += total + temps[k];

到

total += temps[k];

答案 3 :(得分:1)

获å–数字的总和时,您è¦å°†æ€»æ•°æ·»åŠ åˆ°è‡ªèº«ï¼Œç„¶åŽæ·»åŠ ä¸‹ä¸€ä¸ªå…ƒç´ ã€‚

total += total + temps[k];

应该是:

total += temps[k];

答案 4 :(得分:0)

bames53's comment中æ到的accumulate实际上是解决此问题的最佳选择。给定n,它是容器的大å°ï¼Œit,它是指å‘容器第一个元素的指针或迭代器,您å¯ä»¥å¯¹æ•°ç»„,动æ€åˆ†é…的数组或å‘é‡æ‰§è¡Œæ­¤æ“作:

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

Live Example