中易网

c++ 矩阵乘法

答案:3  悬赏:60  
解决时间 2021-04-08 04:18
请各位大虾帮忙看一个矩阵乘法的问题, 我只有这么多分了, 全部都拿出来了.
题目: 矩正相乘函数 void JZXC(const int *JZ1,int row,int col1,const int *JZ2,int col2,int * resultJZ);所有矩正的数组表示都是由主函数传入的,在函数内部不进行矩正数组的空间分配。

我做的:
#include<iostream>
using namespace std;
void matrix_mutiply(int **Matrix_1, int **Matrix_2, int Row1, int Column1, int Row2, int Column2)
{//矩阵乘法的函数
int i, j, k;
int **Result_Matrix;
for(k=0; k<Row1; k++)
{
for(i=0; i<Column2; i++)
{
for(j=0; j<Column1; j++)
{
Result_Matrix[k][i]+=Matrix_1[k][j]*Matrix_2[j][i];
}
}
}
for(int e=0; e<Row1; e++)//输出结果
{
for(int f=0; f<Column2; f++)
{
cout<<Result_Matrix[e][f];
}
}
}

void main()//主函数
{
int n, m, p, a ,b, q, r, c, d;
cout<<"您第一个矩阵的行数为:"<<endl;
cin>>n;
cout<<"您第一个矩阵的列数为:"<<endl;
cin>>m;
int **t=new int*[n];//为第一个数组申请内存
for(p=0; p<n; p++)
{
t[p]=new int[m];
}
cout<<"请依次输入第一个矩阵的元素:";
for(a=0; a<n; a++)//输入第一个矩阵的元素
{
for(b=0; b<m; b++)
{
cin>>t[a][b];
}
}
cout<<"您的第二个矩阵列数为:"<<endl;
cin>>r;
int **s=new int*[m];//为第二个数组申请内存
for(q=0; q<m; q++)
{
s[q]=new int[r];
}
cout<<"请依次输入第二个矩阵的元素:";//输入第一个矩阵的元素
for(c=0; c<m; c++)
{
for(d=0; d<r; d++)
{
cin>>s[c][d];
}
}
cout<<"结果为:"<<endl;
matrix_mutiply(t, s, n, m, m, r);//调用矩阵乘法的函数
for(p=0; p<n; p++)//delete第一个内存
{
delete[]t[p];
}
delete []t;
for(q=0; q<m; q++)//delete第一个内存
{
delete[]s[q];
}
delete []s;
}

不知哪错, 请大家赐教. 万分感激
最佳答案
楼上的,别人叫你给他看看错误,不是要你去给别人一个程序,那你是害别人!32313133353236313431303231363533e78988e69d8331333236366264
你申请的指针:int **Result_Matrix没有被赋值,导致了悬空指针,这时很危险的,编译器当然不肯让你这样做!
看下面的例子:
#include<iostream>
#include<cstdlib>
using namespace std;

int main()
{
int *a;
int *b=new int;
int *c=new int;
*b=1;*c=2;
*a=*b+*c;
cout<<*a;
delete b;
delete c;
system("pause");
}
他就提示出错,如果这样:
#include<iostream>
#include<cstdlib>
using namespace std;

