当前位置:首页 » 编程语言 » 矩阵a乘bc语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

矩阵a乘bc语言

发布时间: 2022-12-19 06:55:26

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语言中,矩阵a*b是什么意思,到底是谁乘谁呢

当然是 按照 数学上 矩阵 乘 的概念

矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义[1]。


Ⅲ c语言矩阵的乘法

#include<stdio.h>
typedef struct
{
int m;
int n;
int array[100][100];
}Ju_def;
int main()
{
Ju_def Ju[11];
int i=0,m,n,k;
int flag[10];
while(1)
{
flag[i]=0;
printf("In put m and n:\n");
scanf("%d%d",&Ju[i].m,&Ju[i].n);
while(Ju[i].m<=0||Ju[i].m>100||Ju[i].n<=0||Ju[i].m>100)
{
printf("In put m and n again:\n");
scanf("%d%d",&Ju[i].m,&Ju[i].n);
}
printf("In put your array:\n");
for(m=0;m<Ju[i].m;m++)
{
for(n=0;n<Ju[i].n;n++)

{
scanf("%d",&Ju[i].array[m][n]);
if(Ju[i].array[m][n]==0)
flag[i]++;
}
}
if(flag[i]==(Ju[i].m*Ju[i].n))//矩阵元素全为0才退出循环
{
flag[i]=1;
break;
}
else
flag[i]=0;
i++;
i=i%10;//超过10个矩阵,则又循环到第1个。
}
for(i=1;i<10;i++)
{
if((Ju[i].m!=Ju[0].n)&&(flag[i]==0))
{
printf("Not satisfied the definition of matrix multiplication !\n");
return 0;
}
if(flag[i])
{
break;
}
for(m=0;m<Ju[0].m;m++)
{
for(n=0;n<Ju[0].n;n++)
{
Ju[10].array[m][n]=0;
for(k=0;k<Ju[i].m;k++)
{
Ju[10].array[m][n]+=Ju[0].array[m][n]*Ju[i].array[k][n];
}
Ju[0].array[m][n]=Ju[10].array[m][n];
}
}
}
for(m=0;m<Ju[0].m;m++)
{
for(n=0;n<Ju[0].n;n++)
{
printf("%-8d",Ju[0].array[m][n]);
}
printf("\n");
}
}
你试试这个我的矩阵乘法是这样的了,A=A*B*C...(10个以内)。

Ⅳ C语言实现矩阵乘法

#include<stdio.h>
intp,q,k;
voidmain()
{
floatA[2][2]={1,1,2,1},B[2][1]={2,1};
floatC[2][1]={0};
printf("矩阵A*矩阵B为: ");//计算两个矩阵相乘;以[2][2]*[2][1]为例
for(p=0;p<2;++p)
{
for(q=0;q<1;++q)
{
for(k=0;k<2;++k)
C[p][q]+=A[p][k]*B[k][q];
}
}
for(p=0;p<2;p++){
for(q=0;q<1;q++)
{
printf("%f",C[p][q]);
printf(" ");
}
}
}

Ⅳ 用c语言实现两个矩阵相乘怎么做

1、程序运行输入数据时,第一行为A矩阵的行列数和B矩阵的行列数,接着分别输入A、B两个矩阵的值。

Ⅵ c语言求出矩阵a和矩阵b的乘积,结果存入矩阵c中,并按矩阵的形式将c打印输出。其中a是3行2列数组

#include<stdio.h>
intmain()
{
inta[3][2],b[2][4],c[3][4]={0},i,j,k,temp;
printf("输入数组a[3][2]: ");
for(i=0;i<3;i++)//初始数组a[3][2]的录入
for(j=0;j<2;j++)
scanf("%d",&a[i][j]);

printf("输入新的数组b[2][4]: ");
for(i=0;i<2;i++)//录入数组b[2][4]
for(j=0;j<4;j++)
scanf("%d",&b[i][j]);
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
temp=0;
for(k=0;k<2;k++)
temp+=a[i][k]*b[k][j];
c[i][j]=temp;
}
}
printf("a、b矩阵相乘后的c矩阵: ");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%d",c[i][j]);
printf(" ");
}
return0;
}

