【发布时间】:2013-11-14 00:27:09
【问题描述】:
我的平均功能是删除最后一个元素。
我使用数字 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 文件,它就可以完美运行(你们建议的几乎所有更改都是原始代码,并且是我为尝试更改平均值而进行的更改,这并没有改变,因为我是'不改变正确的源文件。简而言之,问题解决了。)
【问题讨论】:
-
出于某种原因,我对平均函数所做的任何更改似乎都不会对程序产生任何影响......我认为我的编译器正在出错......
-
说真的,你编辑了我的问题和代码......多么毫无意义。