c++中,设计矩阵相乘,能不能帮我看看有什么错误,谢谢了!

//在主函数中输入两个矩阵的元素//把这两个矩阵传递给一个函数,这个函数计算这两个矩阵的乘//在主函数中输入结果矩阵#include<iostream>usingname... //在主函数中输入两个矩阵的元素
//把这两个矩阵传递给一个函数,这个函数计算这两个矩阵的乘
//在主函数中输入结果矩阵
#include <iostream>
using namespace std;

//乘
int cheng (int a[3][4]) {
for (int i=0;i<3;i++){
for (int j=0;j<4;j++)
a[i][j]=table1[i][j]*table2[j][i];
}
return a[i][j];
}
//再加
int sum (int b[][4],int nRow) {
for (int i=0;i<nRow;i++) {
for (int j=0;j<4;j++)
b[i][j]+=a[i][j];

}
return b[i][j];
}

int main() {
int table1 [3][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0}};
int table2 [4][4]={{2,0,0,0},{0,1,2,0},{0,0,1,2},{1,0,0,1}};
cheng(table1,table2);
sum(b,3);
for (int i=0;i<3;i++) {
for (int j=0;j<4;j++)
cout<<b[i][j]<<" ";
cout<<endl;
return 0;
}
展开
 我来答
719558527
2014-05-26 · TA获得超过110个赞
知道答主
回答量:45
采纳率:0%
帮助的人:37.8万
展开全部
#include<iostream>
#include<vector>
using namespace std;
class matrix
{
    private:
        int nrow,ncol;
        vector<int> data;
    public:
        friend istream& operator>>(istream& ,matrix&);
        friend ostream& operator<<(ostream& ,matrix&);
        friend matrix operator*(matrix&,matrix&);
        matrix(){
            nrow=0;
            ncol=0;
            data.clear();
        }
        matrix(int n1,int n2){
            nrow=n1;
            ncol=n2;
            data.resize(n1+n2+1);
        }
        void resize(int m,int n){
            nrow=m;
            ncol=n;
        }
};
matrix operator*(matrix& m1,matrix& m2){
    if(m1.ncol!=m2.nrow){
        std::cerr<<"Error: In function operator* matrix m1's ncol is not equeal matrix m2's nrow\n";
        return matrix(0,0);
    }
    matrix rm(m1.nrow,m2.ncol);
    for(int i=0;i<rm.nrow;i++)
        for(int j=0;j<rm.ncol;j++){
            rm.data[i*rm.ncol+j]=0;
            for(int k=0;k<m1.ncol;k++)
                rm.data[i*rm.ncol+j]=rm.data[i*rm.ncol+j]+m1.data[i*m1.ncol+k]*m2.data[k*m2.ncol+j];
        }
    return rm;
}
istream& operator>>(istream& is,matrix& m){
    int tem;
    m.data.clear();
    for(int i=0;i<m.nrow;i++)
        for(int j=0;j<m.ncol;j++){
            is>>tem;
            m.data.push_back(tem);
        }
    return is;
}
ostream& operator<<(ostream& os,matrix& m){
    for(int i=0;i<m.nrow;i++){
        for(int j=0;j<m.ncol;j++)
            cout<<m.data[i*m.ncol+j]<<"\t";
        cout<<"\n";
    }
    return os;
}
int main()
{
    matrix m1(1,2),m2(2,2),m3;
    std::cout<<"Please input matrix 1:\n";
    std::cin>>m1;
    std::cout<<"Please input matrix 2:\n";
    std::cin>>m2;
    std::cout<<"matrix1:\n"<<m1;
    std::cout<<"matrix2:\n"<<m2;
    m3=m1*m2;
    std::cout<<"matrix1*matrix2\n"<<m3;
}
//我曾经写了matrix的类,在此修改了一下,实现两个矩阵的乘法,仅供参考
更多追问追答
追问
谢谢,但是运行不了啊==
3.obj - 1 error(s), 0 warning(s)
追答
有什么错误提示吗? 我在Ubuntu系统下测试过的,可以运行.
在windows系统下,前两行可能要改一下

#include
#include
改成
#include
#include

第21行
data.resize(n1+n2+1);
可以改成
data.resize(n1+n2);
这个是我写代码没考虑准确,但都能运行
旅春冬TJ
2014-05-26 · TA获得超过1082个赞
知道大有可为答主
回答量:1271
采纳率:66%
帮助的人:502万
展开全部
我想说你根本连基本的编程规则都还没有了解,比如变量的作用域问题,变量的作用域在函数本身,除非变量是全局变量。你怎么可以在你的函数里面没有传入参数的情况下直接调用mian函数的变量table1,table2,另外你的加函数里面根本没有出现a这个变量,怎么可以用来加呢。所以你不懂编程。
追问
嗯,这是我帮朋友问的,但是,我们都是新手,所以不懂怎么改,是参照书上一点一点打得,如果能给我们个示范就真的太谢谢您了!
追答
你想改进这个程序,还是只是要使用矩阵的相关操作。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
woshien10
2014-05-26 · TA获得超过248个赞
知道答主
回答量:145
采纳率:40%
帮助的人:37.1万
展开全部
问题 太多了 第一个函数里面 i j 你定义在for里面 for结束了i j 就没了 后面返回的a[i][j]就找不到了 还有中间的for里面用到的table 你定义在main里面是不行的 如果要直接用 请定义在这个函数的前面 写外面就好 看下面 你cheng 和sum 都没有接受返回值 我想你是不需要吧 那这两个函数就定义为void就好 retuen 去掉 第二个函数里面用到a是找不到的 还有 main里面的Bb 你也根本没定义 最后的第一个for后面的{ 怎么只有半边 问题太多了 乱七八糟的 我看到什么说什么 也没整理 好好看下编程规则再来写吧
追问
嗯,这是我帮朋友问的,但是,我们都是新手,所以不懂怎么改,是参照书上一点一点打得,如果能给我们个示范就真的太谢谢您了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式