一个简单的C语言程序问题?

请问求一个六元一次方程组用C语言程序怎么实现:如a-b+c-d+e+d=40a+b+c+d+e+f=244a+2d+f=30a+b+c-d-e+f=244c-2e+f=3... 请问求一个六元一次方程组用C语言程序怎么实现:如
a-b+c-d+e+d=40
a+b+c+d+e+f=24
4a+2d+f=30
a+b+c-d-e+f=24
4c-2e+f=32
4a-4b+4c+2d-2e+f=25
不是啊,我问的是用C语言怎么实现,不是用矩阵什么的,还有下面的方法我都试过了都不行啊,有哪位高手指点一下,急啊!
不行啊,兄弟们,这些方法我都试过了,都不行啊,拜托了,各位在提供一些方法好吧!
展开
 我来答
signallock
2008-04-19 · TA获得超过364个赞
知道小有建树答主
回答量:396
采纳率:0%
帮助的人:509万
展开全部
楼上所有的解法纯属瞎扯……
gis19831203说的完全正确!!

要用到矩阵,有些著名的算法如高斯消元法就是解多元线性方程组的。

以下是高斯消元法的c语言实现,它可以解4行5列的矩阵,如果解楼主的方程组,需要把宏常量“L”,“M”和“N”分别改为5,7,6

注:所解矩阵为线性方程组的系数,解楼主的方程组时,该矩阵为:
1 -1 1 -1 1 1 40
1 1 1 1 1 1 24
4 0 0 2 0 1 30
1 1 1 -1 -1 1 24
0 0 4 0 -2 1 32
4 -4 4 2 -2 1 25
********************************
#include "Stdio.h"
#include "Conio.h"
/*L是矩阵的行减1,从程序上看是最外层循环的次数
N 对应矩阵的行数,M对应矩阵的列数
可以通过改变L、N、M来控制矩的阶数 */
#define L 3
#define N 4
#define M 5
void gauss(double a[N][M],double x[N])
{int i,j,l,n,m,k=0;
double temp[N];
/*第一个do-while是将增广矩阵消成上三角形式*/
do{n=0;
for(l=k;l<L;l++)temp[n++]=a[l+1][k]/a[k][k];
for(m=0,i=k;i<N;i++,m++)
for(j=k;j<M;j++)a[i+1][j]-=temp[m]*a[k][j];
k++;
}while(k<N) ;
/*第二个do-while是将矩阵消成对角形式,并且重新给k赋值*/
k=L-1;
do{n=0;
for(l=k;l>=0;l--)temp[n++]=a[k-l][k+1]/a[k+1][k+1];
for(m=0,i=k;i>=0;i--,m++)
for(j=k;j<M;j++)a[k-i][j]-=temp[m]*a[k+1][j];
k--;
}while(k>=0) ;
/*下一个for是解方程组*/
for(i=0;i<N;i++)x[i]=a[i][N]/a[i][i];

}
void menu()
{printf("\n _ _ _ _ _\n");
printf(" 1.operation\n");
printf(" 2.exit");
printf("\n _ _ _ _ _\n");
}
main()
{int i,j,choose;
double a[N][M]={0},answer[N];
clrscr();
while(1){
leep:menu();
scanf("%d",&choose);
switch(choose){
case 1:
printf("!!The size of Maxrix is %d * %d,each line enter %d element:\n ",N,M,M);
for(i=0;i<N;i++)
{printf("Enter the Matrix's %d line:\n",i);
for(j=0;j<N+1;j++)
scanf("%lf",&a[i][j]);
}

printf("\nthe corss matrix is:\n_ _ _ _ _\n");
gauss(a,answer);
for(i=0;i<N;i++)
{for(j=0;j<M;j++)
printf("%-2lf ",a[i][j]);
putchar('\n');
}
printf("_ _ _ _ _\nthe solve is:\n");
for(i=0;i<N;i++)printf("x%d=%lf\n",i+1,answer[i]);
break;
case 2:
exit(0);break;
default:printf("input error:\n");goto leep;
}
}
getch();
}
/*试验:
西安交通大学出版社出版的《计算方法》书上28页的例2.1:
1 2 3 -4 -2
-3 -4 -12 13 5
2 10 0 -3 10
4 14 9 -13 7
试验结果:x1=1,x2=2,x3=3,x4=4 */
startry08
2008-04-18 · TA获得超过1231个赞
知道小有建树答主
回答量:273
采纳率:0%
帮助的人:192万
展开全部
共设12个变量a/b/c/d/e/f,另设六个方程的结果分别为g/h/i/j/k/l,用if语句
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gis19831203
2008-04-18 · TA获得超过690个赞
知道小有建树答主
回答量:914
采纳率:0%
帮助的人:841万
展开全部
你要是学过线性代数的话,应该有很多方法,但是都应该用矩阵来解.
比如:高斯消元法等等.
顺便说一句,楼上的方法恐怕行不通.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
心深游五飞夜00
2008-04-18
知道答主
回答量:16
采纳率:0%
帮助的人:0
展开全部
是啊。上面那个设置12个变量的算法纯粹是错的,你能保证解都是整数吗?还不知道就把他们定义成int型。
对于这样的数学问题还是用专门的数学软件。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小百心9410
2008-04-18 · TA获得超过100个赞
知道小有建树答主
回答量:212
采纳率:0%
帮助的人:151万
展开全部
这样做,没问题
main()
{
float a,b,c,d,e,f;
if (
(a-b+c-d+e+d==40)
&&(a+b+c+d+e+f==24)
&&(4a+2d+f==30)
&&(a+b+c-d-e+f==24)
&&(4c-2e+f==32 )
&&(4a-4b+4c+2d-2e+f==25)
)
printf(“%f,%f,%f,%f,%f,%f”,a,b,c,d,e,f)
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
非突_real
2008-04-18 · TA获得超过330个赞
知道小有建树答主
回答量:501
采纳率:0%
帮助的人:385万
展开全部
还是matlab好啊,solve一下就好了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式