0

我的平均功能是删除最后一个元素。
我使用数字 0、5、10、20 对其进行了测试,平均得到 5.00 而不是 8.75。
如果你切换数字,最后一个元素仍然会被丢弃。

此外,当我的老师尝试运行它时,还发生了另一个问题,但是我无法复制一个问题,这是在排序后在第一个元素中抛出的一些奇怪的大量数字。

#include <iostream>
#include <cstdlib>
#include <string>
#include <iomanip>

using namespace std;

int getNumber();
void getMovieData(int *, int);
void sort(int *, int);
double getAverage(int *, int);
void print(int *, int);

int main()
{
    int students, i, j;
    int *movies;

    cout << "Enter the number of Students surveyed: ";
    i = getNumber();    
    movies = new int[i];

    getMovieData(movies, i);
    cout << endl << "--- Here is the data you entered ---" << endl;
    print(movies, i);
    cout << endl << "--- Here is the data after being sorted --" << endl;
    sort(movies, i);
    double average = getAverage(movies, i);
    print(movies, i);
    cout << endl << "The average number of movies seen is " << fixed
         << showpoint << setprecision(2) << average << endl; //rounding to 
    system("PAUSE");
    return 0;


}

// Function used to input positive number
int getNumber()
{
    int number;
    cin >> number;

    // Validation
    while (number < 0)
    {
        cout << endl << "Number cannot be negative: "
                            "Please enter a nonnegative value: ";
        cin >> number;
    } 
    return (number); 
}

// Function to input values into the array, movies of size SIZE
void getMovieData(int *ptrToArray, int SIZE)
{

    for (int i = 0; i < SIZE; i++)
    {
        cout << endl << "Enter the number of movies Student " << i+1 << " saw: ";
        ptrToArray[i]= getNumber();
    }
}

// Bubble Sort the Data
void sort( int *ptrToArray, int SIZE)
{
    for (int j = 0; j < SIZE; j++) 
    {
        for (int i = 0; i < SIZE; i++)
        {
            if (ptrToArray[i] < ptrToArray[i+1])
            {
                int temp = ptrToArray[i];
                ptrToArray[i] = ptrToArray[i+1];
                ptrToArray[i+1] = temp;
            }
        }
    }
}

// Simple Average function; returns average to average in main
double getAverage(int *ptrToArray, int SIZE)
{
    double total=0;
    for(int i=0; i < (SIZE); i++)
    {
        total += ptrToArray[i];
    }
    double average = total/(SIZE -1);
    return (average);
}

//A function to print the arrays only! the average is printed in main
void print(int *ptrToArray, int SIZE)
{
    for (int i = 0; i < SIZE; i++)
    {
        cout << ptrToArray[i] << setw(10);
    }
}

要输入的数字是这样的:

4
0
5
10
20

输出为 20、10、5、0 和平均值 5.00,第二组数字是:

4
4
22
3
55

输出为 225982769 55 22 4(已排序),平均值为 32283264.29

使用第二组数字,我无法复制她得到的输出,因为我得到了正确的排序,但显然是错误的平均值。非常感谢您能给我的任何帮助。

编辑:编译器存在问题,不包括我在项目中使用的文件,而是使用旧文件。唯一的区别是 total/7

相对

total/SIZE

这就是平均值偏离的原因。似乎它正在删除最后一个元素,但实际上只是巧合,它们总计 35,除以 7 是 5.00,如果你删除 20,这也是平均值。

一旦我更改了正确的 .cpp 文件,它就可以完美运行(你们建议的几乎所有更改都是原始代码,并且是我为尝试更改平均值而进行的更改,但没有更改,因为我没有更改正确的源文件。简而言之,问题解决了。)

4

2 回答 2

0

您需要在平均函数中包含最后一个元素。要么做

for(int i = 0; i < SIZE; ++i)

或者

for(int i = 0; i <= (SIZE - 1); ++i)
于 2013-11-14T00:30:36.730 回答
0

你有一个错误

for(int i=0; i < (SIZE - 1); i++)

你需要 i < SIZE。分区也是一样,

double average = total/(SIZE -1);

在这里你需要 SIZE,而不是 SIZE-1。

还,

system("PAUSE");

应该避免。最好使用 getchar() 之类的东西。

于 2013-11-14T00:36:13.740 回答