我的平均功能是删除最后一个元素。
我使用数字 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 文件,它就可以完美运行(你们建议的几乎所有更改都是原始代码,并且是我为尝试更改平均值而进行的更改,但没有更改,因为我没有更改正确的源文件。简而言之,问题解决了。)