getAverage()删除最后一个元素

时间:2013-11-14 00:27:10

标签: c++ function average

我的平均功能是放弃最后一个元素 我使用数字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文件,它就完美地工作了(几乎所有你们建议的改变都是原始代码,并且我做了一些改变我试图改变平均值,这没有改变,因为我没有没有改变正确的源文件。简而言之,问题已经解决了。)

2 个答案:

答案 0 :(得分:0)

您需要在平均函数中包含最后一个元素。 <或者

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

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

答案 1 :(得分:0)

您有一个错误

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

你需要我&lt;尺寸。分裂同样如此,

double average = total/(SIZE -1);

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

另外,

system("PAUSE");

应该避免。最好使用像getchar()这样的东西。