奇数单元格的平均值

Average of odd cells?

本文关键字:平均值 单元格      更新时间:2023-10-16

对于我正在做的一个练习,我应该找出数组奇数单元格中包含的项的平均值以及其他一些东西。在我唯一有问题的事情中找到奇数单元格的平均值。这是我的代码,我做错了什么?最后一个函数是奇数单元格的平均函数。谢谢

#include <iostream>
#include <iomanip>
using namespace std;
const int SIZE = 1000;
int randoms[SIZE];
int sum2 = 0;
int top = 0;
int maximum = 0;
int highest(int randoms[]);
int findsum(int randoms[]);
int average(int randoms[], int sum);
int oddavg(int randoms[]);
int main()
{
    int sum = 0;
    int top = 0;
    int avg = 0;
    int oddaverage = 0;

    for (int i = 0; i < SIZE; i++)
    {
        randoms[i] = (rand() % 5000 + 1);
        cout << randoms[i] << setw(10) << " ";
    }
    cout << endl << endl;
    cout << "The sum of the values in the array is ";
    sum = findsum(randoms);
    cout << sum << endl;
    cout << endl << endl;
    cout << "The highest value in the array is ";
    top = highest(randoms);
    cout << top << endl;
    cout << endl << endl;
    cout << "The average of all of the numbers in the array is ";
    avg = average(randoms, sum);
    cout << avg << endl;
    cout << endl << endl;
    cout << "The average of all of the numbers in the odd cells is ";
    oddaverage = oddavg(randoms);
}
int findsum(int randoms[])
{
    for (int i = 0; i < SIZE; i++)
    {
        sum2 += randoms[i];
    }
    return sum2;
}
int highest(int randoms[])
{
    for (int i = 0; i < SIZE; i++)
    {
        if (randoms[i] > maximum)
        {
            maximum = randoms[i];
        }
    }
    top = maximum;
    return top; 
}
int average(int randoms[], int sum)
{
    int avg = 0;
    for (int i = 0; i < SIZE; i++)
    {
        avg = (sum / SIZE);
    }
    return avg;
}
int oddavg(int randoms[])
{
    int avg = 0;
    int sum = 0;
    for (int i = 0; i < SIZE; i++)
    {
        if (randoms[i] / 2 == 1)
        {
            sum += randoms[i];
        }
    }
     avg = sum / SIZE;
     return avg;
}

在这种情况下进行奇数/偶数测试(按照许多人的建议使用模)是完全多余的,因为循环不做任何其他事情。

你可以使用2的步幅,从第一个奇数元素开始:

for (int i = 1; i < SIZE; i += 2)
{
   sum += randoms[i];
}

那么这只是一个除以SIZE的一半的问题。如果这个数字是偶数,那么就有SIZE/2奇数。如果它是奇数,那么就有lbound(SIZE/2)+1奇数。幸运的是,您可以利用整数截断,只需执行以下操作:

double avg = double(sum) / double((SIZE+1) / 2);

您甚至不必担心被零整除=)

应为if (randoms[i] % 2 == 1)你还需要计算奇数的数量。

randoms[i] / 2 == 1,只有当单元格值为23时,这才是真的,这当然不是你需要做的。

如果你需要用比值指数求和单元格的值,那么它应该是如果(i % 2 == 1)。如果您正在查找奇数(在任何单元格中),则应该是if (randoms[i] % 2 == 1)

注意,%是模运算,它返回整数除法的整数余数。

既然你在计算一个平均值,你应该除以元素的数量,而不是总数。

int oddavg(int randoms[])
{
    int cnt = 0;
    int avg = 0;
    for (int i = 0; i < SIZE; i++)
    {
        if ( randoms[i] % 2 != 0 )
        {
            ++cnt; 
            avg += randoms[i];
        }
    }
     return ( cnt == 0 ? avg : avg / cnt );
}