2 langdon1996 Langdon1996 于 2016.04.07 22:05 提问

C++矩阵乘法-输入第二个矩阵数据后程序崩溃?

//初始化第二个矩阵的数据后程序崩溃了?为什么呢?
#include
using namespace std;

int main()
{
a:
int m,n,r,c;
cout<<"请输入第一个矩阵的行与列"< cin>>m>>n;
cout<<"请输入第二个矩阵的行与列"< cin>>r>>c;
if(n!=r)
{
cout<<"对不起,你输入的两个矩阵不能进行矩阵乘法运算"< goto a;
}
int **matrix1=new int *[m];//先定义二位指针,实质是指向以为数组的指针
for(int i=0;i matrix1[i]=new int [n];
int **matrix2=new int *[r];
for(int i=0;i matrix2[i]=new int [c];
//两个二位数组设置好了,现在进行初始化数据
cout for(int i=0;i for(int j=0;j cin>>matrix1[i][j];
cout<<"现在请输入第二个矩阵的数据,请逐行输入"< for(int i=0;i for(int j=0;j cin>>matrix2[i][j];
//打印原始矩阵
cout<<"第一个矩阵"<<endl;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
cout<<matrix1[i][j];
cout<<endl;
}
cout<<"第二个矩阵"<<endl;
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
cout<<matrix2[i][j];
}

//数据初始化完毕,进行矩阵乘法的运算;
int **matrix=new int *[m];
for(int i=0;i<c;i++)
matrix[i]=new int [c];
for(int i=0;i<m;i++)
for(int j=0;j<c;j++)
{
int k=0;
while (k<n)
{
matrix[i][j]+=matrix1[i][k]*matrix2[k][j];
k++;

}

    }   

//打印结果矩阵
for(int i=0;i<m;i++)
{
for(int j=0;j<c;j++)
cout<<matrix[i][j];
cout<<endl;
}

//错误 int **matrix2=new int [r][c];
return 0;
}

4个回答

caozhy
caozhy   Ds   Rxr 2016.04.07 23:05
    for(i=0;i<c;i++) //这里是r不是c
        matrix2[i]=new int [c]; 

caozhy
caozhy   Ds   Rxr 2016.04.07 23:05

如果回答解决,请记得点下我回答右边的采纳,谢谢

stadyhungry
stadyhungry   2016.04.07 22:33

代码都不全 看的蛋疼

stadyhungry
stadyhungry   2016.04.09 22:54
 int _tmain(int argc, _TCHAR* argv[])
{
a:
    int m,n,r,c;
    cout<<"请输入第一个矩阵的行与列"<<endl;
    cin>>m>>n;
    cout<<"请输入第二个矩阵的行与列"<<endl;
    cin>>r>>c;
    if(n!=r)
    {
        cout<<"对不起,你输入的两个矩阵不能进行矩阵乘法运算"<<endl;
        goto a;
    }
    int **matrix1=new int *[m];//先定义二位指针,实质是指向以为数组的指针 
    for(int i=0; i < m; i++)
        matrix1[i]=new int [n]; 

    int **matrix2=new int *[r];
        for(int i=0; i < r; i++)
            matrix2[i]=new int [c];

    //两个二位数组设置好了,现在进行初始化数据
    cout<<"现在请输入第一个矩阵的数据,请逐行输入"<< endl;
    for(int i=0; i < m; i++)
        for(int j=0; j < n; j++)
            cin>>matrix1[i][j];

    cout<<"现在请输入第二个矩阵的数据,请逐行输入"<< endl;
    for(int i=0; i < r; i++)
        for(int j=0; j < c; j++)
            cin>>matrix2[i][j];

    //打印原始矩阵
    cout<<"第一个矩阵"<<endl; 
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
            cout<<matrix1[i][j] << " "; 
        cout<<endl;
    }
    cout<<"第二个矩阵"<<endl;
    for(int i=0;i<r;i++)
    {
        for(int j=0;j<c;j++)
            cout<<matrix2[i][j] << " "; 
        cout<<endl;
    }
    //数据初始化完毕,进行矩阵乘法的运算;
    int **matrix=new int *[m];
    for(int i=0;i<m;i++)
        matrix[i]=new int [c];

    for(int i=0;i<m;i++)
        for(int j=0;j<c;j++)
        {
            matrix[i][j] = 0;
            int k=0;
            while (k<n)
            {
                matrix[i][j] += matrix1[i][k]*matrix2[k][j];
                k++;
            }
        }   
        //打印结果矩阵
        cout<<"结果:"<<endl;
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<c;j++)
                cout<<matrix[i][j] << " ";
            cout<<endl; 
        }
        //错误 int **matrix2=new int [r][c];

        return 0;
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!