矩阵求逆部分无法运行 目前是零错误零警告 着急

#include

#include
#define N 2000

#define maxsize 2000

int system(const char *string);

typedef struct

{

int row;

int col;

int data;

}triple;
typedef struct

{
triple data[maxsize];

int m,n,len;
}matrix;

typedef struct

{

int row;

int col;

float data;

}triple_f;

typedef struct

{

triple_f data[maxsize];

int m,n,len;

}matrix_f;

matrix_f Init_f()

{

int i=0;

matrix_f *A;

A=(matrix_f
)malloc(sizeof(matrix_f));

A->len=0;

A->m=0;

A->n=0;

for(i=0;i {
A->data[i].col=0;

A->data[i].row=0;

A->data[i].data=0;

}

return A;

}

matrix Init()

{

int j=0;

matrix *A;

A=(matrix
)malloc(sizeof(matrix));

A->len=0;

A->m=0;

A->n=0;

for(j=0;j {
A->data[j].col=0;

A->data[j].row=0;

A->data[j].data=0;

}

return A;

}

void creat(matrix **A)
{
int x,y;
int i;
printf("请输入矩阵的行数,列数,非零元素的个数\n:");
scanf("%d%d%d",&(*A)->m,&(*A)->n,&(*A)->len);
printf("\n");
for(i=0;i<(*A)->len;i++)
{
printf("请输入第%d个非零元素的行: 列: 值:",i+1);
scanf("%d",&x);
(*A)->data[i].row=(x-1);
scanf("%d",&y);
(*A)->data[i].col=(y-1);
scanf("%d",&(*A)->data[i].data);
}
}

int value(matrix *a,int i,int j) //矩阵相乘时 取出一行或一列

{

int k=0;

while(k<(a->len)&&(a->data[k].row!=i||a->data[k].col!=j))

k++;

if(klen)

return a->data[k].data;

else

return 0;

}

void arr(matrix *a,matrix *b,matrix **c)

{

int i=0,j=0,k=0,p=0;

int tem;

if(a->m!=b->n)

{

printf("您输入的两个矩阵不满足相乘条件!");

system("pause");

exit(0);

}

for(i=0;in;i++)

{

for(j=0;jm;j++)

{

tem=0;

for(k=0;km;k++)

{

tem=tem+value(a,i,k)*value(b,k,j);

}

if(tem!=0)

{

(*c)->data[p].row=i;

(*c)->data[p].col=j;

(*c)->data[p].data=tem;

p++;

}

}

(*c)->n=a->n;

(*c)->m=a->m;

(*c)->len=p;

}

}

void add(matrix a,matrix *b,matrix **c)

{

if(a->m==b->m&&a->n==b->n)

{

int i=0,j=0,k=0;

(*c)->m=a->m;

(*c)->n=a->n;

while(ilen||jlen)

{

if(i==a->len&&jlen)

{

(*c)->data[k].col=b->data[j].col;

(*c)->data[k].row=b->data[j].row;

(*c)->data[k++].data=b->data[j].data;

(*c)->len++;

j++;

}

else if(ilen&&j==b->len)

{

(*c)->data[k].col=a->data[i].col;

(*c)->data[k].row=a->data[i].row;

(*c)->data[k++].data=a->data[i].data;

(*c)->len++;

i++;

}

else

{

if(a->data[i].row>b->data[j].row)

{

(*c)->data[k].col=b->data[j].col;

(*c)->data[k].row=b->data[j].row;

(*c)->data[k++].data=b->data[j].data;

(*c)->len++;

j++;

}

else if(a->data[i].rowdata[j].row)

{

(*c)->data[k].col=a->data[i].col;

(*c)->data[k].row=a->data[i].row;

(*c)->data[k++].data=a->data[i].data;

(*c)->len++;

i++;

}

else

{

if(a->data[i].col==b->data[j].col)

{

if(a->data[i].data+b->data[j].data!=0)

{

(*c)->data[k].col=a->data[i].col;

(*c)->data[k].row=a->data[i].row;

(*c)->data[k++].data=a->data[i].data+b->data[j].data;

(*c)->len++;

}

i++;

j++;

}

else if(a->data[i].col>b->data[j].col)

{

(*c)->data[k].col=b->data[j].col;

(*c)->data[k].row=b->data[j].row;

(*c)->data[k++].data=b->data[j].data;

(*c)->len++;

j++;

}

else if(a->data[i].coldata[j].col)

{

(*c)->data[k].col=a->data[i].col;

(*c)->data[k].row=a->data[i].row;

(*c)->data[k++].data=a->data[i].data;

(*c)->len++;

i++;

}

}

}

}

}

else

{

printf("您输入的两个矩阵不满足运算条件!\n");

system("pause");

}

}
int js(int s[][N],int n)
{
int z,j,k,r,total=0;
int b[N][N]; //b[N][N]用于存放,在矩阵s[N][N]中元素s[0]的余子式
if(n>2)
{
for(z=0;z {
for(j=0;j for(k=0;k if(k>=z)
b[j][k]=s[j+1][k+1];
else
b[j][k]=s[j+1][k];
if(z%2==0)
r=s[0][z]*js(b,n-1); //递归调用
else
r=(-1)*s[0][z]*js(b,n-1);
total=total+r;
}
}
else
if(n==2)
total=s[0][0]*s[1][1]-s[0][1]*s[1][0];
return(total);
}
void n_1(int s[][N],float b[][N],int n)
{
int z,j,k,l,m,g,a[N][N];
for(z=0;z {
l=z;
for(j=0;j {
m=j;
for (k=0;k for(g=0;g {
if(g>=m&&k a[k][g]=s[k][g+1];
else
if(k>=l&&g a[k][g]=s[k+1][g];
else
if(k>=l&&g>=m)
a[k][g]=s[k+1][g+1];
else
a[k][g]=s[k][g];
}
b[z][j]=js(a,n-1);
}
}
}
void qiuni(int s[][N],float b[][N],int n)
{
int a[N][N];
int r,z,j;
float temp;
scanf("%d",&n);
printf("Input original data:\n");
for(z=0;z<n;z++)
for(j=0;j<n;j++)
scanf("%d",&a[z][j]);
printf("\nPress Enter continue......");
getchar();
printf("The original matrix is:\n");
for(z=0;z<n;z++)
{
for(j=0;j<n;j++)
printf("%5d",a[z][j]);
printf("\n");
}
r=js(a,n);
printf("\nThe original matrix 行列式 is:|A|==%d\n",r);
if (r==0)
printf("Because |A|==0,the original matrix have no 逆矩阵!");
else
{
n_1(a,b,n);
for(z=0;z<n;z++)
for(j=0;j<n;j++)
if((z+j)%2!=0 && b[z][j]!=0)
b[z][j]=-b[z][j];
for(z=0;z<n;z++)
for(j=z+2;j<n;j++)
{
temp=b[z][j];
b[z][j]=b[j][z];
b[j][z]=temp;
}
printf("Because |A|!=0,the original matrix have 逆矩阵!\n");
printf("The 伴随矩阵 A
is:\n");
for(z=0;z<n;z++)
{
for(j=0;j<n;j++)
printf("%4.0f\t",b[z][j]);
printf("\n");
}
for(z=0;z<n;z++)
for(j=0;j<n;j++)
b[z][j]=b[z][j]/r;
printf("\nThe 逆矩阵 is:(A*)/|A|(|A|=%d)\n",r);
for(z=0;z<n;z++)
{
for(j=0;j<n;j++)
printf("%8.3f",b[z][j]);
printf("\n");
}
}
}

void print_role()
{
printf("/************************************************/\n");
printf("/*** 1:输入矩阵A /\n");
printf("/
2:输入矩阵B /\n");
printf("/
4:矩阵A+B /\n");
printf("/
6:矩阵A*B /\n");
printf("/
7:矩阵A求逆 /\n");
printf("/
*********************************************/\n");
}

int main()
{
int n;
matrix *A;
matrix *B;
matrix *C;
A=Init();
B=Init();
C=Init();
print_role();
scanf("%d",&n);
switch(n)
{
case 1:
{
printf("输入矩阵A:\n");
creat(&A);
break;
}
case 2:
{
printf("输入矩阵B: \n");
creat(&B);
break;
}
case 4:
{
printf("A+B: \n");
add(A,B,&C);
break;
}
case 6:
{
printf("A*B: \n");
arr(A,B,&C);
break;
}
case 7:
{
printf("A逆:\n");
qiuni(A,B,C);
break;
}
}
return 0;
}

图片说明

代码不完整,有好几处这样的代码