采用列选主元方式实现,过程中维护了两个数组,分别记录改行是否已经选取主元,与选取主元行数的顺序。回代时利用选取顺序逆序得到最终结果。输入时先输入矩阵A的维数(方阵)n,再分别输入n个行向量;最后输入b。代码如下(由于使用了_Bool类型数组,需添加编译选项-std=c99,或者你可以直接改成int类型的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double Abs(double x) { return (x > 0) ? x : -x; }
int* GaussE(double **A, double *b, int size);
double* backSub(double **A, double *b, int *order, int size);
int findMaxLin(double **A, _Bool *flag, int col, int size);
int main(void) {
int size;
double **A;
double *b;
double *slt;
int *order;
int cnt;
scanf("%d", &size);
getchar();
A = (double **)malloc(sizeof</