用C++编写相关程序10

请编写程序,上机调试,题目如下图,请按题目要求编写,并给出程序

img

#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;
}

img