实现两个矩阵的加减乘除和转置。

#include<stdio.h>
#include<math.h>

void jiafa()
{
 int m,n;
 float a[20][20],b[20][20],c[20][20];
 int i,j;

 printf("请输入矩阵行数:");
 scanf("%d",&m);
 printf("请输入矩阵列数:");
 scanf("%d",&n);

 printf("请输入第一个矩阵:");
 for(i=0;i<m;i++)
 for(j=0;j<n;j++)
 scanf("%f",&a[i][j]);

 printf("请输入第二个矩阵:");
 for(i=0;i<m;i++)
 for(j=0;j<n;j++)
 scanf("%f",&b[i][j]);

 printf("矩阵相加的结果为:");
 for(i=0;i<m;i++)
 { for(j=0;j<n;j++)
 {
 c[i][j]=a[i][j]+b[i][j];
 printf("%4f ",c[i][j]);
 }
 printf("\n");
 }
}

void jianfa()
{
 int m,n;
 float a[20][20],b[20][20],c[20][20];
 int i,j;

 printf("请输入矩阵行数:");
 scanf("%d",&m);
 printf("请输入矩阵列数:");
 scanf("%d",&n);

 printf("请输入第一个矩阵:");
 for(i=0;i<m;i++)
 for(j=0;j<n;j++)
 scanf("%f",&a[i][j]);

 printf("请输入第二个矩阵:");
 for(i=0;i<m;i++)
 for(j=0;j<n;j++)
 scanf("%f",&b[i][j]);

 printf("矩阵相减的结果为:");
 for(i=0;i<m;i++)
 { for(j=0;j<n;j++)
 {
 c[i][j]=a[i][j]-b[i][j];
 printf("%4f ",c[i][j]);
 }
 printf("\n");
 }
}

void chengfa()
{
 int m,n;
 float s;
 float a[20][20],b[20][20],c[20][20];
 int i,j,k;

 printf("请输入矩阵行数:");
 scanf("%d",&m);
 printf("请输入矩阵列数:");
 scanf("%d",&n);

 printf("请输入第一个矩阵:");
 for(i=0;i<m;i++)
 for(j=0;j<n;j++)
 scanf("%f",&a[i][j]);

 printf("请输入第二个矩阵:");
 for(i=0;i<n;i++)
 for(j=0;j<m;j++)
 scanf("%4f",&b[i][j]);

 for(i=0;i<m;i++)
 {
 for(j=0;j<m;j++)
 {
 s=0;
 for(k=0;k<n;k++)
 {
 s=s+a[i][k]*b[k][j];
 c[i][j]=s;
 }
 }
 }
 for(i=0;i<m;i++)
 {
 for(j=0;j<m;j++)
 {
 printf("%4f ",c[i][j]);
 }
 printf("\n");
 }
}

void zhuanzhi()
{
 int m,n;
 float a[20][20],b[20][20];
 int i,j;

 printf("请输入矩阵行数:");
 scanf("%d",&m);
 printf("请输入矩阵列数:");
 scanf("%d",&n);

 printf("请输入一个矩阵:");
 for(i=0;i<m;i++)
 for(j=0;j<n;j++)
 scanf("%f",&a[i][j]);

 for(i=0;i<m;i++)
 {
 for(j=0;j<n;j++)
 {
 b[i][j]=a[j][i];
 printf("%4f ",b[i][j]);
 }
 printf("\n");
 }
}

void qiuni()
{
 int N;
 printf("输入矩阵的阶数N:\n");
 scanf("%d",&N);
 float a[10][10],b[10][20],c[10][10],t;
 int i,j,m;
 printf("请输入行列式不为0的矩阵A(%d阶):\n",N); 
 for(i=0;i<N;i++)
 for(j=0;j<N;j++)
 scanf("%f",&a[i][j]);
 
 for(i=0;i<N;i++)
 for(j=0;j<N;j++)
 b[i][j]=a[i][j];

 for(i=0;i<N;i++)
 for(j=N;j<2*N;j++)
 b[i][j]=0;

 for(i=0;i<N;i++)
 b[i][N+i]=1;

for(m=0;m<N;m++) 
 { 
t=b[m][m]; 
 i=m; 
while(b[m][m]==0)
 { 
b[m][m]=b[i+1][m];
 i++;
 }

 if(i>m)
 {
 b[i][m]=t; 

for(j=0;j<m;j++) 
{
 t=b[m][j];
 b[m][j]=b[i][j];
 b[i][j]=t;
 }
 for(j=m+1;j<2*N;j++) 
{
 t=b[m][j];
 b[m][j]=b[i][j];
 b[i][j]=t;
 }
 
}

for(i=m+1;i<N;i++)
 for(j=2*N-1;j>=m;j--)
b[i][j]-=b[i][m]*b[m][j]/b[m][m]; 

for(j=2*N-1;j>=m;j--)
b[m][j]/=b[m][m]; 

 }

printf("第一步变换后得到的增广矩阵为:\n");
 for(i=0;i<N;i++)
 {
 for(j=0;j<2*N;j++)
 printf("%3.5f ",b[i][j]);
 printf("\n"); 
 }

m=N-1;
 while(m>0)
 {
 for(i=0;i<m;i++)
 for(j=2*N-1;j>=m;j--)
b[i][j]-=b[i][m]*b[m][j];
  m--;
 }

 printf("最后得到的增广矩阵为:\n");
 for(i=0;i<N;i++)
 {
 for(j=0;j<2*N;j++)
 printf("%3.5f ",b[i][j]);
 printf("\n"); 
 }

 for(i=0;i<N;i++)
for(j=0;j<N;j++)
 c[i][j]=b[i][N+j];

printf("故逆矩阵为:\n");

 for(i=0;i<N;i++)
 {
 for(j=0;j<N;j++)
 printf("%3.5f ",c[i][j]);
 printf("\n"); 
 }
 
} 

int main()
{
 int w;
 printf("1矩阵加法\n");
 printf("2矩阵减法\n");
 printf("3矩阵乘法\n");
 printf("4矩阵转置\n");
 printf("5矩阵求逆\n");
 printf("\n");
 printf("请选择要进行的运算:");
 scanf("%d",&w);

 switch(w)
 {
 case 1:jiafa();break;
 case 2:jianfa();break;
 case 3:chengfa();break;
 case 4:zhuanzhi();break;
 case 5:qiuni();break;
 }

 return 0;
}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酱醋茶柴米油盐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值