1. c語言矩陣乘法
#include<stdio.h>
intmain()
{
inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
intb[4][5]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
inti,j,z,x,y,c[3][5];
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
c[i][j]=0;//j不能等於4,所以你的二維數組c中c[][4]沒有初始化,所以才會出現亂碼
for(z=0;z<5;z++)
c[i][j]+=a[i][j]*b[j][z];
}
}
for(x=0;x<3;x++)
{
for(y=0;y<5;y++)
printf("%d ",c[x][y]);
printf(" ");
}
return0;
}
2. c語言 矩陣乘法
矩陣乘法程序,動態分配內存:
#include<stdio.h>
// b[j][k] * c[k][i] = a[j][i]
void matrix(int **b,int **c, int **a, int nx, int ny, int nk)
{
int i,j,k;
for (j=0;j<ny;j++)for(i=0;i<nx;i++)a[j][i]= 0;
for(j=0;j<ny;j++){
for(i=0;i<nx;i++){
for(k=0;k<nk;k++)a[j][i]+= b[j][k]*c[k][i];
};
};
}
void main()
{
int i,j,k,tmp;
int b_row,b_col;
int c_row,c_col;
int a_row,a_col;
int **b,**c,**a;
// 輸入B 陣 行數 列數
printf("please enter b_row b_col of matrix B\n");
scanf("%d %d",&b_row,&b_col);
c_row = b_col;
// 輸入C陣 列數
printf("please enter c_col of matrix C\n");
scanf("%d",&c_col);
a_row = b_row;
a_col = c_col;
a = (int **) malloc(sizeof(int *) * a_row);
for (j=0;j<a_row;j++){
a[j] = (int *) malloc(sizeof(int) * a_col);
}
b = (int **) malloc(sizeof(int *) * b_row);
for (j=0;j<b_row;j++){
b[j] = (int *) malloc(sizeof(int) * b_col);
}
c = (int **) malloc(sizeof(int *) * c_row);
for (j=0;j<c_row;j++){
c[j] = (int *) malloc(sizeof(int) * c_col);
}
if (!c[c_row-1]) {
printf("no enought memory\n");exit(0);
}
// 輸入B陣元素
printf("Please input int matrix b[%d][%d]\n",b_row,b_col);
for (j=0;j<b_row;j++)
for (i=0;i<b_col;i++){
scanf("%d",&tmp);
b[j][i] = tmp;
}
// 輸入C陣元素
printf("Please input int matrix c[%d][%d]\n",c_row,c_col);
for (j=0;j<c_row;j++)
for (i=0;i<c_col;i++){
scanf("%d",&tmp);
c[j][i] = tmp;
}
matrix( b ,c,a, a_col, a_row, b_col);
for(j=0;j<a_row;j++)
{
for (i=0;i<a_col;i++) printf("%d ",a[j][i]);
printf("\n");
};
}
3. 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
4. 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;
}
5. 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個以內)。
6. 求一個C語言編矩陣乘法運算的程序
#include "iostream.h"
void MatrixChain(int *p,int n,int **m,int **s)
{
for(int i=1;i<=n;i++)
m[i][i]=0;
for(int r=2;r<=n;r++)
for( i=1;i<=n-r+1;i++)
{
int j=i+r-1;
m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];
s[i][j]=i;
for(int k=i+1;k<j;k++)
{
int t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(t<m[i][j])
{
m[i][j]=t;
s[i][j]=k;
}
}
}
}
void Traceback(int i,int j,int **s)
{
if(i==j)return;
Traceback(i,s[i][j],s);
Traceback(s[i][j]+1,j,s);
cout<<"讓 A"<<i;//<<","<<s[i][j];
cout<<"和 A"<<(s[i][j]+1)<<"相乘"<<endl;//<<","<<j<<"相乘"<<endl;
}
void main()
{
int n,*p;
int j=1;
cout<<"請輸入矩陣的個數"<<endl;
cin>>n;
p=new int[n+1];
cout<<"請輸入第一個矩陣的行數,然後按回車鍵"<<endl;
cin>>p[0];
cout<<"第"<<j<<"個矩陣是"<<endl;
cout<<p[0]<<"*";
cin>>p[1];
// cout<<p[1]<<endl;
cout<<endl;
for(int i=2;i<n+1;i++)
{
cout<<"第"<<i<<"個矩陣是:";
cout<<p[i-1]<<"*";
cin>>p[i];
}
// int p[]={30,35,15,5,10,20,25};
// int m[6][6],s[6][6];
int **m,**s;
m=new int*[n];
for( i=1;i<=n;i++)
m[i]=new int[n];
s=new int*[n];
for( i=1;i<=n;i++)
s[i]=new int[n];
MatrixChain(p,n,m,s);
Traceback(1,n,s);
}
這是矩陣連乘
7. 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(" ");
}
}
}
8. 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");
}
}
9. 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);
}
10. c語言矩陣乘法
已按題目要求,給定輸入,有相應輸出
#include<stdio.h>
int main()
{
int m,n,p,i,j,k,l,a[15][15],b[15][15],c[15][15];
while(scanf("%d%d%d",&m,&n,&p)!=EOF)
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<n;i++)
{
for(j=0;j<p;j++)
scanf("%d",&b[i][j]);
}
i=0;
l=0;
while(i<m)
{
j=0;
k=0;
c[i][l]=0;
while(j<n)
{
c[i][l]=c[i][l]+a[i][j]*b[k][l];
j=j+1;
k=k+1;
}
l++;
if(l%p==0)
{
l=0;
i++;
}
}
for(i=0;i<m;i++)
{
for(j=0;j<p;j++)
printf("%d ",c[i][j]);
printf("\n");
}
}
return 0;
}