求高手帮忙用c语言求出两个矩阵的乘积
如图:请高手帮忙还有请高手看下我自己这个#include"stdafx.h"intmain(){inta[2][3]={1,2,3,4,5,6},b[3][2]={4,2...
如图:请高手帮忙
还有请高手看下我自己这个
#include "stdafx.h"
int main()
{
int a[2][3]={1,2,3,4,5,6},b[3][2]={4,2,3,0,1,7},c=1,x,y;
for(x=0;x<2;x++)
{for(y=0;y<3;y++);c*=a[x][y]*b[y][x];printf("%d\n",c);}
}
有0的情况下还得出的是两个值,问题是出在哪里了 展开
还有请高手看下我自己这个
#include "stdafx.h"
int main()
{
int a[2][3]={1,2,3,4,5,6},b[3][2]={4,2,3,0,1,7},c=1,x,y;
for(x=0;x<2;x++)
{for(y=0;y<3;y++);c*=a[x][y]*b[y][x];printf("%d\n",c);}
}
有0的情况下还得出的是两个值,问题是出在哪里了 展开
5个回答
展开全部
矩阵乘法:2*3矩阵a与3*2矩阵b相乘得到一个2*2矩阵c,其中:
其中k表示矩阵a的列数和矩阵b的行数;
故有如下代码:
#include<stdio.h>
int main(){
int a[2][3]={1,2,3,4,5,6};
int b[3][2]={4,2,3,0,1,7};
int c[2][2]={0};
int i,j,k;
for(k=0;k<2;k++){
for(i=0;i<2;i++){
for(j=0;j<3;j++){
c[k][i]+=a[k][j]*b[j][i];
}
}
}
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("c[%d][%d]=%d ",i,j,c[i][j]);
}
printf("\n");
}
}
你没得到正确结果的关键在于:对矩阵乘法规则不是很清楚
追问
谢谢你的回答,但是我看完你这个还有一个问题,你这里k i都是<2,而j<3,那意思不不就是每组数都被舍去了 两个数么,还是说矩阵乘法就是这样的规则,说实话我对矩阵乘法确实不了解了.
追答
只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×n的矩阵a(m,n)左乘一个n×p的矩阵b(n,p),会得到一个m×p的矩阵c(m,p)。这个就是矩阵乘法的定义。就你这个题目而言,左侧矩阵是2*3(2行3列),右侧矩阵是3*2,所以他们的乘积是2*2.并不是你理解的两个数被舍弃了。
仔细研究这个题目可以发现:k只是作为左侧矩阵的行,i只是做右侧矩阵的列,而左侧矩阵的列和右侧矩阵的行(数值均为3)均由j来表示,而j恰好能表示三个数,所以并没有任何数据被舍弃。
你可以根据矩阵乘法定义,用笔在纸上实现一下矩阵乘法:将每个结果一步步实现出来,有助于你的理解!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include "stdio.h"
void main()
{
int a[2][3]={1,2,3,4,5,6},b[3][2]={4,2,3,0,1,7},c=0,c1=0,x,y,n=0;
for(x=0;x<2;x++)
{
for(y=0;y<3;y++){
c+=a[x][y]*b[y][x];
n++;
}
if(x==0){
for(y=0;y<3;y++){
c1+=a[x][y]*b[y][x+1];}
}else{
for(y=0;y<3;y++){
c1+=a[x][y]*b[y][x-1];}
}
printf("%d\t%d\n",c,c1);
c=0;
c1=0;
}
}
void main()
{
int a[2][3]={1,2,3,4,5,6},b[3][2]={4,2,3,0,1,7},c=0,c1=0,x,y,n=0;
for(x=0;x<2;x++)
{
for(y=0;y<3;y++){
c+=a[x][y]*b[y][x];
n++;
}
if(x==0){
for(y=0;y<3;y++){
c1+=a[x][y]*b[y][x+1];}
}else{
for(y=0;y<3;y++){
c1+=a[x][y]*b[y][x-1];}
}
printf("%d\t%d\n",c,c1);
c=0;
c1=0;
}
}
追问
{
int a[2][3]={1,2,3,4,5,6},b[3][2]={4,2,3,0,1,7},c=0,c1=0,x,y,n=0;
for(x=0;x<2;x++)
{
for(y=0;y<3;y++){
c+=a[x][y]*b[y][x];
n++;(这里的n++是做什么的,记录循环次数?)
}
if(x==0)(这里算是把x的值定为常量0了吧)
追答
这个程序仅对本题有效,再循环过程,x只有0,1俩个值,if(x==0)只作判断,没有改变x旳值,n记录循环次数,可以舍去
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数学都忘了,真想帮你,可是都忘掉了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询