求解任意n元一次方程组
现在整理了一段求解任意n元一次方程组的代码如下,献给大家:程序代码:
# include <stdio.h> int main(void) { int i, j, m, n, r, k=0, t; //i,j,m,k,t 作为循环计数变量;n表示有n个未知数,即n元;r表示有r个方程组成方程组。 printf("请输入未知数个数n和方程的个数:\n"); scanf("%d %d", &n, &r); //n表示有n个未知数,即n元;r表示有r个方程组成方程组。 float a[11][20]; //用二维数组存储方程组参数。11和100课改动。这里的程序限 10 元 20 个方程的方程组。 printf("请输入方程组参数\n"); for(j=0; j<n; j++) for(i=0; i<r+1; i++) scanf("%f", &a[j][i]); if(r<n) printf("方程有无穷解\n"); if(r==n) { printf("方程有唯一解\n"); for(t=0; t<n-1; t++) //循环次数:当t=0时,仅将a[1][0],a[2][0],a[2][1]的值转换为0;t=1时,才将其转换成最简型阶梯矩阵。 for(m=0; m<n; m++) //m表示第m列 for(j=0; j<n; j++) //j表示第j行 if(j!=m) { float b= a[j][m]/a[m][m]; for(i=0; i<n+1; i++) //因为一行的每个元素均要进行运算等式两边才会相等。 a[j][i] -= a[m][i]*b; } for(j=0; j<n; j++) //为了将其转换成单位矩阵,见《线性代数》 { a[j][n] /=a[j][j]; a[j][j] /=a[j][j]; } } for(j=0; j<r; j++) printf("x[%d] = %f\n", j, a[j][n]); //输出最终结果,即未知数x,y,z...的值。 return 0; }