本吊丝总算弄出来了,用函数编写的矩阵乘和倒置的运算
#include "stdio.h"void creat(int a[10][10],int m,int n)//这里定义m,n是为了将main函数中的m,n作用于它
{
int i,j;
printf("请输入矩阵每输入一行按下回车键\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
}
void shuchu(int a[10][10],int m,int n) /*输出函数,记住定义时是a[10][10]而不是
a,调用时是将数组付给形参,实际上形参数组可以不指定大小,可结果却错了*/
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%5d",a[i][j]);
}
printf("\n");
}
}
void zhuanzhi(int b[10][10],int a[10][10],int m,int n) //矩阵的转置
{ int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
b[j][i]=a[i][j];
}
void chen(int a[10][10],int b[10][10],int c[10][10],int m,int n) //矩阵相乘
{
int i,j,k;
for(i=0;i<m;i++)
for(j=0;j<m;j++)
{
c[i][j]=0;
for(k=0;k<n;k++) //k一直加到n而非m
{
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
}
}
void main()
{
int a[10][10];
int b[10][10];
int c[10][10]; //两矩阵的乘积
int m,n;
printf("请输入矩阵的行数m:\n"); //不超过十行
scanf("%d",&m);
printf("请输入矩阵的列数n:\n");
scanf("%d",&n);
creat(a,m,n); //建立矩阵,调用时是将数组名作为参数传递,而定义时是定义数组
printf("输出原矩阵\n");
shuchu(a,m,n); //输出矩阵,m,n分别表示函数,定义函数时尽量不要和库函数同名
zhuanzhi(b,a,m,n); //函数的转置,转置后的输出,行列变换了,注意调用输出函数
printf("输出转置后的矩阵\n");
shuchu(b,n,m); //输出转置后矩阵
chen(a,b,c,m,n);
printf("输出矩阵的乘积\n");
shuchu(c,m,m);
}