请打开考生文件夹下的解决方案文件proj2,其中有矩阵基类MatrixBase、矩阵类Matrix和单位阵UnitMatrix的定义,还有main函数的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为: 1 2

admin2020-04-07  31

问题 请打开考生文件夹下的解决方案文件proj2,其中有矩阵基类MatrixBase、矩阵类Matrix和单位阵UnitMatrix的定义,还有main函数的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:
    1 2 3 4 5
    2 3 4 5 6
    3 4 5 6 7

    1 0 O 0 0 0
    0 1 0 0 0 0
    0 0 1 0 0 0
    0 0 0 1 0 0
    0 0 0 0 1 0
    0 0 0 0 0 1
    注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。
    #include<iostream>
    using namespace std;
    //矩阵基础类,一个抽象类
    class MatrixBase{
      int rows,cols;
    public:
      MatrixBase(int rows,int cols):rows(rows),cols(cols){}
      int getRows()const{returnrows;)  //矩阵行数
      int getCols()const{return cols;)  //矩阵列数
      virtual double getElement(int r,int c)const=O;//取第i个元素的值
      void show()const{
    //分行显示矩阵中所有元素
        for(int i=0; i<rows; i++){
          cout<<endl;
          for(int j=0;J<cols;j++1
    //********** found **********
          cout<<____________<<"";
        }
      }
     };
    //矩阵类
    class Matrix:public MatrixBase{
      double * val;
    public:
    //********** found **********
      Matrix(int rows,int cols,double m[]=NULL):_____________{
    //********** found **********
        val=___________;
        for(int i=0;i<rows * cols;i++)
          val=(m=:NULL?0.0:m);
      }
      ~Matrix() {delete[]val;)
      double getElement(int r,int c)const {return val[r * getCols()+c];}
    };
    //单位阵(主对角线元素都是1,其余元素都是0的方阵)类
    class  UnitMatrix:public  MatrixBase{
    public:
      UnitMatrix(int rows):MatrixBase(rows,rows) {}
    //单位阵行数列数相同
      double getElement(int r,int c)
    const{
    //********** found **********
         if(_________) return 1.0;
         return 0.0;
       }
    };
    int main(){
      MatrixBase * m;
      double d[][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};
      m=new Matrix(3,5,(double * )d);
      m一>show();
      delete m;
      cout<<endl;
      m=new UnitMatrix(6);
      m一>show();
      delete m;
      retumR 0;
    }

选项

答案(1)getElement(i,j) (2)MatrixBase(rows,cols) (3)Hew double[rows * cols] (4)r==c

解析 (1)主要考查考生对纯虚函数的掌握,函数功能是分行显示矩阵中所有元素。因此在这里要输出行为i、列为j的元素,使用纯虚函数getElement(i,j)实现,输出语句为tout<<get.Element(i,j)<<" ";。
    (2)主要考查考生对派生类的构造函数的掌握,派生类的构造函数使用成员列表初始化法,先对基类初始化。
    (3)主要考查考生对动态数组的掌握,val是double型指针,要给val赋值,就要先给它分配空间,应使用new来完成。
    (4)主要考查考生对成员函数的掌握,因为要输出单位矩阵,只有满足条件r==c的元素为1.0,所以填写语句if(r==c)return 1.0;。
转载请注明原文地址:https://kaotiyun.com/show/Eu8p777K
0

最新回复(0)