求高手编写C语言求3*3矩阵的逆矩阵! 具体数值在问题补充里!

求高手编写C语言求3*3矩阵的逆矩阵! 具体数值在问题补充里!

编一个程序分别求出图中A , B 矩阵的逆矩阵

#include 

using namespace std;

#define TYPE int

#define NUM 唯宽拦3

TYPE matrix1[NUM][NUM], matrix2[NUM][NUM];

void Fun()

{

int i,j;

for(i = 0; i < NUM; i ++)

{

for(j = 0; j <= NUM; j++)

{

matrix2[j][i] = matrix1[i][j];

}

}

}

void Init()

{

int i,j;

for(i = 0; i < NUM; i ++)

{

for(j = 0; j < NUM; j++)

{

cout <指胡<巧纯 "请输入第" << i + 1 << "行,第" <

cin >> matrix1[i][j];

}

}

}

void Output(int matrix[][NUM])

{

int i,j;

for(i = 0; i < NUM; i ++)

{

for(j = 0; j < NUM; j++)

{

cout << matrix[i][j] << " ";

}

cout << endl;

}

}

void main()

{

//求3*3矩阵的逆矩阵

Init();

cout << "matrix1为:" << endl;

Output(matrix1);

Fun();

cout << "matrix2为:" << endl;

Output(matrix2);

}


不多说了。楼主要求的是矩阵的逆矩阵,不是转置矩阵。
思路如败改下:

对于矩阵A
先求|A|
再求A*
最后根据A^(-1)=(1/|A|)×A* 即可得出。

DevC++编译测试通过,且正确结果如下;
原来矩阵如下:贺慧
1 0 1
2 1 0
-3 2 -5

|A|= 2.00

|A*|矩阵如下:
-5.00 2.00 -1.00
10.00 -2.00 2.00
7.00 -2.00 1.00

|A^-1|矩阵如下:
-2.50 1.00 -0.50
5.00 -1.00 1.00
3.50 -1.00 0.50

请按任意键继续. . .

正确的代码如下;
#include "stdio.h"
#include "stdlib.h"

void printArrayDouble3(double a[][3],int m,int n)
{
for(int i=0;i {
for(int j=0;j {
printf("%6.2lf"禅枯答,a[i][j]);
}
printf("\n");
}
printf("\n");
}

void printArray3(int a[][3],int m,int n)
{
for(int i=0;i {
for(int j=0;j {
printf("%4d",a[i][j]);
}
printf("\n");
}
printf("\n");
}

void printArray2(int a[][2],int m,int n)
{
for(int i=0;i {
for(int j=0;j {
printf("%4d",a[i][j]);
}
printf("\n");
}
printf("\n");
}

double towFac(int b[][2])
{
return b[0][0]*b[1][1]-b[0][1]*b[1][0];
}

void copy3To2(int a[][3],int b[][2],int i,int j)
{
int m=0,n=0;
int count=0;
for(m=0;m<3;m++)
{
for(n=0;n<3;n++)
{
if(m!=i&&n!=j)
{
count++;
b[(count-1)/2][(count-1)%2]=a[m][n];
}
}
}
}

double threeSum(int a[][3],int b[][2])
{
double sum=0;
for(int i=0;i<3;i++)
{
copy3To2(a,b,0,i);
if(i%2==0)
{
sum+=a[0][i]*towFac(b);

}
else
{
sum-=a[0][i]*towFac(b);
}
}
return sum;
}

void calCArray(int a[][3],int b[][2],double c[][3])
{
int i=0;
int j=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
copy3To2(a,b,i,j);
if((i+j)%2==0)
{
c[j][i]= towFac(b);
}
else
{
c[j][i]=-towFac(b);
}
}
}
printf("\n|A*|矩阵如下:\n");
printArrayDouble3(c,3,3);
}

void niArray(double c[][3],double A)
{
int i=0;
int j=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
c[i][j]/=A;
}
}
printf("\n|A^-1|矩阵如下:\n");
printArrayDouble3(c,3,3);
}

main()
{
int i,n=0;
long sum=0;
int a[3][3]=
{
{1,0,1},
{2,1,0},
{-3,2,-5}
};
printf("原来矩阵如下:\n");
printArray3(a,3,3);
int b[2][2];
double c[3][3];
double t=threeSum(a,b);//求|A|
printf("|A|=%6.2lf\n",t);

calCArray(a,b,c);//求A*

niArray(c,t);//求逆矩阵
system("pause");
}

楼主你吧代码中的矩阵换成你图中的A和B就可以了。好运!
【PS:Negamax原创:2012-04-22 21:16,转载请说明!】
不是很懂你这道题的意思 你可以将它说得更明白些吗?
我也没看懂你的意思 这种题目C语言参考书 上都会有的,多看看课外的相关书籍
← 上一篇: 下一篇: →