int main()
{
int *p=new int(1);
int *a=p;
int *b=new int;
int *c=new int;
*b=1;*c=2;
*a=*b+*c;
cout<<*a;
delete b;
delete c;
system("pause");
}
就正确了!
全部回答
两个矩阵相乘的源程32313133353236313431303231363533e58685e5aeb931333236366264序 #include<stdio.h> #include<conio.h> #define X 3 #define Y 3 int a[X][Y]; int b[X][Y]; int c[X][Y]; void matrix(int b[][X],int c[][Y]); main() { int i,j,temp; clrscr(); printf("Please input int matrix b[%d][%d]\n",X,Y); for(i=0;i<Y;i++) for(j=0;j<Y;j++){ scanf("%d",&temp); b[i][j]=temp; } printf("Please input int matrix c[%d][%d]\n",X,Y); for(i=0;i<X;i++) for(j=0;j<Y;j++){ scanf("%d",&temp); c[i][j]=temp; } matrix(b,c); printf("Now print resource matrix b[%d][%d]=",X,Y); for(i=0;i<X;i++){ printf("\n"); for(j=0;j<Y;j++) printf("%d ",b[i][j]); } printf("\n"); printf("Now print resource matrix c[%d][%d]=",X,Y); for(i=0;i<X;i++){ printf("\n"); for(j=0;j<Y;j++) printf("%d ",c[i][j]); } printf("\n"); printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y); for(i=0;i<X;i++){ printf("\n"); for(j=0;j<Y;j++) printf("%d ",a[i][j]); } getch(); return 0; } void matrix(int b[][X],int c[][Y]) { int i,j,k,temp; for(i=0;i<X;i++) for(j=0;j<Y;j++){ for(k=0;k<Y;k++) a[i][j]+=b[i][k]*c[k][j]; } }
没怎么看明白你的程序,所以也没有改正你的程序,不过如果你想用这个功能的话,我写了一个矩阵简单运算的类,你可以参考一下,如果有不明白的地方可以hi我。 重要的是处理矩阵乘法的方法没错 以前帖的那个有严重错误,现修改如下: #include class matrix { private: int y,x; int **m; public: matrix(int y,int x); matrix(matrix &tmp); void in();//矩阵的输入。规则:先输入矩阵的行、列数目,按行输入矩阵内元素(建议:一行内元素在同一行输入, //输入一行后回车)。 void out();//按行列形式输出矩阵 matrix multiply(matrix tmp);//矩阵乘法(this乘tmp),须严格按照矩阵乘法规则输入两个矩阵的数据,否则会出现不可预计的错误!! matrix add(matrix tmp);//矩阵加法,注意事项同上! matrix transpose();//矩阵的转置 }; void main() {//只做测试用 matrix a(3,2); matrix b(2,4); a.in(); b.in(); a.multiply(b).out(); } matrix::matrix(int y,int x) { this->y=y; this->x=x; this->m=new int *[y]; for(int yy=0;yy this->m[yy]=new int[x]; } matrix::matrix(matrix &tmp) { y=tmp.y;x=tmp.x; m=new int *[y]; for(int yy=0;yy m[yy]=new int[x]; for(yy=0;yy for(int xx=0;xx m[yy][xx]=tmp.m[yy][xx]; } void matrix::in() { for(int yy =0;yy { cout<<"请依次输入第"< for(int xx=0;xx cin>>m[yy][xx]; } } void matrix::out() { cout<<"此矩阵为:"< for(int yy =0;yy { for(int xx=0;xx cout< cout< } } matrix matrix::add(matrix tmp) { matrix result(y,x); result.x=x; result.y=y; for(int yy =0;yy { for(int xx=0;xx result.m[yy][xx]=m[yy][xx]+tmp.m[yy][xx]; } return result; } matrix matrix::transpose() { matrix result(y,x); result.x=y; result.y=x; for(int yy=0;yy for(int xx=0;xx result.m[yy][xx]=m[xx][yy]; return result; } matrix matrix::multiply(matrix tmp)/////////////////////////////////// { matrix result(y,x); result.x=tmp.x; result.y=y; for(int yy=0;yy for(int xx=0;xx result.m[yy][xx]=0; //正式开始乘法计算 int y1,x1,x2;//分别为第一个矩阵的行、列和第二个矩阵的列 for(y1=0;y1 for(x2=0;x2 for(x1=0;x1 result.m[y1][x2]+=(m[y1][x1]*tmp.m[x1][x2]); return result; }////////////////////////////////
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
移动手机660m流量多少钱
新华本草纲要记载线柱兰怎么吃
欣鑫网络宾馆我想知道这个在什么地方
谁知道浙江的千岛湖怎么样?好不好玩?什么时
上海搬家从松江到闵行,找专业搬家人士,价格
儿童家具材料热带松和寒带松哪个好
43寸屏分辨率多少比较合适
美国学者舒尔茨提出了新的“4Rs营销组合”理
2、 插入一个图片 <img>标签中的src属性是什
杭州22日、23日、24日这三天天气如何?
江湖迵且深中(迥)字怎么读?
我是2010届考生我想考吉林铁路学校需要多少分
东崇礼小区我想知道这个在什么地方
C语言字符串反向输出的一个问题(用堆栈)
在办公室怎样有效的消除静电
推荐资讯
白胡子死后红发去吊祭他是哪集
菲奥娜怎么样
梦见自己的牙掉了 感觉下门牙全掉了 但照镜子
野林食品在哪里啊,我有事要去这个地方
头晕想睡觉,心情低落,不想吃饭,眼睛发酸,
oppo有刷手机深圳通的功能?
在yy上帮人表白的歌
盆栽花上有蚜虫,花盆里的土中是否也有虫牙卵,
我的手机内屏坏了,开机设有密码。锁屏状态。
被动是什么意思啊
我专科的专业 是投资与理财 要是专升本的话
什么牌子的牙膏的摩擦剂是碳酸钙
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?