c语言矩阵乘法c语言的乘法

c语言 两个矩阵乘积的问题_百度知道
c语言 两个矩阵乘积的问题
3,1},那么按照公式是不是不能求它们的乘积,数组b[3][2]={6?能形象的解释下矩阵的乘积么,3例如数组a[2][3]={1,2,如果求它们的乘积是不是为c[2][2],2,谢谢了,那么岂不是数组a和数组b都被舍弃两个元素数值么,5,如果是,b[3[4],4,6},5,4.假如a[2][3],还是说公式确实如此
提问者采纳
baidu.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="/zhidao/wh%3D450%2C600/sign=864f94f54a36acaf59b59ef849e9a126/fec08fa1c9dc46b58ee3d6d54fbda59.hiphotos.baidu,列数与后面一样。真正搞懂矩阵乘法是学会线性代数的重要环节.jpg" esrc="http!!即a[m][n] 和 b[n][q] 的结果是c[m][q].com/zhidao/wh%3D600%2C800/sign=a20cf446c5f6de/fec08fa1c9dc46b58ee3d6d54fbda59./zhidao/pic/item/fec08fa1c9dc46b58ee3d6d54fbda59://f,切记,且乘积的结果矩阵的行数与前面相同:注意到后面矩阵的行数必须等于前面矩阵的列数://f://f矩阵的乘法法则“左行乘右列”
提问者评价
其他类似问题
按默认排序
其他1条回答
a21×b11+a22×b21;a21;a31×b11+a32×b21,a32】(其中的分号为行分隔符,b22】两者乘积C(3×2)=【a11×b11+a12×b21,aij代表第i行j个元素)矩阵B(2×2)=【b11,a22;a31;b21,a21×b12+a22×b22,逗号为元素分隔符,b12,如下所示矩阵A(3×2)=【a11数组乘积和矩阵乘积一样,a12,a11×b12+a12×b22
意思是矩阵的乘积不受行列限制了?
不是,如2×3的矩阵只能和3×n(n=1,2,3,4,。。。。。)的矩阵相乘,第一个矩阵的列必须和第二个矩阵的行相等
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁问题描述:
编写程序,可以实现m*n矩阵和n*p矩阵相乘。m,n,p均小于10,矩阵元素为整数。
首先我们可以根据题意写出函数头。可以定为void MatrixMutiply(int m,int n,int p,long lMatrix1[MAX][MAX],long lMatrix2[MAX][MAX],long lMatrixResult[MAX][MAX]),其中lMatrix1和lMatrix2分别是输入的m*n矩阵和n*p矩阵,lMatrixResult是输出的m*p矩阵。
因为m,n和p都是未知量,要进行处理的矩阵大小是变量。但我们可以定义比较大的二维数组,只使用其中的部分数组元素。
矩阵相乘的算法比较简单,输入一个m*n矩阵和一个n*p矩阵,结果必然是m*p矩阵,有m*p个元素,每个元素都需要计算,可以使用m*p嵌套循环进行计算。
根据矩阵乘法公式:
可以用循环直接套用上面的公式计算每个元素。嵌套循环内部进行累加前,一定要注意对累加变量进行清零。
问题中的常量:
#define MAX 10& /*矩阵最大行数和列数*/
问题的输入:
int m,n,p;&& /*相乘的两个矩阵的行列数*/
long lMatrix1[MAX][MAX],lMatrix2[MAX][MAX]; /*相乘的两个矩阵*/
问题的输出:
long lMatrixResult[MAX][MAX];&&& /*矩阵相乘后得到的矩阵*/
1.输入两个矩阵的的行列数m,n,p;
2.输入第一个矩阵的每个元素;
3.输入第二个矩阵的每个元素;
4.调用函数进行乘法运算,结果放在lMatrixResult 中;
5. 打印输出结果矩阵。
算法的步骤4计算两个矩阵的乘法算法如下:
4.1 定义循环变量i,j,k;
4.2 嵌套循环计算结果矩阵(m*p)的每个元素。
程序代码如下:
#define MAX 10
void MatrixMutiply(int m,int n,int p,long lMatrix1[MAX][MAX],
long lMatrix2[MAX][MAX],long lMatrixResult[MAX][MAX])
int i,j,k;
/*嵌套循环计算结果矩阵(m*p)的每个元素*/
for(i=0;i&m;i++)
& for(j=0;j&p;j++)
&& /*按照矩阵乘法的规则计算结果矩阵的i*j元素*/
&& lSum=0;
&& for(k=0;k&n;k++)
&&& lSum+=lMatrix1[i][k]*lMatrix2[k][j];
&& lMatrixResult[i][j]=lS
long lMatrix1[MAX][MAX],lMatrix2[MAX][MAX];
long lMatrixResult[MAX][MAX],lT
int i,j,m,n,p;
/*输入两个矩阵的的行列数m,n,p*/
printf(&\nPlease input m of Matrix1:\n&);
scanf(&%d&,&m);
printf(&Please input n of Matrix1:\n&);
scanf(&%d&,&n);
printf(&Please input p of Matrix2:\n&);
scanf(&%d&,&p);
/*输入第一个矩阵的每个元素*/
printf(&\nPlease elements of Matrix1(%d*%d):\n&,m,n);
for(i=0;i&m;i++)
& for(j=0;j&n;j++)
&& scanf(&%ld&,&lTemp);
&& lMatrix1[i][j]=lT
/*输入第二个矩阵的每个元素*/
printf(&\nPlease elements of Matrix2(%d*%d):\n&,n,p);
for(i=0;i&n;i++)
& for(j=0;j&p;j++)
&& scanf(&%ld&,&lTemp);
&& lMatrix2[i][j]=lT
/*调用函数进行乘法运算,结果放在lMatrixResult 中*/
MatrixMutiply(m,n,p,lMatrix1,lMatrix2,lMatrixResult);
/*打印输出结果矩阵*/
printf(&\nResult matrix: \n&);
for(i=0;i&m;i++)
& for(j=0;j&p;j++)
&& printf(&%ld &,lMatrixResult[i][j]);
& printf(&\n&);
程序运行结果如下:
Please input m of Matrix1:
Please input n of Matrix1:
Please input p of Matrix2:
Please elements of Matrix1(3*2):
Please elements of Matrix2(2*3):
Result matrix:
推荐文章 TOP10矩阵相加 两个矩阵相加 c语言 矩阵相乘 c语言求逆矩阵 c语言字符串相加 矩阵转置 ..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
C++矩阵相加
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口怎么用字符数组实现高位乘法啊_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:275,083贴子:
怎么用字符数组实现高位乘法啊收藏
已经实现了加法,怎么实现乘法呢,我的想法是把乘法转换成加法,可是就是写不出来,就算写了一点,都能把自己看乱了 下面是我写的加法。求高手教我乘法/*日 16:47:50目的:复习功能:用字符数组实现高位数的加法*/#include&stdio.h&#include&string.h&int main(){ int i,k=0,n=0,t,x,y,z;
char a[1001] ,b[1001],c[1001];
x=strlen(a);
y=strlen(b);
for(i=0;i&x/2;i++)//镜像变化
a[i]=a[x-i-1];a[x-i-1]=t;
for(i=0;i&y/2;i++)
b[i]=b[y-i-1];b[y-1-i]=t;
//让两个字符数组中的字符长度一样
{ for(i=y;i&x;i++)
b[i]='0';b[x]=0;
for(i=0;i&x;i++)
if(a[i]+b[i]-48+k&=57)//为什么要+k?
因为如果个位进1,而十位相加为9,那么就又要进1到百位,此时两数组之和&57,执行else
c[i]=a[i]+b[i]-48+k,k=0;else { c[i]=a[i]+b[i]-48-10+k;k=1;}//大于10;进1if (k==1) //for 循环结束后,k==1说明还要进1,所以要把'/0'结束标志往后移动,空出来的位置让给进上来的1{
} else c[x]=0;
for(i=x;i&y;i++)
a[y]=0; for(i=0;i&y;i++)
if(a[i]+b[i]-48+n&=57)
c[i]=a[i]+b[i]-48+n,n=0;else { c[i]=a[i]+b[i]-48-10+n;n=1;}if (n==1) {
} else c[y]=0;
} z=strlen(c);
for(i=0;i&z/2;i++){
c[i]=c[z-i-1];
c[z-i-1]=t;}puts(c);
}/*输入-----------------------------9876124-----------------------------*//* 结果是-----------------------------10000 -----------------------------
高精度算法网上一搜一堆看看去吧
你笔算怎么算,代码就怎么写,这是最基础的做法
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或求助:用指针实现矩阵的乘法以及转置应当怎么做~?_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:275,083贴子:
求助:用指针实现矩阵的乘法以及转置应当怎么做~?收藏
快试试吧,可以对自己使用挽尊卡咯~◆◆
我用二维数组做出后老师说不行,不满足通用性,要求用指针做谁能教教我谢谢~
你们老师说的是对任何一个N数组都适用吧。
矩阵怎么相乘,s*m,m*n俩相乘以后是s*n行矩阵是不,很麻烦的,你慢慢的做,指针和数组都差不多
快试试吧,可以对自己使用挽尊卡咯~◆◆
恩,我是何坤!!你是谁?
矩阵可以相乘不过...有....限制只有 PxQ
QxR 的矩阵才能相成
具体请看线性代数
快试试吧,可以对自己使用挽尊卡咯~◆◆
#include &stdio.h&//转置main(){float a[10000],*p; int n,i; p=a;printf("输入阶数");scanf("%d",&n);printf("按列输入矩阵");for(i=0;i&n*n;i++)&&
scanf("%f",p+i);for(i=0;i&n*n;i++)//按行输出
{ printf("%5.2f",p+i);&&&
if((i+1)%10==0)&&&&&&
printf("\n");&& }}
针对你们老师要求的,对于任意矩阵,使用MALLOC最好。
我感觉这更像cpp的题目
写一个矩阵的类
把转置加法乘法都封装了
二维矩阵不许用?那就用数组指针int* arr[100]这样的
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 99乘法表c语言 的文章

 

随机推荐