//最后一个非零行主元列标放入maincol类型链表
break; //结束循环
}
for (i=s; i<M; i++)
a[i][col-1]=-(a[i][col-1]/a[s-1][col-1]);
for (i=col; i<N; i++) //消元
{
for (j=s; j<M; j++)
a[j][i]=a[j][col-1]*a[s-1][i]+a[j][i];
}
add(head, col, &tail); //将消元后得到的主元列标col放入maincol类型链表
s++;
t=col+1; //更新s,t,使s,t成为消元后得到的新的子矩阵的左上角元素行列标,为test函数操作新的子矩阵作准备
continue; //开始新一轮循环
}
}
if (col==0) //从循环控制条件退出循环
row=s-1; //此时增广矩阵已成为阶梯形矩阵,非零行函数就是s-1
if (row==0) //利用线性方程组解的判别准则判断是否有解,有多少个解
{
printf("线性方程组有无穷多组解\n"); //增广矩阵为零矩阵,无穷多组解
printf("一般解:\n");
for (i=1; i<N; i++)
printf("x%d=t%d\n", i, i); //输出解
}
else
{
psnew=head->next;
if (psnew->col==N) //阶梯形矩阵最后一主元在最后一列,无解
printf("线性方程组无解\n");
else
{
convert(a, row, head); //用convert函数将阶梯形矩阵进一步化为简化行阶梯形矩阵
if (row==N-1) //非零行行数等于未知量个数,有唯一解
{
printf("线性方程组有唯一解:\n");
for (i=1; i<=row; i++) //输出唯一解
printf("x%d=%f\n", i, a[i-1][N-1]);
}
else //非零行行数小于未知量个数,有无穷多组解
{
int *m;
m=(int *) malloc((N-1-row)*sizeof(int));
i=N-1-row;
for (j=N-1; j>=1; j--)
{
if (j!=psnew->col)
{
&