c语言,两矩阵相乘问题
没有细看,是不是维数问题。
给你一个程序,计算:
a[a_row][a_col] * b[b_row][b_col]=c[a_row][b_col]
注意 b_row==a_col
DEBUG 为 1 输出中间结果,方便查错。 可以改为 0。
动态分配数组。
含输入例子。
#includestdio.h
#include stdlib.h
#define DEBUG 1
void show_array(int *a, int row,int col);
/*———————
c[j]][i] = a[j][k] * b[k][i] = c[j][i]
a[c_row][nk]: a[3][2]={1,2,3,4,5,6}
b[nk][c_col]: b[2][3]={1,2,3,4,5,6}
c[c_row][c_col]: c[3][3]={9,12,15,19,26,33,29,40,51}
*———————*/
void matrix2(int *a,int *b, int *c, int a_row, int b_col, int b_row)
{
int i,j,k;
int a_col,c_row,c_col;
a_col=b_row; c_row=a_row; c_col=b_col;
if (DEBUG==1){
printf(“A[%d][%d]:\n”,a_row,a_col);
show_array(a,a_row,a_col);
printf(“B[%d][%d]:\n”,b_row,c_col);
show_array(b,b_row,b_col);
};
for(j=0;jc_row;j++){
for(i=0;ic_col;i++){
c[j*c_col+i]=0;
for(k=0;ka_col;k++) c[j*c_col+i]+= a[j*a_col+k] * b[k*b_col+i];
};
};
}
main()
{
int i,j,k,tmp;
int a_row,a_col,b_row,b_col,c_row,c_col;
int *a,*b,*c;
printf(“please enter a_row a_col of matrix_A: 3 2\n”);
scanf(“%d %d”,a_row,a_col);
b_row = a_col;
printf(“please enter b_col of matrix_B: 3\n”);
scanf(“%d”,b_col);
c_row = a_row;
c_col = b_col;
a = (int *) malloc(sizeof(int *) * a_row * a_col);
b = (int *) malloc(sizeof(int *) * b_row * b_col);
c = (int *) malloc(sizeof(int *) * c_row * c_col);
if (!c) { printf(“no enought memory for alloc\n”);return 0; }
printf(“Please input int matrix a[%d][%d] 1 2 3 4 5 6\n”,a_row,a_col);
for (j=0;ja_row;j++)
for (i=0;ia_col;i++){
scanf(“%d”,tmp);
a[j*a_col+i] = tmp;
}
printf(“Please input int matrix b[%d][%d] 1 2 3 4 5 6\n”,b_row,b_col);
for (j=0;jb_row;j++)
for (i=0;ib_col;i++){
scanf(“%d”,tmp);
b[j*b_col+i] = tmp;
}
if (DEBUG==1){
printf(“A[%d][%d]:\n”,a_row,a_col);
show_array(a,a_row,a_col);
printf(“B[%d][%d]:\n”,b_row,c_col);
show_array(b,b_row,b_col);
};
matrix2( a,b,c, a_row, b_col, b_row);
show_array(c,c_row,c_col);
free(a);free(b);free(c);
return 0;
}
void show_array(int *a, int row,int col)
{
int i,j;
for (j=0;jrow;j++){
for (i=0;icol;i++) printf(“%d “,a[j*col+i]);
printf(“\n”);
}
printf(“——————–\n”);
}
C语言求两矩阵乘积
#include “stdio.h”
#define LANGA 4
#define LANGB 3
#define LANGC LANGB
int multi(double A[][LANGA],double B[][LANGB],double C[][LANGC],int langa,int langb,int langc){
int i,j,k;
if(langa==LANGB langb==LANGA){
for(i=0;ilanga;i++)
for(j=0;jlangc;j++)
for(C[i][j]=k=0;klangb;k++)
C[i][j]+=A[i][k]*B[k][j];
return 0;
}
return -1;
}
int main(int argv,char *argc[]){
double A[LANGB][LANGA],B[LANGA][LANGB],C[LANGB][LANGC];
int i,j;
for(i=0;iLANGB;i++)
for(j=0;jLANGA;A[i][j++]=1.0/(i+j+1));
for(i=0;iLANGA;i++)
for(j=0;jLANGB;B[i][j]=1.0+j++);
if(multi(A,B,C,LANGB,LANGA,LANGB))
return -1;
for(i=0;iLANGB;i++){
for(j=0;jLANGC;printf(“%12.4le”,C[i][j++]));
printf(“\n”);
}
return 0;
}
运行样例:
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;ix;i++){
for(j=0;jy;j++){
scanf(“%d”,a[i][j]);
}
}
printf(“请输入矩阵b:\n”);
for(i=0;iy;i++){
for(j=0;jz;j++){
scanf(“%d”,b[i][j]);
}
}
printf(“矩阵a为:\n”);
for(i=0;ix;i++){
for(j=0;jy;j++){
printf(“%d”,a[i][j]);
if(j==y-1)
printf(“\n”);
else
printf(“\t”);
}
}
printf(“矩阵b为:\n”);
for(i=0;iy;i++){
for(j=0;jz;j++){
printf(“%d”,b[i][j]);
if(j==z-1)
printf(“\n”);
else
printf(“\t”);
}
}
for(i=0;ix;i++){
for(l=0;lz;l++){
for(j=0;jy;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;ix;i++){
for(j=0;jz;j++){
printf(“%d”,c[i][j]);
if(j==z-1)
printf(“\n”);
else
printf(“\t”);
}
}
return 0;
}
求高手帮忙用c语言求出两个矩阵的乘积
1、首先打开编程软件,新建一个项目,添加一个double.cpp文件,如图所示。
2、包含stdio.h头文件,如图所示。
3、接着输入main函数,如图所示。
4、然后定义两个double类型变量并初始化,如图所示。
5、使用scanf函数接受任意两个小数,计算两个小数的乘积并打印出来,如图所示。
6、然后运行程序,查看结果,如图所示。
用c语言实现两个矩阵相乘怎么做?
1、程序运行输入数据时,第一行为A矩阵的行列数和B矩阵的行列数,接着分别输入A、B两个矩阵的值。
2、首先,定义6个整型变量,保存A、B矩阵的行和列,以及控制循环的变量,k则用于实现矩阵的乘法。
3、接着,定义三个整型二维数组,保存A、B和C矩阵的各元素。
4、输入三个矩阵的行数和列数,保存在变量a、b、c中。
5、输入矩阵A的各元素,保存在数组X中。
6、输入矩阵B的各元素,保存在数组Y中。
7、将二维数组Z的各元素,初始化为0。
8、用两层for循环,控制矩阵的乘法,并输出乘法所得的结果。
9、计算A矩阵和B矩阵的乘法,结果保存在数组Z中。
10、最后,输出乘法所得的结果,即输出Z数组中的所有元素。
11、运行程序,输入矩阵A和B的行数和列数,以及A矩阵和B矩阵的所有元素,电脑就会计算出乘积C矩阵的所有元素,并输出C矩阵。
C语言两个矩阵乘积
#includestdio.h
int main(){
int a[100][100],b[100][100],c[100][100]={0};
int m1,n1,m2,n2,i,j,k;
printf(“请输入矩阵A行数m1 列数n1:\n”);
scanf(“%d%d”,m1,n1);
printf(“请输入矩阵B行数m2 列数n2:\n”);
scanf(“%d%d”,m2,n2);
if(n1!=m2)
printf(“\n不可以相乘\n”);
else if((m1100)||(n1100)||(m2100)||(n2100))
printf(“越界!!”);
else{
for(i=0;im1;i++)
for(j=0;jn1;j++){
printf(“a[%d][%d]=:”,i,j);
scanf(“%d”,a[i][j]);}
printf(“\n”);
for(i=0;im2;i++)
for(j=0;jn2;j++){
printf(“b[%d][%d]=:”,i,j);
scanf(“%d”,b[i][j]);}
printf(“\n矩阵C=A*B:\n”);
for(i=0;im1;i++)
for(j=0;jn2;j++){
for(k=0;kn1;k++)
c[i][j]+=a[i][k]*b[k][j];
printf(“%d”,c[i][j]);
if(j==n2)
printf(“\n”);}}
return 0;}