#include
#include
struct order
{ int *q;
struct order *next;
};
struct rank
{ int n;
struct order *head;
}perm;
int i,j;
void main()
{
void s(int m);
void print(int m);
void root(int m);
int m;
puts("请输入方程组元的个数:");
scanf("%d",&m);
if(m>0)
{
s(m);
root(m);
}
else puts("元的个数输入有误!!!!\n");
}
void s(int m)
{
if(m==1)
{
struct order *p1;
perm.n=m;
p1=(struct order *)malloc(sizeof(struct order));
p1->q=(int *)calloc(1,sizeof(int));
*p1->q=1;
p1->next=NULL;
perm.head=p1;
}
else
{
{s(m-1);}
{
struct order *p1,*p2,*g,*g1,*h;
perm.n=m;
g=perm.head;
h=p1=(struct order *)malloc(sizeof(struct order));
while(g!=NULL)
{
g1=g;
for(i=0;i
{
p1->q=(int *)calloc(m,sizeof(int));
p1->q[i]=m;
for(j=0;j
{
if(i>j)p1->q[j]=g->q[j];
else p1->q[j+1]=g->q[j];
}
p2=p1;
p2->next=p1=(struct order *)malloc(sizeof(struct order));
}
g=g->next,free(g1);
}
p2->next=NULL;
free(p1);
perm.head=h;
}
}
}
void root(int m)
{
int c,y,k;
struct order *p1;
float **x,*B,d;
x=(float **)calloc(m,sizeof(float *));
B=(float *)calloc(m+1,sizeof(float));
puts("按增广矩阵的排列方式按行输入方程组的系数和常数,系数为0的别忘了输入0:\n");
for(i=0;i
{
float *x1;
x1=(float *)calloc((m+1),sizeof(float));
for(j=0;j
{printf("元素D(%d,%d)=",i+1,j+1);scanf("%f",x1+j);}
x[i]=x1;
}
printf("方程组按增广矩阵的排列方式如下\n*********************************************************************\n");
for(i=0;i
{
for(j=0;j
printf("%8.2f",x[i][j]);
printf("\n");
}
printf("*********************************************************************\n");
p1=perm.head;B[0]=0;y=m*(m+1)/2;
for(c=0;p1!=NULL;c++)
{
for(j=0;j
{
d=1;
for(i=0;i
{
d=x[i][p1->q[i]-1]*d;
}
if((y+c+j)%2==0);
else
d=-d;B[0]=B[0]+d;p1=p1->next;
}
}
if(B[0]==0)
puts("能用以上增广矩阵表示的方程组无解或者有多解,对不起,本程序无法的求出该种方程组的解!");
else
{
puts("能用以上增广矩阵表示的方程组有唯一解,解如下:");
for(k=1;k
{
p1=perm.head;B[k]=0;y=m*(m+1)/2;
for(c=0;p1!=NULL;c++)
{
for(j=0;j
{
d=1;
for(i=0;i
{
if(p1->q[i]==k)d=x[i][m]*d;
else
d=x[i][p1->q[i]-1]*d;
}
} } } if((y+c+j)%2==0); else d=-d;B[k]=B[k]+d;p1=p1->next; } } printf("x%d=%f\n",k,B[k]/B[0]);
#include
#include
struct order
{ int *q;
struct order *next;
};
struct rank
{ int n;
struct order *head;
}perm;
int i,j;
void main()
{
void s(int m);
void print(int m);
void root(int m);
int m;
puts("请输入方程组元的个数:");
scanf("%d",&m);
if(m>0)
{
s(m);
root(m);
}
else puts("元的个数输入有误!!!!\n");
}
void s(int m)
{
if(m==1)
{
struct order *p1;
perm.n=m;
p1=(struct order *)malloc(sizeof(struct order));
p1->q=(int *)calloc(1,sizeof(int));
*p1->q=1;
p1->next=NULL;
perm.head=p1;
}
else
{
{s(m-1);}
{
struct order *p1,*p2,*g,*g1,*h;
perm.n=m;
g=perm.head;
h=p1=(struct order *)malloc(sizeof(struct order));
while(g!=NULL)
{
g1=g;
for(i=0;i
{
p1->q=(int *)calloc(m,sizeof(int));
p1->q[i]=m;
for(j=0;j
{
if(i>j)p1->q[j]=g->q[j];
else p1->q[j+1]=g->q[j];
}
p2=p1;
p2->next=p1=(struct order *)malloc(sizeof(struct order));
}
g=g->next,free(g1);
}
p2->next=NULL;
free(p1);
perm.head=h;
}
}
}
void root(int m)
{
int c,y,k;
struct order *p1;
float **x,*B,d;
x=(float **)calloc(m,sizeof(float *));
B=(float *)calloc(m+1,sizeof(float));
puts("按增广矩阵的排列方式按行输入方程组的系数和常数,系数为0的别忘了输入0:\n");
for(i=0;i
{
float *x1;
x1=(float *)calloc((m+1),sizeof(float));
for(j=0;j
{printf("元素D(%d,%d)=",i+1,j+1);scanf("%f",x1+j);}
x[i]=x1;
}
printf("方程组按增广矩阵的排列方式如下\n*********************************************************************\n");
for(i=0;i
{
for(j=0;j
printf("%8.2f",x[i][j]);
printf("\n");
}
printf("*********************************************************************\n");
p1=perm.head;B[0]=0;y=m*(m+1)/2;
for(c=0;p1!=NULL;c++)
{
for(j=0;j
{
d=1;
for(i=0;i
{
d=x[i][p1->q[i]-1]*d;
}
if((y+c+j)%2==0);
else
d=-d;B[0]=B[0]+d;p1=p1->next;
}
}
if(B[0]==0)
puts("能用以上增广矩阵表示的方程组无解或者有多解,对不起,本程序无法的求出该种方程组的解!");
else
{
puts("能用以上增广矩阵表示的方程组有唯一解,解如下:");
for(k=1;k
{
p1=perm.head;B[k]=0;y=m*(m+1)/2;
for(c=0;p1!=NULL;c++)
{
for(j=0;j
{
d=1;
for(i=0;i
{
if(p1->q[i]==k)d=x[i][m]*d;
else
d=x[i][p1->q[i]-1]*d;
}
} } } if((y+c+j)%2==0); else d=-d;B[k]=B[k]+d;p1=p1->next; } } printf("x%d=%f\n",k,B[k]/B[0]);