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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
ZZULIOJ 1127: 矩阵乘积《矩阵乘法》
1127: 矩阵乘积 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1845  Solved: 1083 SubmitStatusWeb Board Description 计算两个矩阵A和B的乘积。 Input 第一行三个正整数m、p和n,0 接下来的m行是矩阵A的内容,每行p个整数,用空格隔开; 最
C语言矩阵乘法(指针实现)
这是C和指针书上的一道红
矩阵相乘算法_C语言空间
导读: 一、两个矩阵相乘的经典算法:           若设Q=M*N其中,M是m1*n1矩阵,N是m2*n2矩阵。当n1=m2时有:             for (i=1;i                 for ( j=1; j                      Q[i][j]=0;                      for(k=1; k         
矩阵乘法测试
矩阵乘法测试:
Strassen矩阵乘法(分治策略,java语言实现)
import java.io.*;import java.util.*;class matrix...{    public int[][] m = new int[32][32];}public class Strassen...{    public int judgment(int n)    ...{        int flag = 0,temp=n;        while(t
C语言—用malloc函数实现任意阶矩阵的乘法
Strassen的矩阵乘法算法虽然时间复杂度为
C语言实现矩阵乘法
其中声明A B C的数组时,C语言是不支持变量声明的,要根据题目要求进行初始声明: #include int main() { int x, y, z; int i, j, k; printf("input x,y,z!!\n"); scanf("%d%d%d",&x,&y,&z); int a[100][100], b[100][100], c[100][10
矩阵乘法优化算法
本篇文章大部分思路与代码都来自于微信公众号“CPP开发者”中2016年4月11日的文章《矩阵相乘优化算法实现讲解》,基本相当于这篇文章的重点重述。 矩阵是什么以及矩阵乘法是怎么操作的,我想点开这篇文章的人都应该知道了,这里就不再赘述了。 首先回顾一下我们最朴素的算法: //计算矩阵a乘矩阵b,将结果存入c;p是第一个矩阵的行数,q是第二个矩阵的行数,r是第二个矩阵的列数 void mult(
n阶矩阵的乘法(C实现)
#include #include #define N 100 void MatrixMultilication(float (*a)[N], float (*b)[N], int n) { int i, j, k, c[n][n]; for (i=0; i<n; i++) for (j=0; j<n; j++) { c[i][j] = 0; for (k=0; k<
用多线程并发的方式来计算两个矩阵的乘法
要求很简单,计算两个矩阵的乘法。为了加速,这里面使用了pthread库,来并发计算。 基本思路如下图。 比如用两个线程来计算。矩阵A * B。那么就把A分成两份。比如下图,就是0,2,4和1,3,5这两份。 在线程1中计算第0,2,4行和B个列的乘积,在线程2中计算1,3,5行和B各个列的乘积。 思路很简单。最后代码如下: // pthread.cpp : Defines the