#include <iostream>
using namespace std;
const unsigned int g_nStudents = 10; // 学生总数
// 学生成绩统计类
class StudentsScoreStatistics
{
public:
StudentsScoreStatistics() { Clear(); }
// 设置学生分数
void SetScore(double aCore, int aIndex)
{
if (aCore < 0.0 || aCore > 100.0)
return;
if (aIndex < 0 || aIndex > g_nStudents - 1)
return;
mScores[aIndex] = aCore;
}
// 排序
void Sort()
{
// 采用插入排序
for (int i = 1; i < g_nStudents; i++)
{
double nCurrent = mScores[i];
int j = i - 1;
while (j >= 0 && mScores[j] < nCurrent)
{
mScores[j + 1] = mScores[j];
j--;
}
mScores[j + 1] = nCurrent;
}
}
// 得到平均分
double GetAverage() const
{
double dTotal = 0.0;
for (int i = 0; i < g_nStudents; i++)
dTotal += mScores[i];
return (dTotal / g_nStudents);
}
// 得到低于平均分的学生数
int GetStudentsBelowAverage() const
{
int nResult = 0;
double dAverage = GetAverage();
for (int i = 0; i < g_nStudents; i++)
{
if (mScores[i] < dAverage)
nResult++;
}
return nResult;
}
// 得到高于平均分的学生数
int GetStudentsAboveAverage() const
{
int nResult = 0;
double dAverage = GetAverage();
for (int i = 0; i < g_nStudents; i++)
{
if (mScores[i] > dAverage)
nResult++;
}
return nResult;
}
// 得到所有学生分数
const double* GetScores() const
{
return mScores;
}
// 重置学生分数
void Clear()
{
for (int i = 0; i < g_nStudents; i++)
{
mScores[i] = 0.0;
}
}
private:
double mScores[g_nStudents]; // 学生分数数组
};
int main()
{
StudentsScoreStatistics stOperator;
// 输入成绩
cout << "请输入" << g_nStudents << "位学生成绩:" << endl;
for (int i = 0; i < g_nStudents; i++)
{
double dScore = 0.0;
cin >> dScore;
stOperator.SetScore(dScore, i);
}
cout << endl;
// 排序并输出
stOperator.Sort();
cout << "排序后的学生成绩为:" << endl;
for (int i = 0; i < g_nStudents; i++)
{
cout << *(stOperator.GetScores() + i) << " ";
}
cout << endl;
// 平均成绩
cout << "平均成绩为:" << stOperator.GetAverage() << endl;
// 大于平均成绩的学生数
cout << "成绩高于平均人数为:" << stOperator.GetStudentsAboveAverage() << endl;
// 小于平均成绩的学生数
cout << "成绩低于平均人数为:" << stOperator.GetStudentsBelowAverage() << endl;
cout << endl;
system("pause");
return 0;
}
运行结果: