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

#include<stdio.h>#include<math.h>voidmain(){doublex1,x2,a,b,c,deta;printf("按降次的顺序输入系数... #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型,是什么原因呢
展开
 我来答
我是20120101
2013-04-05
知道答主
回答量:37
采纳率:0%
帮助的人:14.9万
展开全部
#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);
}
给点赞助!}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
towardsworthy
2011-10-27 · TA获得超过5万个赞
知道大有可为答主
回答量:7121
采纳率:66%
帮助的人:3589万
展开全部
scanf("%f%f%f",&a,&b,&c);
因为你这里是要输入三个float型的数据,所以a b c的数据类型要是float的 呵呵

这样的话:
scanf("%lf%lf%lf",&a,&b,&c);
a b c就可以定义为double类型的数据啦~~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
AngelisI
2011-10-27 · TA获得超过3.1万个赞
知道大有可为答主
回答量:6588
采纳率:83%
帮助的人:3213万
展开全部
因为scanf("%f%f%f",&a,&b,&c);
scanf 时,格式定义和类型必须一致
这里输入是float,如果用double的abc会出问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5cad33e04
2011-10-27 · 超过11用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:20.8万
展开全部
上面两个都是高手啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
捌零Music
2011-10-27
知道答主
回答量:6
采纳率:0%
帮助的人:6761
展开全部
数据定义错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式