代码调试成功哈。。。

Ⅶ 两个矩阵a 和b 的乘积,结果为c 矩阵,求c 语言程序!

给,已经编译运行确认:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define X 3 //这里是矩阵的参数,可以自己定义,现在暂定的3*3矩阵
#define Y 3 //这里是矩阵的参数,可以自己定义,现在暂定的3*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;

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

Ⅷ c语言的矩阵乘法问题 初学者求助

//矩阵乘法属于线性代数;矩阵乘法的原理不难,只要原理搞请,代码很好写的

#include<stdio.h>

/*功能为计算给定的矩阵a(m行n列)和矩阵b(n行t列)的乘积矩阵c*/

void f(int a[3][4], int b[4][3], int c[3][3], int m, int n, int t) {

//矩阵乘法:前行乘后列

//矩阵a的行(m)作为矩阵c的行

//矩阵b的列(t)作为矩阵c的列

for (int i = 0; i < m; i++) {//新矩阵m行

for (int j = 0; j < t; j++) {//新矩阵t列

int sum=0;

for (int k = 0; k < n; k++) {

sum += (a[i][k] * b[k][j]);//行列对应相乘,然后累加

}

c[i][j]=sum;

}

}

}

/* 请在这里填写答案 */

/*

1 2 3 4

2 3 4 5

3 4 5 6

1 2 3

2 3 4

3 4 5

4 5 6

*/

int main() {

int i, j, a[3][4], b[4][3], c[3][3];

for (i = 0; i < 3; i++)

for (j = 0; j < 4; j++)

scanf("%d", &a[i][j]);

for (i = 0; i < 4; i++)

for (j = 0; j < 3; j++)

scanf("%d", &b[i][j]);


f(a, b, c, 3, 4, 3);

for (i = 0; i < 3; i++) {

for (j = 0; j < 3; j++)

printf("%5d", c[i][j]);

printf(" ");

}

}

Ⅸ C语言中两矩阵相乘

#include <stdio.h>
int main()
{
int x,y,z;
int i,j,l;
int sum=0;
printf("请输入前一个矩阵的行数,列数与后一个矩阵的列数:\n");
scanf("%d %d %d",&x,&y,&z);
int a[x][y];
int b[y][z];
int c[x][z];
//读入矩阵
printf("请输入矩阵a:\n");
for(i=0;i<x;i++){
for(j=0;j<y;j++){
scanf("%d",&a[i][j]);
}
}
printf("请输入矩阵b:\n");
for(i=0;i<y;i++){
for(j=0;j<z;j++){
scanf("%d",&b[i][j]);
}
}
printf("矩阵a为:\n");
for(i=0;i<x;i++){
for(j=0;j<y;j++){
printf("%d",a[i][j]);
if(j==y-1)
printf("\n");
else
printf("\t");
}
}
printf("矩阵b为:\n");
for(i=0;i<y;i++){
for(j=0;j<z;j++){
printf("%d",b[i][j]);
if(j==z-1)
printf("\n");
else
printf("\t");
}
}
for(i=0;i<x;i++){
for(l=0;l<z;l++){
for(j=0;j<y;j++){
sum+=a[i][j]*b[j][l];
if(j==y-1){
c[i][l]=sum,sum=0;
}
}
}
}
printf("矩阵a与矩阵b的乘积为:\n");
for(i=0;i<x;i++){
for(j=0;j<z;j++){
printf("%d",c[i][j]);
if(j==z-1)
printf("\n");
else
printf("\t");
}
}

return 0;
}

Ⅹ 写出矩阵a矩阵b的乘积是矩阵c的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");
}
}