❶ 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语言程序
#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");
}
}
如果不满足你要求,自己再改一下吧
❸ 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语言矩阵乘法函数
函数类型是根据有无返回值判断的,无返回值就把函数定义为void类型
如果是单纯输出矩阵那就不用返回了,如果还要传回主函数有其它应用那就返回吧
❺ C程序 矩阵相乘
#include"stdio.h"
void main()
{
int i,j,a[3][4],b[4][3],d[3][3];
printf("input array a:\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
scanf("%d",&a[i][j]); //这里是i和j不是
}
printf("input array b:\n");
for(i=0;i<4;i++)
{
for(j=0;j<3;j++) //这里i修改为j。
scanf("%d",&b[i][j]); //这里也是一样
}
printf("\n");
printf("array D:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
d[i][j]=a[i][0]*b[0][j]+a[i][1]*b[1][j]+a[i][2]*b[2][j]+a[i][3]*b[3][j];
printf("%d ",d[i][j]);
}
printf("\n");
}
}
❻ C语言编程:编写一个函数,实现矩阵的乘法。
#include
<stdio.h>
#include
"stdlib.h"
void
pr(int
**a,int
m,int
n)
{
int
i,j;
printf("\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)printf("%5d",a[i][j]);
printf("\n");
}
printf("\n");
}
void
AB(int
**a,int
m1,int
n1,int
**b,int
m2,int
n2,int
**c)
{
int
i,j,k;
for(i=0;i<m1;i++)
for(j=0;j<n2;j++)
for(k=0;k<n1;k++)
c[i][j]+=a[i][k]*b[k][j];
}
void
main()
{
int
**a,**b,**c,m1,n1,m2,n2;
int
i,j;
printf("输入第一个矩阵的行数列数:");
scanf("%d%d",&m1,&n1);
printf("输入第二个矩阵的行数列数:");
scanf("%d%d",&m2,&n2);
if(n1!=m2)
{
printf("第一个矩阵的列必须等于第二个矩阵的行数!");
return;
}
//建立A矩阵
a=(int
**)calloc(m1,sizeof(int));
for(i=0;i<m1;i++)
a[i]=(int
*)calloc(n1,sizeof(int));
printf("A:输入%d个整数:",m1*n1);
for(i=0;i<m1;i++)
for(j=0;j<n1;j++)
scanf("%d",&a[i][j]);
//建立B矩阵
b=(int
**)calloc(m2,sizeof(int));
for(i=0;i<m2;i++)
b[i]=(int
*)calloc(n2,sizeof(int));
printf("B:输入%d个整数:",m2*n2);
for(i=0;i<m2;i++)
for(j=0;j<n2;j++)
scanf("%d",&b[i][j]);
//建立C矩阵
c=(int
**)calloc(m1,sizeof(int));
for(i=0;i<m1;i++)
c[i]=(int
*)calloc(n2,sizeof(int));
AB(a,m1,n1,b,m2,n2,c);
printf("A:\n");
pr(a,m1,n1);
printf("B:\n");
pr(b,m2,n2);
printf("C=AB\n");
pr(c,m1,n2);
}
❼ 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 <fstream>
#include <IOMANIP>
#include <stdio.h>
using namespace std;
void input_data(float b[][50])
{
int r,l;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
printf("\n第%d个元素为:",i*3+j+1);//去掉b[i][j]
scanf("%f",&b[i][j]);
}
}
printf("输入完毕!\n");
}
void output_data(float b[][50])
{
int r,l;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
printf("%f ",b[i][j]);
}
printf("\n");
}
}
void multiply(float M[50][50],float N[50][50],float J[50][50])
{
float sum;
int l=3;
int l1=3;//都是三乘三的吧,方阵
int k=3;//K赋初值
for(int i=0;i<k;i++)
{
for( k=0;k<l;k++)
{
sum=0;//赋初值
for(int j=0;j<l1;j++)
{
sum+=M[i][j]*N[j][k];
}
J[i][k]=sum;
sum=0;
}
}
}
void main()
{
float A[50][50];
float B[50][50];
float C[50][50]={0};//赋初值
input_data(A);
output_data(A);
multiply(A,A,C);
output_data(C);
}//1 2 3 4 5 6 7 8 9
❾ 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(" ");
}
}