请编写程序,上机调试,题目如下图,请按题目要求编写,并给出程序
#include<iostream>
using namespace std;
class CalAverage
{
public:
CalAverage() {}
~CalAverage() {}
virtual double Average(double *arr, int len) = 0;
};
class Gymnastics :public CalAverage
{
public:
Gymnastics() {}
~Gymnastics() {}
virtual double Average(double *arr, int len)
{
//因为要去掉最大值与最小值,确保len>=3
if (len <= 2) return 0;
//记录最大值
double max = arr[0];
//记录最小值
double min = arr[0];
//计算总和
double sum = 0;
for (int i = 0; i < len; i++)
{
sum = sum + arr[i];
if (arr[i] < min) min = arr[i];
if (arr[i] > max) max = arr[i];
}
//计算平均值
sum = (sum - max - min) / (len - 2);
return sum;
}
};
class School :public CalAverage
{
public:
School() {}
~School() {}
virtual double Average(double *arr, int len)
{
double sum = 0;
for (int i = 0; i < len; i++)
{
sum = sum + arr[i];
}
//计算平均值
sum = (sum) / len;
return sum;
}
};
int main()
{
double arr[5] = { 88,89,90,100,56 };
CalAverage* cal1 = new Gymnastics();
CalAverage* cal2 = new School();
//数组长度
int len = sizeof(arr) / sizeof(double);
printf("去除最大值与最小值的平均分:%f\n", cal1->Average(arr, len));
printf("不去除最大值与最小值的平均分:%f\n", cal2->Average(arr, len));
return 0;
}