c语言求解,求解二元一次方程?

#include<stdio.h>
#include<math.h>
void main()
{
double x1,x2,a,b,c,deta;
printf("按降次的顺序输入系数a,b,c\n");
scanf("%f%f%f",&a,&b,&c);
printf("要求解方程为:\n%fx^2+%fx+%f=0\n",a,b,c);
deta=b*b-4*a*c;
if(deta>0)
{
x1=(-b+sqrt(deta))/(2*a);
x2=(-b-sqrt(deta))/(2*a);
printf("该方程有两个不等的实数根\nx1=%f\nx2=%f\n",x1,x2);
}
else if(deta==0)
{
x1=x2=-b/(2*a);
printf("该方程有两个相等的实数根\nx1=x2=%f\n",x1);
}
else
printf("该方程没有实数根,有两个虚根分别为:\nx1=%f+%fi\nx2=%f-%fi\n",(float)(-b/(2*a)),(float)((sqrt(-deta))/(2*a)),(float)(-b/(2*a)),(float)((sqrt(-deta))/(2*a)));

}
这样子的话根本求不到解的,但是把类型改为下面的话就可以求出结果:
#include<stdio.h>
#include<math.h>
void main()
{
double x1,x2;
float a,b,c,deta;
printf("按降次的顺序输入系数a,b,c\n");
scanf("%f%f%f",&a,&b,&c);
printf("要求解方程为:\n%fx^2+%fx+%f=0\n",a,b,c);
deta=b*b-4*a*c;
if(deta>0)
{
x1=(-b+sqrt(deta))/(2*a);
x2=(-b-sqrt(deta))/(2*a);
printf("该方程有两个不等的实数根\nx1=%f\nx2=%f\n",x1,x2);
}
else if(deta==0)
{
x1=x2=-b/(2*a);
printf("该方程有两个相等的实数根\nx1=x2=%f\n",x1);
}
else
printf("该方程没有实数根,有两个虚根分别为:\nx1=%f+%fi\nx2=%f-%fi\n",(float)(-b/(2*a)),(float)((sqrt(-deta))/(2*a)),(float)(-b/(2*a)),(float)((sqrt(-deta))/(2*a)));

}
求解,这个double型的为何一定要改为float型,是什么原因呢

第1个回答  2013-04-05
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c;
float x1,x2;
float x3,x4;
float k1,k2,k3;
printf("please input:a,b,c");
scanf("%f%f%f",&a,&b,&c);
k1=b*b;
k2=4*a*c;
k3=sqrt(b*b-4*a*c);
if(fabs(a)<=1e-6)
{
printf("the input is error\n");
return;
}
if(k1>k2)
{
x1=(-b+k3)/(2*a);
x2=(-b-k3)/(2*a);
printf("x1=%.2f,x2=%.2f",x1,x2);
}
else if(k1==k2)
{
x1=x2=(-b+k3)/(2*a);
printf("x1=x2=%.2f",x1);
}
else
{
x3=-b/(2*a);
x4=sqrt(4*a*c-b*b)/(2*a);
printf("x1=%.2f+%.2f i\n",x3,x4);
printf("x2=%.2f-%.2f i\n",x3,x4);
}
给点赞助!}
第2个回答  2011-10-27
scanf("%f%f%f",&a,&b,&c);
因为你这里是要输入三个float型的数据,所以a b c的数据类型要是float的 呵呵

这样的话:
scanf("%lf%lf%lf",&a,&b,&c);
a b c就可以定义为double类型的数据啦~~本回答被提问者采纳
第3个回答  2011-10-27
因为scanf("%f%f%f",&a,&b,&c);
scanf 时,格式定义和类型必须一致
这里输入是float,如果用double的abc会出问题
第4个回答  2011-10-27
上面两个都是高手啊
第5个回答  2011-10-27
数据定义错误

