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