涼宮こなた
2017-09-13 08:05
采纳率: 100%
浏览 880

帮忙看看这个程序出了什么问题

本菜写了一个小程序
能够创建一个矩阵,规定长宽,并进行矩阵之间的加减运算
代码如下

 #include<iostream>
using namespace std;

class matrix                                                                //创建矩阵类 
{
    private:
        int lines;
        int rows;
        int **num;                                                          //建立二重数组
    public:
        matrix(int a,int b)                                                 //构造函数
        {
            lines=a;
            rows=b;
            cout<<"矩阵初始化"<<endl;
            num=new int*[lines];
            int x,y;
            for(y=0;y<lines;y++)
            {
                num[y]=new int[rows];                                       //循环完成new申请内存 
            }
        }
        /*matrix(matrix& father)                                            //拷贝构造函数 
        {
            cout<<"调用拷贝构造函数"<<endl;
            lines=father.lines;
            rows=father.rows;
            int x,y;
            for(y=0;y<lines;y++)
            {
                for(x=0;x<rows;x++)
                {
                    num[x][y]=father.num[x][y];                             //循环读入矩阵元素 
                }
            }
        }*/
        void in();                                                          //输入函数 
        void out();                                                         //输出函数 
        int get_num(int x,int y)                                            //取用指定元素的函数(内联)
        {
            return num[x][y];
        }
        void operate(int mode,matrix m1,matrix m2);                         //运算函数,包含加和减 
        ~matrix()                                                           //析构函数 释放矩阵空间 
        {

        }
        void matrix_free();                                                 //释放矩阵空间函数 
};

void matrix::matrix_free()
{
    int i;
    for(i=0;i<lines;i++)
    {
        delete []num[i];                                
    } 
    delete []num;
}

void matrix::in()
{
     cout<<"请按顺序输入矩阵元素:"<<endl;
     int x,y;
     for(y=0;y<lines;y++)
     {
        for(x=0;x<rows;x++)
        {
            cin>>num[x][y];                                                 //循环输入矩阵元素 
        }
     }
}

void matrix::out()                                                          //此函数可以按格式输出矩阵 
{
    int x,y;
    for(y=0;y<lines;y++)
    {
        for(x=0;x<rows;x++)
        {
            cout<<num[x][y];
            if(x!=rows-1)
            {
                cout<<" ";
            }
        }
        cout<<endl;
    }
}

void matrix::operate(int mode,matrix m1,matrix m2)                          //运算函数,mode=1代表加,mode=-1代表减,m1,m2为待处理矩阵
{
    int x,y;
    for(y=0;y<lines;y++)
    {
        for(x=0;x<rows;x++)
        {
            num[x][y]=m1.get_num(x,y)+mode*m2.get_num(x,y);                 //运算部分
        }
    }
}

int main(void)
{
    int a=0,b=0;
    cout<<"输入矩阵大小(行 列):"<<endl;
    while(a<=0||b<=0)
    {
        cin>>a>>b;
        if(a<=0||b<=0)
        {
            cout<<"输入错误,重新输入:"<<endl;
        }
    }
    matrix A1(a,b),A2(a,b),A3(a,b);                                         //创建三个矩阵 
    A1.in();                                                                //输入初始化
    A2.in();                                                                
    A3.operate(1,A1,A2);                                                    //A3=A1+A2 
    cout<<"矩阵和:"<<endl; 
    A3.out();                                                               //输出 
    A3.operate(-1,A1,A2);                                                   //A3=A1-A2
    cout<<"矩阵差:"<<endl; 
    A3.out();                                                               //输出
    A1.matrix_free();                                                       //释放矩阵空间 
    A2.matrix_free();
    A3.matrix_free(); 
}

此程序目前问题有三个
1.拷贝构造函数出错,只能注释掉,否则输入完两个矩阵后回车程序未响应
2.释放矩阵空间的不能写在析构函数里,否则输出结果不正确(A3=A1-A2的最后一行)
3.输入矩阵的列不能大于行,否则输入完第一行数字并回车后程序未响应

请前辈指导,谢谢

2条回答 默认 最新

相关推荐 更多相似问题