用C语言求解一元二次方程的解,为什么编译什么的都过了,就是运行的结果不对啊,求帮忙看下哪里错了? 10

#include<stdio.h>#include<math.h>//一元二次方程求解intmain(){doublea,b,c;doubledelta;delta=b*... #include<stdio.h>#include<math.h>
//一元二次方程求解
int main()
{
double a,b,c;
double delta;
delta=b*b-4*a*c; //delta存放b*b-4ac的值
printf("请输入一元二次方程的系数a,b,c\n");
getchar();
scanf("a=%fb=%fc=%f\n",&a,&b,&c);
getchar();
double x1,x2; //存放一元二次方程的两个解

if(delta>0)
{

x1=(-b+sqrt(delta))/2*a;
x2=(-b-sqrt(delta))/2*a;

printf("该方程有两个不同解x1=%f,x2=%f\n",x1,x2);
}
else if(delta==0)
{
x1=(-b)/2*a;
x2=x1;
printf("该方程有唯一的一个解x1=x2=%f\n",x2);
}
else
{
printf("该方程无解\n");
}

return 0;}
展开
 我来答
无忧网事
2013-04-01 · TA获得超过899个赞
知道小有建树答主
回答量:676
采纳率:100%
帮助的人:281万
展开全部
程序修改为:

#include<stdio.h>
#include<math.h>
//一元二次方程求解
int main()
{
double a,b,c;
double delta;
double x1,x2;    /*变量定义放在一起! */
printf("请输入一元二次方程的系数a,b,c\n");
getchar();  /*这一句不是必须的! */
scanf("lf,%lf,%lf\n",&a,&b,&c); /*记住:double数据要用:lf%格式!!!! */
getchar();  /*这一句也不是必须的! */

delta=b*b-4*a*c; /*delta存放b*b-4ac的值 */
if(delta>0)
{

x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);

printf("该方程有两个不同解x1=%lf,x2=%lf\n",x1,x2); /*记住:double数据要用:*/
/* lf%格式!!!! */
}

else if(delta==0) /*计算机中,存在误差(精度),对实数来讲,小到一定程序就是0了,*/
/*所以实型变量是否为0,跟整型数据使用的形式还真不一样。 */
/*比如delta<e-10即小于10的负10次方,就认为是0了。 */

{
x1=(-b)/(2*a); /* !!!*/
x2=x1;
printf("该方程有唯一的一个解x1=x2=%lf\n",x2); /* 记住:double数据要用: */
 /*   lf%格式!!!! */

}
else
{
printf("该方程无解\n");
}

return 0;}
追问

,大神,差不多了,可是还有问题呢。。。

追答
1、double默认输出格式0太多,改成printf("该方程有两个不同解x1=%5.2lf,x2=%5.2lf\n",x1,x2);  吧
2、将else if(delta==0) 改为else if(abs(delta)<1e-5)
输入应该是:
scanf("%lf,%lf,%lf\n",&a,&b,&c); 
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小丑Delta
2013-04-01 · 超过20用户采纳过TA的回答
知道答主
回答量:48
采纳率:100%
帮助的人:26.5万
展开全部
你确定你这个是要用C语言写的? 定义竟然想学C++,而且scanf("a=%fb=%fc=%f\n",&a,&b,&c);这个在你输入的时候会很烦的 ,你只能这样输入a=4.0b=5.0c=7.0;这种形式输入,除非你改成scanf("%f%f%f",&a,&b,&c);C语言一般输入都是这样子的 ,别在scnaf中加东西,不然输入很麻烦,你程序蛮多处错误的,现在在帮你慢慢改
更多追问追答
追问
谢谢
追答
#include
#include
//一元二次方程求解
int main()
{
double a,b,c;
double delta;
double x1,x2;//存放一元二次方程的两个解
printf("请输入一元二次方程的系数a,b,c:");
scanf("%f %f %f",&a,&b,&c);
delta=b*b-4*a*c; //delta存放b*b-4ac的值
if(delta>0)
{

x1=(-b+sqrt(delta))/2*a;
x2=(-b-sqrt(delta))/2*a;
printf("该方程有两个不同解x1=%f,x2=%f\n",x1,x2);
}
else if(delta==0)
{
x1=(-b)/2*a;
x2=x1;
printf("该方程有唯一的一个解x1=x2=%f\n",x2);
}
else
{
printf("该方程无解\n");
}

return 0;}
这个可以运行 你之前的那个问题是,就像我上面说的,输入方便方法不对 ,因为你用的是scanf("a=%fb=%fc=%f\n",&a,&b,&c); 所以你输入是的方式只能是a=1 b=2 c=1才行 或者你把scanf改成我上面说的就行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
德克and德华

2013-04-01 · TA获得超过2649个赞
知道小有建树答主
回答量:1207
采纳率:100%
帮助的人:614万
展开全部
delta=b*b-4*a*c; //delta存放b*b-4ac的值
上面这行放到getchar();下面,不然你就是使用未初始化的a\b\c在运算了

另外要注意输入格式:a=3.0b=4.0c=5.0
追问
改了但是还是不行啊??
追答
注意我说的输入格式:a=3.0b=4.0c=5.0

"a="、"b="和"c="是必须的,因为你的scanf这样写了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dennis_zyp
2013-04-01 · TA获得超过11.5万个赞
知道顶级答主
回答量:4万
采纳率:90%
帮助的人:1.9亿
展开全部
delta=b*b-4*a*c; //delta存放b*b-4ac的值
这句要放在这两句后面,不然delta恒为0.
scanf("a=%fb=%fc=%f\n",&a,&b,&c);
getchar();
更多追问追答
追问

,改了还是错的,还有哪里有错吗?拜托

追答
双精度数的话要delta==0是很难精确为0的,而你这个输入虽然精确计算是delta=0的情形,但计算机可能算为-0.000000001,这样按你的判别式就无解了。
可将delta==0改成 abs(delta)<1e-10
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
670360484ZOU
2013-04-01 · 超过26用户采纳过TA的回答
知道答主
回答量:97
采纳率:0%
帮助的人:63.8万
展开全部
应该把
delta=b*b-4*a*c; //delta存放b*b-4ac的值
这个放在
scanf("a=%fb=%fc=%f\n",&a,&b,&c);

之后 因为没赋值之前便令并非没有值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式