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

[求助]实现两个二维数组的相乘,我已经尽了自己的力了。。

patrick0018 发布于 2007-06-28 16:20, 4164 次点击

1,老师要求实现两个二维数组的相乘,没有说明是否是维数和各维长度都相等的两个二维数组,也没说明相乘后是按如何情况输出,所以我首先在题目上有了疑惑。
2,暂且认为是维数和各维长度都相等的两个二维数组,用一维数组输出,小弟进行以下实现代码:
#include "stdafx.h"
#include "stdlib.h"
#define hg 3
#define sg 4

int Xiangcheng(int a[hg][sg],int b[hg][sg],int x,int y)
{
int c[x*y];
int i,j,k;
for(i=0;i<x;i++,k+y)
for(j=0,k=0;j<y;j++,k++)
c[k]=a[i][j]*b[i][j];
for(i=0;i<x*y;i++)
printf("%d",c[i]);
}

void main(int argc, char* argv[])
{
int a[hg][sg],b[hg][sg];
int i,j,k;
printf("数组a为: 数组b为: ");
for(i=0;i<hg;i++,k+sg)
for(j=0,k=1;j<sg;j++,k++)
{
a[i][j]=k; b[i][j]=k+3;
printf("%5d %5d",a[i][j],b[i][j]);
}
Xiangcheng(a[i][j],b[i][j],hg,sg);
}

此代码是在VC++状态下编写的。
结果是错误大堆。。。。请大侠帮帮忙!!!谢谢了!!!

[此贴子已经被作者于2007-6-28 16:23:44编辑过]

6 回复
#2
gdzhan2007-06-28 16:51

是相当于array[i][j] * array1[i][j]吧,两个循环

#3
野比2007-06-28 19:44
回忆下矩阵乘法是怎么做的.. 你就知道该怎么写了..
#4
游乐园2007-06-29 11:10

回忆一下矩阵相乘的规则..好像是线性代数中学过 ... 先写个给你参考下

程序代码:

#include<iostream>
#include<iomanip>
#include<ctime>
using namespace std;
void matrixShow(int **array,int row,int col);


int main()
{
    register int i, j, k;
//m and n is the dimension of matrix A,respectly
//p and q is the dimension of matrix B,respectly
//so the dimension of matrix C is designated by m and q
int m, n, p, q;
srand((unsigned) time(NULL));
do
{
cin>>m>>n>>p>>q;
} //the relathionship of dimension should act on the rule of matrix multiply
while (m != q && n != p);


//dymanic 2D array generated, a[][], b[][] and c[][]
int **b = new int*[p];  
for (i = 0; i < p; ++i)
{   
  b[i] = new int[q];
  for(j = 0; j < n; ++j)
    b[i][j] = rand()%10;
}

int **a = new int*[m];  
int **c = new int*[m];
for(i = 0; i< m; ++i)   
{
  a[i] = new int[n];
  c[i] = new int[q];
  for (j = 0; j < n; ++j)
   a[i][j] = rand()%10;
  for (k = 0; k < q; ++k)
   c[i][k] = 0;
}


matrixShow(a, p, q); //display matrix A
matrixShow(b, m ,n); //display matrix B


for (i = 0; i < m; ++i)
  for (j = 0; j < q; ++j)
   for (k = 0; k < q; ++k)
     c[i][j] += a[i][k]*b[k][j]; //implement C=A×B


    matrixShow(c,m,q); //display matrix C


   
    for (i = 0; i < m; ++i)   
{
   delete[] a[i];
      delete[] c[i];
}


    for (i = 0; i < p; ++i) delete[] b[i];


    return 0;
}


void matrixShow(int **array,int row,int col)
{
for (int i = 0; i < row; cout<<endl, ++i)


  for (int j = 0; j < col; ++j)
   cout<<setw(4)<<array[i][j];
cout<<endl;
}

#5
aipb20072007-06-29 12:03
嘿嘿,锯阵相乘,三个嵌套循环。
#6
patrick00182007-07-03 20:02
回复:(patrick0018)[求助]实现两个二维数组的相乘,...
#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];
}
}
#7
patrick00182007-07-03 20:06
回复:(patrick0018)[求助]实现两个二维数组的相乘,...

#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(); // 这个函数MS C++不支持
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