c语言求解,求解二元一次方程?
void main(){ float a,b,c;float x1,x2;float x3,x4;float k1,k2,k3;printf("please input:a,b,c");scanf("%f%f%f",&a,&b,&c);k1=b*b;k2=4*a*c;k3=sqrt(b*b-4*a*c);if(fabs(a)<=1e-6){ printf("the input is error\\n");return;} if(k1>k2){ x1=(-b+k...

C语言编程,二元一次方程组?
main(){ double a1,b1,c1,a2,b2,c2,x,y;printf("请依次输入A1、B1、C1、A2、B2、C2\\n");scanf("%lf%lf%lf%lf%lf%lf",&a1,&b1,&c1,&a2,&b2,&c2);x=(c1*b2-b1*c2)\/(a1*b2-b1*a2);y=(c1*a2-a1*c2)\/(b1*a2-a1*b2);printf("x=%lf,y=%lf\\n",x,y);} ...

用C语言解二元一次方程要用什么公式吗??
dx+ey+f=0 输入a,b,c,d,e,f这些系数后,转化为x=(-by-c)\/a,代入,d*(-by-c)\/a+ey+f=0 化简-b*d*y\/a-c*d\/a+ey+f=0 (ea-b*d)*y\/a=c*d\/a-f y=a*(c*d\/a-f)\/(ea-b*d)解出y后,x=(-by-c)\/a 代码实现:include <stdio.h> void main(){ double a,b,...

C语言求二元一次方程
int main(){ double a,b,c;printf("Please input a,b,c\\n");scanf("%f,%f,%f",&a,&b,&c);double dirt=b*b-4*a*c;if (a==0)\/\/两个== printf("此方程非二元一次方程");if (dirt==0)\/\/两个== { printf("x1,x2=%f",(-b)\/(2*a));} else\/\/加大括号 不解释 {...

如何用C语言解二元一次方程组
给定一个二元一次方程组,形如:a * x + b * y = c;d * x + e * y = f;x,y代表未知数,a, b, c, d, e, f为参数。求解x,y。2、数据规模和约定:0 <= a, b, c, d, e, f <= 2147483647。3、设计思路:二元一次方程组是由两个含有两个未知数的方程组成的,要求解,...

c语言求解任意系数的二元一次方程
&c); delta = b * b - 4 * a * c; if (a == 0) { \/*一元一次方程, bx+c=0, x=-c\/b*\/ printf("x = %g", - c \/ b); } else { if (delta < 0.0) { \/*方程无解*\/ printf("

用c编程求二元一次方程ax^2+bx+c=0的根
b,c,x1,x2,p,q,disc;printf("inputa,b,c\\n");scanf("a=%f,b=%f,c=%f",&a,&b,&c);disc=b*b-4*a*c;if(disc<0){ printf("没根\\n");} else { p=-b\/(2*a);q=sqrt(disc)\/(2*a);x1=p+q;x2=p-q;printf("\\nx1=%5.2f\\nx2=%5.2f\\n",x1,x2);} } ...

用C语言编写解二元一次方程的程序?
输入没有错误;x 总是在前面,y 总是在后面;不存在某个变量系数为 0 的情况(即总是二元方程);不考虑小数,其实考虑小数也简单,你可以自己思考如何实现。首先,使用 scanf() 将回车之前的整个字符串扫描进来,放进 str 变量中;之后,分别以 x y = 为界,找到它们分隔的三个字符串,即从 ...

怎么用c语言编一个程序解二元一次方程
这个只能计算已经化简成aX^2+bX+c=0的一元二次方程 int fun(double a,double b,double c,double *x1,double *x2)\/\/由于方程既可能无解也可能有两个解,所以不能直接返回X的值{ double p=b*b-4*a*c;\/\/计算Δ if (p<0) { return 0;\/\/方程无解,返回0 } p=√...

c语言编写二元一次方程组求解,菜鸟级,帮忙指出错误,谢谢
main(){ int x1,x2,x3,y1,y2,y3,d1,d2,d3;\/*赋任意值,已知数和未知数都是整数 \/ signed int x=-32767,y=-32767;\/*未知数取值范围,可修改*\/ int r1=0,r2=0,r3=0;\/*方程是否成立变量*\/ int suc=0;\/*解题是否成功变量*\/ for(;x<=32767;x++){ for(y=-32767;y<=32767;y...

相似回答