Ⅰ 用c語言實現兩個矩陣相乘怎麼做
1、程序運行輸入數據時,第一行為A矩陣的行列數和B矩陣的行列數,接著分別輸入A、B兩個矩陣的值。
Ⅱ c語言程序設計,設計兩個矩陣相乘的程序。已知:
#include<stdio.h>
#include<stdlib.h>
#defineM3
intmain(void)
{
inti,j,k,matrix1[M][M],matrix2[M][M],row1=M,col1=M,row2=M,col2=M,matrix[M][M];
/*為需要相乘的兩個矩陣賦值:*/
printf("輸入第一個矩陣: ");
for(i=0;i<row1;i++){
for(j=0;j<col1;j++){
scanf("%d",&matrix1[i][j]);
}
}
printf("輸入第二個矩陣: ");
for(i=0;i<row2;i++){
for(j=0;j<col2;j++){
scanf("%d",&matrix2[i][j]);
}
}
/*初始化matrix:*/
for(i=0;i<row1;i++){
for(j=0;j<col2;j++){
matrix[i][j]=0;
}
}
printf("Theresult: ");
for(i=0;i<row1;i++){
for(j=0;j<col2;j++){
for(k=0;k<col1;k++){
matrix[i][j]=matrix[i][j]+matrix1[i][k]*matrix2[k][j];
}
}
}
for(i=0;i<row1;i++){
for(j=0;j<col2;j++){
printf("%d",matrix[i][j]);
}
printf(" ");
}
return0;
}
Ⅲ 用C語言實現 矩陣的乘法
void main()
{int a[100][100],b[100][100],c[100][100],i,j,k,m,n,h;<br/> scanf("%d%d%d",&k,&m,&n);<br/> for(i=0;i<k;i++)<br/> for(j=0;j<m;j++)<br/> scanf("%d",&a[i][j]);<br/> printf("\n");<br/> for(i=0;i<m;i++)<br/> for(j=0;j<n;j++)<br/> scanf("%d",&b[i][j]);<br/> for(i=0;i<k;i++)<br/> {for(j=0;j<n;j++)<br/> {c[i][j]=0;<br/> for(h=0;h<m;h++)<br/> c[i][j]+=a[i][h]*b[h][j];}}
for(i=0;i<k;i++)
{printf("\n");<br/> for(j=0;j<n;j++)<br/> printf("%d ",c[i][j]);}
printf("\n");}
說明k,m,n分別為矩陣的行和列,比如4X5,5X7,這k,m,n分別為4,5,7,然後在輸入4X5和5X7的矩陣
Ⅳ 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
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語言編一個計算矩陣相乘結果的程序
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
intmain()
{
ints,m,n,i,j,k;
printf(": ");
scanf("%d%d%d",&s,&m,&n);//s,m是第一個矩陣的行數和列數,m,n是第二個矩陣的行數和列數
double**A,**B,**C;
A=(double**)malloc(sizeof(double*)*s);
B=(double**)malloc(sizeof(double*)*m);
C=(double**)malloc(sizeof(double*)*s);//給三個二級指針分配下一級內存空間
for(i=0;i<s;i++)A[i]=(double*)malloc(sizeof(double)*m);
for(i=0;i<m;i++)B[i]=(double*)malloc(sizeof(double)*n);
for(i=0;i<m;i++)C[i]=(double*)malloc(sizeof(double)*n);//給一級指針分配內存空間
for(i=0;i<s;i++)
for(j=0;j<m;j++)
scanf("%lf",&A[i][j]);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%lf",&B[i][j]);
for(i=0;i<s;i++)
for(j=0;j<n;j++)
C[i][j]=0;
for(i=0;i<s;i++)
for(j=0;j<n;j++)
for(k=0;k<m;k++)
C[i][j]+=A[i][k]*B[k][j];
for(i=0;i<s;i++)
free(A[i]);
for(i=0;i<m;i++)
free(B[i]);
free(A);
free(B);
for(i=0;i<s;i++)
{
for(j=0;j<n;j++)
printf("%-5g",C[i][j]);//最好開始輸入的數字不要超過五位數,不然排版不好看
printf(" ");
}
for(i=0;i<s;i++)
free(C[i]);
free(C);
return0;
}
Ⅶ 求c語言矩陣加法和乘法代碼
#include<stdio.h>
#include<stdlib.h>
void memory(int **p,int m,int n); //分配的內存的函數;
void readdata(int**p,int m,int n);
void plus(int **u,int **i,int m,int n); //求和函數,要求兩個矩陣同型
void re(int **u,int **i,int m,int n); //求差,要求兩個矩陣同型
void mult(int **u,int **i,int m,int n); //矩陣的積;乘法要求前一個矩陣的行數等於後一個矩陣的列數;
void release(int **p,int m,int n); //釋放內存的函數;
int main() //也可使用switch語句來選擇求和求差求積
{
int m,n;
scanf("%d%d",&m,&n); //輸入m,n兩個數,確定矩陣要分配內存的大小
int **k,**q,**o;
memory(**k,m,n);
memory(**q,m,n);
memory(**o,m,n); //備用,用來存放結果的一塊內存;
readdata(**k,m,n);
readdata(**q,m,n);
plus(**k,**q,m,n);
re(**k,**q,m,n);
mult(**k,**q,m,n); //在本行加//則可不求矩陣乘法,使程序適用於一切m*n的矩陣加法;
realease(**k,m,n);
realease(**q,m,n);
}
void memory(int **p,int m,int n)
{
p=*(int**)malloc(m*sizeof(int*);
for(i=0;i<n;i++)
{
p[i]=*(int*)malloc(n*sizeof(int));
}
}
void release(int **p,int m,int n)
{
for(i=0;i<n;i++)
{
free(p[i]);
p[i]=0;
}
free(p);
p=0;
}
void readdata(int **p,int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
scanf("%d",&p[i][j]); //要求用戶由行到列輸入矩陣的數據;
}
}
void plus(int **u,int **i,int m,int n)
{
int r,j;
for(r=0;r<m;r++)
{
for(j=0;j<n;j++)
printf("%5d",u[r][j]+i[r][j]);
printf("\n");
}
}
void re(int **u,int **i,int m,int n)
{
int r,j;
for(r=0;r<m;r++)
{
for(j=0;j<n;j++)
printf("%5d",u[r][j]-i[r][j]);
printf("\n");
}
void mult(int **u,int **i,int m,int n)
{
int r,j,k,d=0;
for(r=0;r<m;r++)
{
for(j=0;j<n;j++)
{
for(k=0;k<m;k++) //這里分號錯寫成了逗號
d=d+u[r][k]*i[k][r];
printf("%d",d);
}
d=0;
printf("\n");
}
}