定义一个类RANK,对len个成绩进行排名。例如,成绩为{95, 93, 94, 90,97, 93, 95, 96},则对应名次为{3, 6, 5, 8, 1,6, 3, 2}。具体要求如下: (1)私有数据成员 double * a; // 用动态内存(数组)存放成绩。 int * b; // 用动态内存(数组)存放名次。 int len; // 数组a和b中实际元素的个数。 (2)公有成员函数 RANK(double * x, int n); // 构造函数。为数组a和b动态分配存储空间,用x和n初始化数组a和整数len,初始化数组b。 void number( ); // 根据数组a的元素求数组b对应元素的值。 void showdata( ); // 输出成绩(数组a的元素值),注意输出格式。 void shownumber( ); // 输出名次(数组b的元素值),注意输出格式。 ~RANK(); // 释放相应的动态存储空间。 (3)在主函数中定义一个实型数组并初始化(测试数据为{95, 93, 94, 90,97, 93, 95, 96}),用该数组作为成绩初始化一个RANK对象,调用相关成员函数完成对类RANK的测试。
时间: 2024-02-06 08:03:43 浏览: 31
好的,以下是代码实现:
```cpp
#include<iostream>
#include<iomanip>
using namespace std;
class RANK{
private:
double * a; // 用动态内存(数组)存放成绩。
int * b; // 用动态内存(数组)存放名次。
int len; // 数组a和b中实际元素的个数。
public:
RANK(double * x, int n){ // 构造函数。为数组a和b动态分配存储空间,用x和n初始化数组a和整数len,初始化数组b。
len = n;
a = new double[len];
b = new int[len];
for(int i = 0; i < len; i++){
a[i] = x[i];
b[i] = 0;
}
}
void number( ){ // 根据数组a的元素求数组b对应元素的值。
for(int i = 0; i < len; i++){
for(int j = 0; j < len; j++){
if(a[j] > a[i]){
b[i]++;
}
}
b[i]++;
}
}
void showdata( ){ // 输出成绩(数组a的元素值),注意输出格式。
cout << "成绩为:";
for(int i = 0; i < len; i++){
cout << fixed << setprecision(1) << a[i] << " ";
}
cout << endl;
}
void shownumber( ){ // 输出名次(数组b的元素值),注意输出格式。
cout << "名次为:";
for(int i = 0; i < len; i++){
cout << b[i] << " ";
}
cout << endl;
}
~RANK(){ // 释放相应的动态存储空间。
delete[] a;
delete[] b;
}
};
int main(){
double x[] = {95, 93, 94, 90, 97, 93, 95, 96};
int n = sizeof(x) / sizeof(x[0]);
RANK rank(x, n);
rank.showdata();
rank.number();
rank.shownumber();
return 0;
}
```
输出结果为:
```
成绩为:95.0 93.0 94.0 90.0 97.0 93.0 95.0 96.0
名次为:3 6 5 8 1 6 3 2
```
希望能够帮到你!