⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix.c

📁 矩阵综合运算
💻 C
字号:
#include"stdio.h"
void plus(float a[30][30],float b[30][30],int m,int n)
{	float c[30][30]={0};
	int i,j;
	for(i=0;i<=m-1;i++)
	for(j=0;j<=n-1;j++)
	c[i][j]=a[i][j]+b[i][j];
	printf("A+B=C,矩阵C等于\n");
	for(i=0;i<=m-1;i++)
	{	for(j=0;j<=n-1;j++)
		printf("%6.2f   ",c[i][j]);
		printf("\n");
	}
}
void neg(float a[30][30],float b[30][30],int m,int n)
{	float c[30][30]={0};
	int i,j;
	for(i=0;i<=m-1;i++)
	for(j=0;j<=n-1;j++)
	c[i][j]=a[i][j]-b[i][j];
	printf("A-B=C,矩阵C等于\n");
	for(i=0;i<=m-1;i++)
	{	for(j=0;j<=n-1;j++)
		printf("%6.2f   ",c[i][j]);
		printf("\n");
	}
}
void multiply1(float a,float b[30][30],int m,int n)
{	float c[30][30]={0};
	int i,j;
	for(i=0;i<=m-1;i++)
	for(j=0;j<=n-1;j++)
	c[i][j]=a*b[i][j];
	printf("a*B=C,矩阵C等于\n");
	for(i=0;i<=m-1;i++)
	{	for(j=0;j<=n-1;j++)
		printf("%6.2f   ",c[i][j]);
		printf("\n");
	}
}
void multiply2(float a[30][30],float b[30][30],int m,int t,int n)
{	float c[30][30]={0};
	int i,j,k;
	for(i=0;i<=m-1;i++)
	for(j=0;j<=n-1;j++)
	for(k=0;k<=t-1;k++)
	c[i][j]+=a[i][k]*b[k][j];
	printf("AxB=C,矩阵C等于\n");
	for(i=0;i<=m-1;i++)
	{	for(j=0;j<=n-1;j++)
		printf("%6.2f   ",c[i][j]);
		printf("\n");
	}
}
void turn(float b[30][30],int m,int n)
{	int i,j;
	printf("矩阵B的转置矩阵为\n");
	for(i=0;i<=n-1;i++)
	{	for(j=0;j<=m-1;j++)
		printf("%6.2f   ",b[j][i]);
		printf("\n");
	}
}
void contrary(float b[30][30],int m)
{	int i,j,n=0,t;
	float x;
	j=m;
	for(i=0;i<=m-1;i++)
		b[i][j++]=1;
	for(t=0;t<=m-1;t++)
	{	for(i=t;i<=m-1;i++)
		for(j=2*m-1;j>=t;j--)
			b[i][j]=b[i][j]/b[t][t];
		for(i=0;i<=m-1;i++)
		for(j=2*m-1;j>=0;j--)
		{	if(t==i)
				continue;
			else
			{	x=b[i][t]/b[t][t];
				b[i][j]=b[i][j]-(x*b[t][j]);	
			}
		}
	}
	for(i=0;i<=m-1;i++)
		if(b[m-1][i]==0)
			n++;
	if(n==m)
		printf("矩阵B为奇异矩阵,不可逆\n");
	else
	{	printf("矩阵B的逆阵为\n");
		for(i=0;i<=m-1;i++)
		{	for(j=m;j<=2*m-1;j++)
				printf("%6.2f   ",b[i][j]);
			printf("\n");
		}
	}
}

main()
{	float a[30][30]={0},b[30][30]={0};
	int i,j,k1,l1,k2,l2;
	float m;
	printf("输入A矩阵行数k1,列数l1\n");
	scanf("%d%d",&k1,&l1);
	printf("输入A矩阵\n");
	for(i=0;i<=k1-1;i++)
	for(j=0;j<=l1-1;j++)
		scanf("%f",&a[i][j]);
	printf("A矩阵为\n");
	for(i=0;i<=k1-1;i++)
	{	for(j=0;j<=l1-1;j++)
			printf("%6.2f   ",a[i][j]);
		printf("\n");
	}
	printf("输入B矩阵行数k2,列数l2\n");
	scanf("%d%d",&k2,&l2);
	printf("输入B矩阵\n");
	for(i=0;i<=k2-1;i++)
	for(j=0;j<=l2-1;j++)
		scanf("%f",&b[i][j]);
	printf("B矩阵为\n");
	for(i=0;i<=k2-1;i++)
	{	for(j=0;j<=l2-1;j++)
			printf("%6.2f   ",b[i][j]);
		printf("\n");
	}
	if(k1!=k2||l1!=l2)
		printf("不能进行加减运算\n");
	else	
	{	plus(a,b,k1,l1);
		neg(a,b,k1,l1);
	}
	if(l1!=k2)
		printf("不能进行矩阵相乘运算\n");
	else
		multiply2(a,b,k1,k2,l2);
	printf("输入数乘运算m*B的系数m\n");
	scanf("%f",&m);
	multiply1(m,b,k2,l2);
	turn(b,k2,l2);
	if(k2!=l2)
		printf("B矩阵不能进行求逆运算\n");
	else
		contrary(b,k2);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -