#include<stdio.h>
#include<stdlib.h>
int system(const char *string);
#define maxsize 2000
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<maxsize;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<maxsize;j++)
{
A->data[j].col=0;
A->data[j].row=0;
A->data[j].data=0;
}
return A;
}
void print_menu()
{
char ch1='=';
int i;
for(i=0;i<80;i++)
printf("%c",ch1);
}
void qiuni(matrix_f *A,matrix_f **C)
{
/*参数声明*/
int i=0,j=0,m=0,row=0,col=0,r1,k,tz=0,tem_row,tem_col,l;
float n1,n2,t,x,n3,sum;
matrix_f *B;
/*变量运算*/
B=Init_f();
/*创建矩阵AI*/ /*这部分已完成,下面部分禁止修改*/
m=0;j=0;
B->m=A->m; B->n=2*(A->n); B->len=(B->m)*(B->n);
tem_row=0; tem_col=0;
for(i=0;i<B->len;i++)
{
B->data[i].data=0;
B->data[i].col=tem_col;
B->data[i].row=tem_row;
tem_col++;
if(tem_col==B->n)
{
tem_col=0;
tem_row++;
}
}
for(i=0;i<A->len;i++)
for(j=0;j<B->len;j++)
if(B->data[j].row==A->data[i].row&&B->data[j].col==A->data[i].col)
B->data[j].data=A->data[i].data;
j=0;
for(i=0;i<A->m;i++)
{
B->data[j*(B->n)+i+B->m].data=1;
j++;
}
/*变换矩阵AI*/
row=0; col=0; i=0; j=0; n1=1.0; n2=1.0;
r1=0; k=0; t=1.0; l=0; x=0;
for(col=0;col<B->m;col++)
{
for(row=0;row<B->m;row++)
{
if(row!=col)
{
for(i=0;i<B->len;i++)
if(B->data[i].row==row&&B->data[i].col==col)
{n1=B->data[i].data;break;}
for(j=0;j<B->len;j++)
if(B->data[j].row==col&&B->data[j].col==col)
{n2=B->data[j].data;break;}
t=n1/n2;
for(r1=0;r1<(2*B->m);r1++)
{
for(k=0;k<B->len;k++)
if(B->data[k].row==col&&B->data[k].col==r1)
{n3=B->data[k].data;break;}
x=n3*t;
for(l=0;l<B->len;l++)
if(B->data[l].row==row&&B->data[l].col==r1)
{B->data[l].data=B->data[l].data-x;break;}
}
}
}
}
row=0;j=0;n1=0;col=0;i=0;
for(row=0;row<B->m;row++)
{
for(j=0;j<B->len;j++)
if(B->data[j].row==row&&B->data[j].col==row)
{n1=B->data[j].data;break;}
for(col=0;col<B->n;col++)
for(i=0;i<B->len;i++)
if(B->data[i].row==row&&B->data[i].col==col)
{B->data[i].data=(B->data[i].data)/n1;break;}
}
row=0;col=0;sum=1;tem_row=0;tem_col=0;
for(row=0;row<B->m;row++)
{
for(i=0;i<B->len;i++)
{
if(B->data[i].row==row&&B->data[i].col==row)
sum=sum*(B->data[i].data);
}
}
if(sum==0)
printf("您所输入的矩阵没有逆矩阵!\n");
else
{
(*C)->len=B->len/2;
(*C)->m=B->m;
(*C)->n=B->m;
for(i=0;i<(*C)->len;i++)
{
(*C)->data[i].data=B->data[i+(tem_row+1)*B-
课程设计:用C语言编写的稀疏矩阵运算器(加、减、乘、求逆)
最新推荐文章于 2022-01-08 13:39:56 发布