#define M MAX
#define N MAX
#define T MAX
#define S MAX
int Mult(double a[][N],int m,int n,double b[][T]int s,int t,double c[][T]) {
int i,j,k
if(n != s) {
printf("两矩阵相乘,左矩阵的列数与右矩阵的行数必须相等。\n")
return 0
}
int c
tmp.m_Mat = new double *[tmp.m_Rows]
for(int i = 0i < tmp.m_Rowsi++) tmp.m_Mat[i] = new double[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]
}
}
return 1
}
语言只提供+,-,*,/等低级运算功能,高级的都必须代码实现,包括次方开放运算,都是编写代码实现。你学过矩阵乘法,这就很容易,你需要定义一个结构体,作为矩阵。。。。矩阵很简单,行数,列数,元素。
typedef struct {
uint r,c
float *d
int size
}matrix;
分别是行数,列数,数据指针,和数据最大长度。数据最好用指针不用数组,是因为增加灵活性,你只需要动态申请内存即可让你的矩阵大小可变,数组长度不可变。最后一个参数代表内存长度,最好是要有,方便你重新定义数组时看内存够不够,不够可以realloc,没有的话你就不知道够不够(5*4的矩阵,乘以 4*5 矩阵必然变成5*5矩阵,赋值到新矩阵结构体里,如果还是20个单位,显然装不下,必须realloc,所以该参数必须有)。。。
你只要实现个函数int mul(matrix *m1,*m2,*m3)即可,m1,m2分别为左右 矩阵,m3为结果。
按照运算法则,你必须完成两件事,判断m1,m2是否可以相乘,不可以相乘返回一个错误(比如返回-1),(3*3和4*4矩阵不能相乘),如果可以那就先让m3.r=m1.r,m3.c=m2.c
m3.d[i][j]=0
for(k=0k<m1.ck++)
m3.d[i][j]+=m1.d[i][k]*m2.d[k][j]
这你就能到到m3的一个元素,那你只要求出所有的元素就得到新矩阵了。
不过因为是C语言,你要考虑内存,m3也许内存不够长,你必须要做一下内存长度判断,不够长要申请,否则就报错没法用了。。。所以size这个成员也是必须的。。
不过话说回来,如果是用C++,只要你写一个矩阵类,重载运算符 * ,你就可以用
m3=m1*m2 这样运算,书写更方便,但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=0m<Ju[i].mm++)
{
for(n=0n<Ju[i].nn++)
{
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=1i<10i++)
{
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=0m<Ju[0].mm++)
{
for(n=0n<Ju[0].nn++)
{
Ju[10].array[m][n]=0
for(k=0k<Ju[i].mk++)
{
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=0m<Ju[0].mm++)
{
for(n=0n<Ju[0].nn++)
{
printf("%-8d",Ju[0].array[m][n])
}
printf("\n")
}
}
你试试这个我的矩阵乘法是这样的了,A=A*B*C...(10个以内)。