注册 登录
编程论坛 C++教室

矩阵的乘法~

六道 发布于 2007-10-14 18:16, 2113 次点击

#include<iostream.h>
#include<iomanip.h>

int a[3][4]={{5,7,8,2},{-2,4,1,1},{1,2,3,4}};
int b[4][5]={{4,-2,3,3,9},{4,3,8,-1,2},{2,3,5,2,7},{1,0,6,3,4}};
int c[3][5];

int multimatrix(int a[][4],int arow,int acol,int b[][5],int brow,int bcol,int c[][5],int crow,int ccol);

void main()
{
if(multimatrix(a,3,4,b,4,5,c,3,5))
{
cout<<"illegal matrix multiply.\n";
return;
}

for(int i=0;i<3;i++)
{
for(int j=0;i<5;j++)
cout<<setw(5)<<c[i][j];
cout<<endl;
}
}

int multimatrix(int a[][4],int arow,int acol,int b[][5],int brow,int bcol,int c[][5],int crow,int ccol)
{
if(acol!=brow)return 1; //正确性检查
if(arow!=crow)return 1;
if(bcol!=ccol)return 1;

for(int i=0;i<crow;i++)
for(int j=0;i<ccol;j++)
for(int n=0;n<acol;n++)
c[i][j]+=a[i][n]*b[n][j];
return 0;
}

没错误,运行不出结果~帮忙看看~

另外问下:红色部分return;是跳出函数的意思吗?~

还有就是蓝色部分:
if(acol!=brow)return 1;
if(arow!=crow)return 1;
if(bcol!=ccol)return 1;
我觉得只要检查矩阵a和b就可以了,因为c此时还没出现,所以后2句不需要吧~

10 回复
#2
永夜的极光2007-10-15 08:19
就是结束的意思

c是传进来的参数,在程序开头已经定义了,所以必须要判断一下的
#3
六道2007-10-15 11:47

哦 ,谢谢LS的~

程序运行还是没有结果~LX的有时间帮忙看看~

#4
aipb20072007-10-15 13:21
mian函数里的return可以表示返回。

兰色部分检查也是必要的。

你的错误很幼稚并且是可以调试出来的。
for(int i=0;i<3;i++)
{
for(int j=0;i<5;j++)


for(int i=0;i<crow;i++)
for(int j=0;i<ccol;j++)


就是这两个地方,好好看看你的循环变量。
#5
远去的列车2007-10-15 13:32
都是笔误

[此贴子已经被作者于2007-10-15 13:33:50编辑过]


#6
六道2007-10-15 13:33
以下是引用aipb2007在2007-10-15 13:21:21的发言:
mian函数里的return可以表示返回。

兰色部分检查也是必要的。

你的错误很幼稚并且是可以调试出来的。
for(int i=0;i<3;i++)
{
for(int j=0;i<5;j++)


for(int i=0;i<crow;i++)
for(int j=0;i<ccol;j++)


就是这两个地方,好好看看你的循环变量。

不好意思,自己也检查了很久,以后会仔细的

#7
aipb20072007-10-15 13:34
以下是引用远去的列车在2007-10-15 13:32:00的发言:
补充楼上的
c[i][j]+=a[i][n]*b[n][j];
其中c没初始化就用了,里面的值未知

c定义在main函数外,全局内置对象采用值初始化,也就是0,所以是可以的。

#8
远去的列车2007-10-15 13:36
呵呵,我测试时没把它设成全局变量了。。
#9
hhei2007-10-15 14:22

强汗!!!!!!你的
for(int i=0;i<crow;i++)
for(int j=0;i<ccol;j++)
for(int n=0;n<acol;n++)
c[i][j]+=a[i][n]*b[n][j];
红色部分是个j吧,这样导致数组越界,当然出错了啊

#10
china25qd2007-10-15 20:53
return一个什么东西?
#11
六道2007-10-16 13:44
以下是引用hhei在2007-10-15 14:22:10的发言:

强汗!!!!!!你的
for(int i=0;i<crow;i++)
for(int j=0;i<ccol;j++)
for(int n=0;n<acol;n++)
c[i][j]+=a[i][n]*b[n][j];
红色部分是个j吧,这样导致数组越界,当然出错了啊

别汗~~~擦把脸

1