注册 登录
编程论坛 VC++/MFC

初学c++ 两矩阵相加 求助!!!

sun004715 发布于 2010-11-06 11:14, 3475 次点击
题目: 有两个矩阵 a 和 b ,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加。如:c = a + b。

我编的程序如下 请大牛 帮忙改改:
/*
 * Array.cpp
 *
 *  Created on: 2010-11-5
 *      Author: sun
 */

#include <iostream>
using namespace std;

class Complex
{
public:
    Complex()
    {
        int a[2][3] = {{0, 0, 0}, {0, 0, 0}};
    }

    Complex(int m[2][3])
    {
        a[2][3] = m[2][3];
    }
    void display(void);
    Complex operator + (Complex&);
private:
    int a[2][3];
};

Complex Complex :: operator + (Complex &c1)
        {
            int temp[2][3];
            for (int i=0; i<2; i++)
                for (int j=0; i<3; i++)
                {
                    temp[2][3] =(a[i][j] + c1.a[i][j]);
                }
            return Complex(temp[2][3]);
        }

void Complex :: display(void)
{
    cout << a[2][3];
}

int main(void)
{
    int member1[2][3] = {{1, 1, 1}, {1, 1, 1}};
    int member2[2][3] = {{2, 2, 2}, {2, 2, 2}};

    Complex a(member1[2][3]), b(member2[2][3]), c;
    c = a + b;
    c.display();
}


6 回复
#2
cnfarer2010-11-06 17:38
    Complex(int m[2][3])
    {
        a[2][3] = m[2][3];
    }
这个定义不行吧!!!(a[2][3] = m[2][3];能达到什么目的?)
#3
lurrass2010-11-06 19:29
#include <iostream>
using namespace std;

class Complex
{
public:
    Complex()
    {
        int a[2][3] = {{0, 0, 0}, {0, 0, 0}};
    }

    Complex(int m[2][3])
    {
        a[2][3] = m[2][3];
    }
    void display(void);
    Complex operator + (Complex&);
private:
    int a[2][3];
};

Complex Complex :: operator + (Complex &c1)
        {
            int temp[2][3];
            for (int i=0; i<2; i++)
                for (int j=0; i<3; i++)
                {
                    temp[2][3] =(a[i][j] + c1.a[i][j]);
                }
            return Complex(temp[2][3]);
        }

void Complex :: display(void)
{
    cout << a[2][3];
}

int main(void)
{
    int member1[2][3] = {{1, 1, 1}, {1, 1, 1}};
    int member2[2][3] = {{2, 2, 2}, {2, 2, 2}};

    Complex a(member1[2][3]), b(member2[2][3]), c;
    c = a + b;
    c.display();
}

#4
sun0047152010-11-06 21:54
谢谢cnfarer !! 我把那儿改了 但后面还是有错
/*
 * Array.cpp
 *
 *  Created on: 2010-11-5
 *      Author: sun
 */

#include <iostream>
using namespace std;

class Complex
{
public:
    Complex()
    {
        int a[2][3] = {{0, 0, 0}, {0, 0, 0}};
    }

    Complex(int m[2][3])
    {
        for (int i=0; i<2; i++)
            for (int j=0; i<3; i++)
        a[i][j] = m[i][j];
    }
    void display(void);
    Complex operator + (Complex&);
private:
    int a[2][3];
};

Complex Complex :: operator + (Complex &c1)
        {
            int temp[2][3];
            for (int i=0; i<2; i++)
                for (int j=0; i<3; i++)
                {
                    temp[2][3] =(a[i][j] + c1.a[i][j]);
                }
            return Complex(temp[2][3]);//这句错 ..\Array.cpp:39: error: invalid conversion from `int' to `int (*)[3]'
                                                //..\Array.cpp:39: error:   initializing argument 1 of `Complex::Complex(int (*)[3])'
        }

void Complex :: display(void)
{
    cout << a[2][3];
}

int main(void)
{
    int member1[2][3] = {{1, 1, 1}, {1, 1, 1}};
    int member2[2][3] = {{2, 2, 2}, {2, 2, 2}};

    Complex a(member1[2][3]), b(member2[2][3]), c;//这句错
                                                    //..\Array.cpp:52: error: invalid conversion from `int' to `int (*)[3]'
                                                    //..\Array.cpp:52: error:   initializing argument 1 of `Complex::Complex(int (*)[3])'
    c = a + b;
    c.display();
}


#5
cymtl8623272010-11-07 00:16
看你给的提示,应该是函数的参数有错吧!?
定义构造函数Complex(int m[2][3])时,形参是一个整形数组,而在调用含参构造函数( Complex(temp[2][3]);Complex a(member1[2][3]), b(member2[2][3]) )时传入的实参只是一个整数。
看看多维数组(整体)引用这一块吧,看有帮助么!?
呵呵、、
#6
sun0047152010-11-07 20:01
回复 5楼 cymtl862327
谢谢  很有帮助
#7
jch85285632010-11-08 11:33
#include<stdio.h>
#include<conio.h>
#include <stdlib.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();
    system("cls");
    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];
        }
}

1