㈠ C语言:编写完整程序:计算两个矩阵的乘积。
#include
"stdio.h"
#include
"stdlib.h"
void
main
()
{
int
m,l,p,q;
printf("输入第一个矩阵的维数m和l:\n");
scanf("%d%d",&m,&l);
printf("输入第二个矩阵的维数p和q:\n");
scanf("%d%d",&p,&q);
while
(l!=p)
{
printf("两个矩阵不匹配,不能进行相乘运算,请重新输入...\n\n");
printf("输入第一个矩阵的维数m和l:\n");
scanf("%d%d",&m,&l);
printf("输入第二个矩阵的维数p和q:\n");
scanf("%d%d",&p,&q);
}
double
a[200][200]={0},
b[200][200]={0},sum=0;
int
i,j,k=0;
for
(i=0;i<m;i++)
{
for
(j=0;j<l;j++)
{
a[i][j]=(double)rand()/RAND_MAX;
}
}
printf("随机矩阵a是:\n");
for
(i=0;i<m;i++)
{
for
(j=0;j<l;j++)
{
printf("%f
",a[i][j]);
}
printf("\n");
}
//cout<<"输入一个3*2的矩阵:"<<endl;
for
(i=0;i<p;i++)
{
for
(j=0;j<q;j++)
{
b[i][j]=(double)rand()/RAND_MAX;
}
}
printf("随机矩阵b是:\n");
for
(i=0;i<p;i++)
{
for
(j=0;j<q;j++)
{
printf("%f
",b[i][j]);
}
printf("\n");
}
printf("ab相乘结果为:\n");
for
(i=0;i<m;i++)
{
while
(k<q)
{
for
(j=0;j<q;j++)
{
sum
=
a[i][j]*b[j][k]+sum;
}
printf("%f
",sum);
k++;
sum=0;
}
k=0;
printf("\n");
}
}
㈡ 两个二阶矩阵相乘怎么算
矩阵相乘需要前面矩阵的行数与后面矩阵的列数相同方可相乘。
第一步先将前面矩阵的每一行分别与后面矩阵的列相乘作为结果矩阵的行列。
第二步算出结果即可。
第一个的列数等于第二个的行数,A(3,4) 。B(4,2) 。C=AB,C(3,2)。
(2)两个n阶矩阵的乘积算法代码扩展阅读:
矩阵相乘最重要的方法是一般矩阵乘积。只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 。
一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。
㈢ 怎样将两个二维数组相乘代码是什么
两个数组相乘即是矩阵的乘法。
只有满足一定条件的两个矩阵才能相乘,其结果仍是矩阵。
a(m,n)*b(n,k)=c(m,k)
矩阵c中的每个元素按下式计算:
c[i,j]=sum( a[i,x]*b[x,j] ) (x=1..n)
㈣ c语言中两个矩阵的乘积、求和算法
就是两个二维数组 a[i][j],b[m][n]; 再循环嵌套啊 很简单啊
㈤ 计算两个三阶行列式相乘的c语言代码
#include<stdio.h>
voidmain()
{
inti,j,k=0;//一位数组初始化
inta[9]={12,34,23,34,45,34,35,45,34};
intb[9]={45,26,34,45,87,34,98,45,90};
//输出一位数组a[9]b[9]
printf("a[9]:");
for(i=0;i<9;i++)
printf("%d",a[i]);printf(" ");
printf("b[9]:");
for(i=0;i<9;i++)
printf("%d",b[i]);
//定义3*3二维数组
intc[3][3];
//依照3*3矩阵格式打印结果
printf(" 结果为: ");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
//两个一位数组相乘的结果存入二维数组c[3][3]
c[i][j]=a[k]*b[k];
//k的主要目的是控制a[k]*b[k],
//这样可以取出a[0]-a[8],b[0]-[8]的值相乘存入数组
k++;
//%-6d只是控制输出格式好看点,没什么作用,直接写%d就可以
printf("%-6d",c[i][j]);
}
printf(" ");
}
}
㈥ 两个矩阵相乘算法
矩阵相乘需要前面矩阵的行数与后面矩阵的列数相同方可相乘。
第一步先将前面矩阵的每一行分别与后面矩阵的列相乘作为结果矩阵的行列。
(6)两个n阶矩阵的乘积算法代码扩展阅读:
矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。
1、当矩阵A的列数等于矩阵B的行数时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
㈦ 编写一个C函数实现两个n阶矩阵相乘。
float a[n1][m];
float b[m][n2];
float s[n1][n2];
for(w=0;w<n1;w++)
{
for(j=0;j<n2;j++)
{
for(i=0;i<m;i++)
{
s[n1][n2]+=a[n1][m]*b[m][n2];
}
}
}
n1=n2=m时,就是两个m阶方阵的乘积。
㈧ C语言题,求两个矩阵的乘积
简单题,按照矩阵的定义去做即可
源代码如下
//#pragma GCC diagnostic error"-std=c11"
#include<stdlib.h> //有随机数库
#include<malloc.h>
#include<time.h> //用于产生随机数种子
#include<math.h>
#include<string.h>
#include<stdio.h>
#define ELE int
typedef struct Metrix {
ELE *A;
int row, col;
}Metrix;
//初始化矩阵
void init(Metrix *M, int row, int col, int auto_read) {
M->A = (ELE*)calloc(row*col, sizeof(ELE));
M->row = row;
M->col = col;
if (auto_read) {
int i, size = row*col;
for (i = 0; i<size; i++)
scanf("%d", M->A + i);
}
}
#define IDX(M,r,c) (r*(M->col)+c)
ELE* get(Metrix *M, int r, int c) {
return M->A + IDX(M, r, c);
}
int main()
{
int m, l, n, i, j, k;
scanf("%d%d%d", &m, &l, &n);
Metrix L, R;
init(&L, m, l, 1);
init(&R, l, n, 1);
// init(M,m,n,0);
//矩阵乘法走起
for (i = 0; i<m; i++) {
for (j = 0; j<n; j++) {
ELE *lp = get(&L, i, 0), *rp = get(&R, 0, j);
ELE out = 0;
for (k = 0; k<l; k++) {
out += *(rp)*lp[k];
rp += n; //rp换下一行
}
printf("%d ", out);
}
printf(" "); //删去空格再换行。
}
return 0;
}
㈨ 用c语言实现两个矩阵相乘怎么做
1、程序运行输入数据时,第一行为A矩阵的行列数和B矩阵的行列数,接着分别输入A、B两个矩阵的值。
㈩ 为什么 两个n阶矩阵相乘所需的运算次数为n的3次方
n阶矩阵相乘后得到的还是n阶矩阵,所以结果中就有n平方个元素,每个元素都是由2n个数两两相乘得到,即n次运算,所以是n的三次方。
次方有两种算法。
第一种是直接用乘法计算,例:3⁴=3×3×3×3=81
第二种则是用次方阶级下的数相乘,例:3⁴=9×9=81
任何非零数的0次方都等于1。原因如下
通常代表3次方
5的3次方是125,即5×5×5=125
5的2次方是25,即5×5=25
5的1次方是5,即5×1=5
由此可见,n≧0时,将5的(n+1)次方变为5的n次方需除以一个5,所以可定义5的0次方为:
5 ÷ 5 = 1