
求解n元一次方程组的C语言程序,简单点的,网上的太复杂了 50
展开全部
# 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;
}
输入为:2 2 -1 6 1 -2 4 3 5 7 1 28
即方程组为:
2x+2y- z=6
x-2y+4z=3
5x+7y+ z=28
其正确结果是:x=1,y=3,z=2
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询