#include<iostream>using namespace std;class Array2D{ private: int rows; double a[rows][8]; public: Array2D(int rows_); ~Array2D(); int getRows(); int getColumns(); void setElem(int x, int y, double z); double getMaxOfRow(int b); double getMinOfRow(int c); double getAvgOfRow(int d); double getMaxOfArray(); double getMinOfArray(); double getAvgOfArray();};Array2D::Array2D(int rows_):rows(rows_){}Array2D::~Array2D(){ cout<<"释放了一个"<<rows<<"行8列的数组"<<endl;}int Array2D::getRows(){ return rows;}int Array2D::getColumns(){ return 8;}void Array2D::setElem(int x, int y, double z){ a[x][y]=z;}double Array2D::getMaxOfRow(int b){ double max; int i=0; max=a[b][i]; for(i=1;i<8;i++){ if(max<a[b][i]) { max=a[b][i]; } } return max;}double Array2D::getMinOfRow(int c){ double min; int i=0; min=a[c][i]; for(i=1;i<8;i++){ if(min>a[c][i]) { min=a[c][i]; } } return min;}double Array2D::getAvgOfRow(int d){ double sum_sum=0.0,SUM=0.0; int i; for(i=0;i<8;i++){ SUM+=a[d][i]; } sum_sum=SUM/8.0; return sum_sum;}double Array2D::getMaxOfArray(){ double max; int i,j; max=a[0][0]; for(i=0;i<rows;i++){ for(j=1;j<8;j++){ if(max<a[i][j]) max=a[i][j]; } } return max;}double Array2D::getMinOfArray(){ double min; int i,j; min=a[0][0]; for(i=0;i<rows;i++){ for(j=1;j<8;j++){ if(min>a[i][j]) min=a[i][j]; } } return min;}double Array2D::getAvgOfArray(){ double sum=0.0,summary=0.0; int i,j; for(i=0;i<rows;i++){ for(j=0;j<8;j++){ summary+=a[i][j]; } } sum=summary/(8.0*rows); return sum;}int main(){ int r; double n; cin>>r; Array2D arr(r); int i,j; for(i=0;i<r;i++) for(j=0;j<8;j++){ cin>>n; arr.setElem(i,j,n); } cout<<arr.getRows()<<" "<<arr.getColumns()<<endl; cout<<arr.getMaxOfRow(0)<<" "<<arr.getMinOfRow(0)<<" "<<arr.getAvgOfRow(0)<<endl; cout<<arr.getMaxOfRow(r-1)<<" "<<arr.getMinOfRow(r-1)<<" "<<arr.getAvgOfRow(r-1)<<endl; cout<<arr.getMaxOfArray()<<" "<<arr.getMinOfArray()<<" "<<arr.getAvgOfArray()<<endl; return 0;}帮我更正一下这段代码的错误。
时间: 2023-12-03 20:46:23 浏览: 31
在类 Array2D 中的成员变量 a 的定义中,使用了 rows 变量,但是 rows 是在类的构造函数中传入的参数,所以在成员变量的定义中无法使用。可以将 a 定义为一个指针,在构造函数中动态分配内存。
正确代码如下:
```
#include<iostream>
using namespace std;
class Array2D{
private:
int rows;
double **a;
public:
Array2D(int rows_);
~Array2D();
int getRows();
int getColumns();
void setElem(int x, int y, double z);
double getMaxOfRow(int b);
double getMinOfRow(int c);
double getAvgOfRow(int d);
double getMaxOfArray();
double getMinOfArray();
double getAvgOfArray();
};
Array2D::Array2D(int rows_):rows(rows_){
a = new double*[rows];
for(int i = 0; i < rows; i++){
a[i] = new double[8];
}
}
Array2D::~Array2D(){
for(int i = 0; i < rows; i++){
delete[] a[i];
}
delete[] a;
cout<<"释放了一个"<<rows<<"行8列的数组"<<endl;
}
int Array2D::getRows(){
return rows;
}
int Array2D::getColumns(){
return 8;
}
void Array2D::setElem(int x, int y, double z){
a[x][y] = z;
}
double Array2D::getMaxOfRow(int b){
double max;
int i = 0;
max = a[b][i];
for(i = 1; i < 8; i++){
if(max < a[b][i]){
max = a[b][i];
}
}
return max;
}
double Array2D::getMinOfRow(int c){
double min;
int i = 0;
min = a[c][i];
for(i = 1; i < 8; i++){
if(min > a[c][i]){
min = a[c][i];
}
}
return min;
}
double Array2D::getAvgOfRow(int d){
double sum_sum = 0.0, SUM = 0.0;
int i;
for(i = 0; i < 8; i++){
SUM += a[d][i];
}
sum_sum = SUM / 8.0;
return sum_sum;
}
double Array2D::getMaxOfArray(){
double max;
int i, j;
max = a[0][0];
for(i = 0; i < rows; i++){
for(j = 1; j < 8; j++){
if(max < a[i][j])
max = a[i][j];
}
}
return max;
}
double Array2D::getMinOfArray(){
double min;
int i, j;
min = a[0][0];
for(i = 0; i < rows; i++){
for(j = 1; j < 8; j++){
if(min > a[i][j])
min = a[i][j];
}
}
return min;
}
double Array2D::getAvgOfArray(){
double sum = 0.0, summary = 0.0;
int i, j;
for(i = 0; i < rows; i++){
for(j = 0; j < 8; j++){
summary += a[i][j];
}
}
sum = summary / (8.0 * rows);
return sum;
}
int main(){
int r;
double n;
cin>>r;
Array2D arr(r);
int i, j;
for(i = 0; i < r; i++){
for(j = 0; j < 8; j++){
cin>>n;
arr.setElem(i, j, n);
}
}
cout<<arr.getRows()<<" "<<arr.getColumns()<<endl;
cout<<arr.getMaxOfRow(0)<<" "<<arr.getMinOfRow(0)<<" "<<arr.getAvgOfRow(0)<<endl;
cout<<arr.getMaxOfRow(r - 1)<<" "<<arr.getMinOfRow(r - 1)<<" "<<arr.getAvgOfRow(r - 1)<<endl;
cout<<arr.getMaxOfArray()<<" "<<arr.getMinOfArray()<<" "<<arr.getAvgOfArray()<<endl;
return 0;
}
```