请各位大虾帮忙看一个矩阵乘法的问题, 我只有这么多分了, 全部都拿出来了.
题目: 矩正相乘函数 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;
}
不知哪错, 请大家赐教. 万分感激
c++ 矩阵乘法
答案:3 悬赏:60
解决时间 2021-04-08 04:18
- 提问者网友:江山如画
- 2021-04-07 07:58
最佳答案
- 二级知识专家网友:荒唐后生
- 2021-04-07 08:40
楼上的,别人叫你给他看看错误,不是要你去给别人一个程序,那你是害别人!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");
}
就正确了!
你申请的指针: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");
}
就正确了!
全部回答
- 1楼网友:滚刀废物浮浪人
- 2021-04-07 09:14
两个矩阵相乘的源程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];
}
}
- 2楼网友:啵啵桃汀
- 2021-04-07 09:04
没怎么看明白你的程序,所以也没有改正你的程序,不过如果你想用这个功能的话,我写了一个矩阵简单运算的类,你可以参考一下,如果有不明白的地方可以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;
}////////////////////////////////
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