标题:[求助]实现两个二维数组的相乘,我已经尽了自己的力了。。
只看楼主
patrick0018
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-6-26
 问题点数:0 回复次数:6 
[求助]实现两个二维数组的相乘,我已经尽了自己的力了。。

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编辑过]

搜索更多相关主题的帖子: 相乘 int quot define include 
2007-06-28 16:20
gdzhan
Rank: 2
等 级:论坛游民
帖 子:90
专家分:14
注 册:2007-4-15
得分:0 

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


2007-06-28 16:51
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
得分:0 
回忆下矩阵乘法是怎么做的.. 你就知道该怎么写了..

女侠,约吗?
2007-06-28 19:44
游乐园
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:671
专家分:0
注 册:2006-11-1
得分:0 

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

程序代码:

#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;
}


unicorn-h.spaces. ◇◆ sava-scratch.spaces.
2007-06-29 11:10
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 
嘿嘿,锯阵相乘,三个嵌套循环。

Fight  to win  or  die...
2007-06-29 12:03
patrick0018
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-6-26
得分:0 
回复:(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];
}
}

菜鸟上路..贵在努力.. 加油!!!
2007-07-03 20:02
patrick0018
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-6-26
得分:0 
回复:(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];
}
}
这个是最新找到的..上面那个有点错..汗


菜鸟上路..贵在努力.. 加油!!!
2007-07-03 20:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-151065-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.352554 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved