!!!跪求C语言实现矩阵运算(加,减,乘、求逆、转置)

要求:1.本程序能完成矩阵的输入、输出。具有相同行数和列数的矩阵间的加法、减法。符合矩阵乘法规则要求的矩阵间的乘法。方阵的求逆。矩阵的求转置矩阵等功能。
2.要有界面。

有完整程序或者指导意见的给回一下,急用!谢谢各位高手了!!

1、首先打开vs2015(其他版本也可以),新建一个Windows Form窗体程序或者控制台都可以。

2、 定义一个名为array1的数组并赋值:double[,] array1 = new double[3, 3] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };下面求该矩阵转置矩阵

 

3、接下来实现矩阵的转置运算,可以写函数也可以写类,右键解决方案下的项目名,添加-类。

4、创建一个名为“turnzhi”的类(名字随便取,最好用英文,有时候中文名程序会报错),然后点击“添加”。

5、转置类的代码如下图所示。

6、在主程序调用转置类,用两个for循坏将转置后的数组(array)输出来;并将结果显示在textbox中。

7、最后运行程序查看编写的结果:147、258、369。转置后的结果正确,这样就实现了c#矩阵的转置运算。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-23
#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); //矩阵A的各元素存入二维数组a中。
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%f",&a[i][j]);
//增广矩阵(A|E)存入二维数组b中
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]; //预存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]; //m=0时,将第一行的-b[i][0]/b[0][0]倍加到以下各行。这样以下每行第一个元素b[i][0]就为0。

for(j=2*N-1;j>=m;j--)
b[m][j]/=b[m][m]; //对第m行作行变换,同除以b[m][m],使b[m][m]为1。

}

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

m=N-1;
while(m>0)
{
for(i=0;i<m;i++)
for(j=2*N-1;j>=m;j--) //千万注意,此处j必须递减,否则b[i][m]先变为0,后面的计算就无效!
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"); //实现了:每个i对应一个换行。
}

for(i=0;i<N;i++) //将逆矩阵存入二维数组c中。
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"); //实现了:每个i对应一个换行。
}

}

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;
}本回答被提问者采纳
第2个回答  2010-09-04
我写了一个C++类库, 不但有这些功能, 连求线性方程QR分解之类的都有.
可惜是C++啊, 还是个类库, 当然没有界面啊.

主函数你可以自己实现.

其实最难的是求逆.

我使用的方法是类似于Gauss-Jordan消元法的算法
大致是(A, I)经过消元变成(I, B), B恰好是A的逆.

如果你要那个库的话我可以发给你, 总共7个文件之多.
第3个回答  2018-12-12
别用C来做和矩阵运算有关的程序了,麻烦死了
墙裂建议学一下mathmatica
比如在mma中矩阵乘法就是A.B,三个字搞定C中的两轮for循环
而且在mma中矩阵赋值简直简单得不要不要,不需要每个分量赋值,直接一个A=B就完事了
求逆Inverse[A]
转置Transpose[A]
各种简单到极点了

!!!跪求C语言实现矩阵运算(加,减,乘、求逆、转置)
实现C语言矩阵运算包括加法、减法、乘法、求逆和转置。首先,输入矩阵的行数和列数。然后,分别输入两个矩阵的元素。对于矩阵加法,使用一个循环遍历两个矩阵的元素,将对应位置的元素相加,结果存储在第三个矩阵中。矩阵减法类似,只是将对应位置的元素相减。矩阵乘法需要进行多步运算。首先,初始化结果...

!!!跪求C语言实现矩阵运算(乘、求逆、转置、行列式)
求逆 main(){char a[80],t;int i,k;gets(a);k=strlen(a);for(i=0;i<k;i++,k--){t=a[i];a[i]=a[k];a[k]=t;} a[strlen(a)+1]='\\0';puts(a);}其他的你自己做吧 做不好的查查书;都是差不多了

C++实现任意行列数的矩阵的加,减,乘,转置,求逆矩阵,求完整代码,谢谢,c...
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("请输入第二个矩阵:"...

C语言编写稀疏矩阵的加,减,乘和转置,要求用矩阵输出
cout<<"请输入稀疏矩阵的元素个数n"<<endl;cin>>n;M.tu=n;cout<<"请输入稀疏矩阵的行数,列数:"<<endl;cin>>M.mu>>M.nu;int i;for(i=1;i<=n;i++){ cout<<"请输入稀疏矩阵的行下标和列下标,及数据;"<<endl;cin>>M.data[i].i>>M.data[i].j>>M.data[i].e ;} re...

C语言填充一个关于矩阵转置和相乘的程序
include <stdio.h>void transpose(int a[2][3], int b[3][2]){ int i, j; for(i=0;i<2;i++) for(j=0;j<3;j++) b[j][i] = a[i][j];}void multiple(int a[2][3], int b[3][2], int c[2][2]){ int i,j,ci,cj; for(ci=0;ci<2;c...

...转置等简单运算。 这是课题要求,求大佬用c语言。
内容 假设两个稀疏矩阵A和B,他们均为m行n列,要求表写求矩阵的加法即:C=A+B的算法(C矩阵存储A与B相加的结果)分析 利用一维数组来存储,一维数组顺序存放非零元素的行号、列号和数值,行号-1表示结束,然后进行矩阵加法运算时依次扫描矩阵A和B的行列值,并以行优先。当行列相同的时候,将第三...

用C语言编写一个矩阵转置的函数,矩阵的行数和列数在程序中由用户输入...
int row,clo,**nList=NULL,**nListSave=NULL; printf("输入矩阵行列数:"); scanf("%d%d",&row,&clo); nList=getList(row,clo); setNum(nList,row*clo); printf("输入的矩阵为:\\n"); prtList(nList,row,clo); printf("转置后的矩阵为:\\n")...

C语言-矩阵转置
通过遍历右上半部分矩阵元素,并与左下半部分元素交换,实现矩阵转置。代码示例:① #include 包含头文件。② #include<stdlib.h> 包含标准库。③ 定义函数 void fun(int array[3][3]),用于矩阵转置。④ 函数内部,使用两个嵌套循环遍历右上半部分矩阵元素,并交换与左下半部分元素。⑤ 主函数 ...

求程序代码?求矩阵的加、减、数乘、转置、乘法运算
(2)数与矩阵加减、矩阵除法在数学是没有意义的,在MATLAB中为简便起见,定义了这两类运算 数组运算:转置 A.' 非共轭转置,相当于(conj(A'))数组加与减 A+B与A-B 对应元素之间加减 数乘数组 k.*A或A.*k k乘A的每个元素 数与数组加减 k+A与k-A k加(减)A的每个元素 数组乘...

C语言利用指针求矩阵转置
void f(int m,int n,int *p){ int a[m][n],i,j;for(i=0;i<m;i++){ for(j=0;j<n;j++){ scanf("%d",p+i*n+j);} } for(i=0;i<m;i++){ for(j=0;j<n;j++){ printf("%d",*(p+i*n+j));} } printf("\\n");for(i=0;i<m;i++){ for(j=0;j<n;...

相似回答