当前位置:首页 » 编程语言 » c语言两矩阵相乘

c语言两矩阵相乘

发布时间: 2022-04-23 00:18:21

c语言编程求矩阵乘积

#defineMAX50
#defineMMAX
#defineNMAX
#defineTMAX
#defineSMAX

intMult(doublea[][N],intm,intn,doubleb[][T]ints,intt,doublec[][T]){
inti,j,k;
if(n!=s){
printf("两矩阵相乘,左矩阵的列数与右矩阵的行数必须相等。 ");
return0;
}
intc;
tmp.m_Mat=newdouble*[tmp.m_Rows];
for(inti=0;i<tmp.m_Rows;i++)tmp.m_Mat[i]=newdouble[tmp.m_Cols];
for(i=0;i<m;++i){
for(j=0;j<n;++j){
c[i][j]=0;
for(k=0;k<t;++k)
c[i][j]+=c[i][k]*c[k][j];
}
}
return1;
}

② c语言两个矩阵相乘的程序怎么写

#include<stdio.h>
main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9 };
int b[3][3]={1,2,3,4,5,6,7,8,9 };
int c[3][3]; int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
c[i][j]=a[i][j]*b[i][j];
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%d\t",c[i][j]);
printf("\n");}
}

是这样吗

③ 求高手帮忙用c语言求出两个矩阵的乘积

1、首先打开编程软件,新建一个项目,添加一个double.cpp文件,如图所示。

④ 用C语言写一个两个矩阵相乘的函数

自己看看吧,可以同时都换成注释的行,有助于你理解参数传递
:)======================================================
#include<stdio.h>
#define M 5
#define P 4
#define N 3
void mltp(float (*a)[P],float (*b)[N],float (*c)[N])
//void mltp(float *a,float *b,float *c)
{
for(int i=0;i<M;i++)
for(int j=0;j<N;j++)
for(int k=0;k<P;k++)
c[i][j]+=a[i][k]*b[k][j];
//c[i*N+j]+=a[i*P+k]*b[k*N+j];
}

void main()
{
int i,j;
float a[M][P],b[P][N];
float c[M][N]={0};
printf("plz input a,b:\n");
for(i=0;i<M;i++)
for(j=0;j<P;j++)
scanf("%f",&a[i][j]);
for(i=0;i<P;i++)
for(j=0;j<N;j++)
scanf("%f",&b[i][j]);
mltp(a,b,c);
//mltp(&a[0][0],&b[0][0],&c[0][0]);//等
//mltp((float*)a,(float*)b,(float*)c);//价
printf("result is:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%f\t",c[i][j]);
printf("\n");
}
}

⑤ C语言实现矩阵乘法

1,若程序定义为三行三列的矩阵,并在主函数中键盘赋值。请编写函数juzhen(int a[][3],int n),函数功能是:使矩阵左下角元素中的值乘以.例如:若矩阵中的值为:
1 9 7
2 3 8
4 5 6
n=3,则矩阵值变为:
1 9 7
6 9 8
12 15 18
注:二维数组下三角元素每行最后元素的列标和该列的列号一致

#include <stdio.h>
int juzhen(int a[][3],int n)
{
int i,j;
for (i=1;i<3;i++)
for (j=0;j<=i;j++)
a[i][j]=a[i][j]*n;
}
main()
{
int i,j,a[3][3],m;
clrscr();
printf("please enter 9 numbers :\n");
for (i=0;i<3;i++)
for (j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("the old ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("please enter a int number:\n");
scanf("%d",&m);
juzhen (a,m);
printf("the new ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
2,请编写函数juzhen,该函数的功能是:将三行四列矩阵x乘以四行三列矩阵y,结果放在三行三列矩阵中。矩阵相乘的基本方法是:矩阵Xy中行列下标分别为i,j的元素的值,是矩阵X中第i行上四个元素与矩阵Y中第j列上四个元素对应相乘的积。
X和Y矩阵原型可运行后看到!
#include <conio.h>
#include <stdio.h>
void juzhen (int a[3][4],int b[4][3],int ab[3][3])
{
int i,j,z;
for (i=0;i<3;i++)
for (j=0;j<4;j++)
for (z=0;z<3;z++)
ab[i][z]=ab[i][z]+a[i][j]*b[j][z];/*此得为要填写的内容*/
}
main()
{
int x[3][4]={1,0,1,1,2,1,0,1,1,2,0,3};
int y[4][3]={1,1,1,0,0,0,2,1,1,1,1,3};
int xy[3][3]={0},i,j;
clrscr();
juzhen (x,y,xy);
printf("x ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<4;j++)
printf("%3d",x[i][j]);
printf("\n");
}
printf("y ju zhen is:\n");
for (i=0;i<4;i++)
{
for (j=0;j<3;j++)
printf("%3d",y[i][j]);
printf("\n");
}
printf("xy ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",xy[i][j]);
printf("\n");
}
}
由于你没有说要求,我就写了两个,这是两道比较精典的求c语言矩阵乘法程序

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

⑦ c语言矩阵乘法

main()
{
int i=0,j=0,k=0,n=0,m=0;/*k
为待输入值
*/
int s=0;/*
此处作为输出变量
*/
int middle=0; /*
中间值
*/
int a[row][line],b[line][row];
long c[row][row];
for(i=0;i<row;i++)
{
for(j=0;j<line;j++)
{
scanf("%d",&k);
a[i][j]=k;
printf("\ta[%d][%d]=%d\n",i,j,a[i][j]);
}
}
printf("\n");
for(i=0;i<line;i++)
{
for(j=0;j<row;j++)
{
scanf("%d",&k);
b[i][j]=k;
printf("\tb[%d][%d]=%d\n",i,j,b[i][j]);
}
}

⑧ 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语言:编写完整程序:计算两个矩阵的乘积。

#include<iostream.h>
#include<stdlib.h>
#include<iomanip.h>
void caidan();

#define max 12500

typedef struct{
int e;
int i; //行下标
int j; //列下标
}triple;

typedef struct{
triple data[max+1];
int rpos[10];
int m,n,t;
}ts;

//矩阵的转置实现函数
void fasttransposesmatrix(ts M,ts &T)
{
int col,num[10],cpot[10]={0},p,q;
T.m=M.n;
T.n=M.m;
T.t=M.t;
if(T.t){
for(col=1;col<=M.n;++col)
num[col]=0;
for(int t1=1;t1<=M.t;++t1)
++num[M.data[t1].j];
cpot[1]=1;
for(col=2;col<=M.n;++col)
cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=M.t;++p){
col=M.data[p].j;
q=cpot[col];
T.data[q].i=M.data[p].j;
T.data[q].j=M.data[p].i;
T.data[q].e=M.data[p].e;
++cpot[col];
}
}
}
//矩阵的乘法Y=M*Q实现函数
void multsmatrix(ts M,ts Q,ts &Y){
int arow,brow=0,p,q,i1,tp,t1,ctemp[10],ccol;
if(M.n!=Q.m)
cout<<"错误!"<<endl;
Y.m=M.m;
Y.n=Q.n;
Y.t=0;
if(M.t*Q.t!=0)
{
for(arow=1;arow<=M.m;++arow)
{
for(i1=1;i1<=M.m;i1++)
ctemp[i1]=0;
Y.rpos[arow]=Y.t+1;
if(arow<M.m)
tp=M.rpos[arow+1];
else
tp=M.t+1;
for(p=M.rpos[arow];p<tp;++p)
{
brow=M.data[p].j;
if(brow<Q.m)
t1=Q.rpos[brow+1];
else
t1=Q.t+1;
for(q=Q.rpos[brow];q<t1;++q)
{
ccol=Q.data[q].j;
ctemp[ccol]+=M.data[p].e*Q.data[q].e;
}
}
for(ccol=1;ccol<=Y.n;++ccol)
if(ctemp[ccol]){
++Y.t;
if(++Y.t>max)
cout<<"错误"<<endl;
Y.data[Y.t].i=arow;
Y.data[Y.t].j=ccol;
Y.data[Y.t].e=ctemp[ccol];
cout<<Y.data[Y.t].i<<Y.data[Y.t].j<<Y.data[Y.t].e<<endl;
}
}
}
}

//将数组转换成三元组
void exchange1(int **a,ts &M,int m,int n)
{
int i1,j1,z=1,pos[10];
for(i1=0;i1<=n;i1++)
{
pos[i1]=0;
M.rpos[i1]=0;
}
pos[0]=1;
for(i1=0;i1<m;i1++)
for(j1=0;j1<n;j1++)
if(a[i1][j1])
{
M.data[z].i=i1+1;
M.data[z].j=j1+1;
M.data[z].e=a[i1][j1];
z++;
pos[i1+1]++;
}
for(i1=0;i1<=m;i1++)
{
M.rpos[i1+1]=M.rpos[i1]+pos[i1];
}
M.t=z-1;
M.m=m;
M.n=n;
}
//将三元组转换成数组形式
void exchange2(int **a,ts &T)
{
int i1,j1,z1;
for(i1=0;i1<T.m;i1++)
for(j1=0;j1<T.n;j1++)
{
a[i1][j1]=0;
}

for(z1=1;z1<=T.t;z1++)
for(i1=0;i1<T.m;i1++)
for(j1=0;j1<T.n;j1++)
if((i1==T.data[z1].i-1)&&(j1==T.data[z1].j-1))

{
a[i1][j1]=T.data[z1].e;
}
}

//输出结果
void output(int **a,int m,int n)
{
int i1,j1;
for(i1=0;i1<m;i1++)
{
for(j1=0;j1<n;j1++)
{
cout<<a[i1][j1]<<',';
}cout<<endl;
}
}
//转置的操作函数
void zhuan(){
int i1,j1,m,n;
cout<<"初始矩阵:"<<endl;
cout<<"请输入你要输入的数组的行数:"<<endl;
cin>>m;
cout<<"请输入你要输入的数组的列数:"<<endl;
cin>>n;
int**pp=new int*[m];
for(i1=0;i1<m;i1++)
pp[i1]=new int[n];
cout<<"请依次输入矩阵的元素:"<<endl;
for(i1=0;i1<m;i1++)
for(j1=0;j1<n;j1++)
{
cin>>pp[i1][j1];
}
cout<<endl;
ts M,T;
exchange1(pp,M,m,n);
fasttransposesmatrix(M,T);

int**pp1=new int*[T.m];
for(i1=0;i1<T.m;i1++)
pp1[i1]=new int[T.n];

exchange2(pp1,T);
cout<<"转置后的矩阵是:"<<endl;
output(pp1,T.m,T.n);
delete pp;
delete pp1;
caidan();

}
//相乘的操作函数
void xiangcheng(){
ts M,Q,Y;
int i1,j1,m,n;
cout<<"请输入你要输入的数组的行数:"<<endl;
cin>>m;
cout<<"请输入你要输入的数组的列数:"<<endl;
cin>>n;
int**p=new int*[m];
for(i1=0;i1<m;i1++)
p[i1]=new int[n];
cout<<"请依次输入矩阵的元素:"<<endl;
for(i1=0;i1<m;i1++)
for(j1=0;j1<n;j1++)
{
cin>>p[i1][j1];
}
cout<<endl;
exchange1(p,M,m,n);
cout<<"请再次输入一个矩阵(即乘数):"<<endl;
cout<<"请输入你要输入的数组的行数:"<<endl;
cin>>m;
cout<<"请输入你要输入的数组的列数:"<<endl;
cin>>n;
int**p2=new int*[m];
for(i1=0;i1<m;i1++)
p2[i1]=new int[n];
cout<<"请依次输入矩阵的元素:"<<endl;
for(i1=0;i1<m;i1++)
for(j1=0;j1<n;j1++)
{
cin>>p2[i1][j1];
}
cout<<endl;
exchange1(p2,Q,m,n);

multsmatrix(M,Q,Y);
int**p1=new int*[Y.m];
for(i1=0;i1<Y.m;i1++)
p1[i1]=new int[Y.n];
exchange2(p1,Y);
cout<<"两矩阵相乘结果为:"<<endl;
output(p1,Y.m,Y.n);
delete p2;
delete p1;
caidan();
}
//菜单
void caidan()
{
int i;
cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;
cout<<" 1.矩阵的转置 2.两个矩阵的乘法 3.退出 "<<endl;
cout<<"请选择:"<<endl;
cin>>i;
switch(i){
case 1:zhuan();
break;
case 2:xiangcheng();
break;
case 3: exit(0);
}
}
//主函数
void main()
{
caidan();
}

⑩ 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(" ");

}

}

热点内容
ef数据库查询数据 发布:2025-05-18 03:29:36 浏览:668
百度云下载文件夹 发布:2025-05-18 03:17:33 浏览:674
php云开发 发布:2025-05-18 03:12:41 浏览:447
sql语句显示表 发布:2025-05-18 03:12:30 浏览:690
数据库系统的例子 发布:2025-05-18 03:02:42 浏览:191
数字化储存与编译是什么 发布:2025-05-18 02:56:55 浏览:217
个人网站模板源码 发布:2025-05-18 02:51:17 浏览:490
主服务器ip地址 发布:2025-05-18 02:46:29 浏览:856
电脑配置太低玩不了绝地求生怎么办 发布:2025-05-18 02:38:39 浏览:797
存储过程怎么出错了 发布:2025-05-18 02:37:16 浏览:368