C语言程序设计求方程的解:求ax2+bx+c=0方程的实根

C语言程序设计求方程的解:求ax2+bx+c=0方程的实根。a,b,c由键盘输入.输入三个数a,b,c;输出方程的实根,如果方程有实根,则输出根;如果方程有2个不等实根,... C语言程序设计求方程的解:求ax2+bx+c=0方程的实根。a,b,c由键盘输入.
输入三个数a,b,c;输出方程的实根,如果方程有实根,则输出根;如果方程有2个不等实根,则分2行输出,第一行输出较大根,第二行输出较小根。
其余情况(如无实根等)则输出No

/*
求方程的解
*/
#include<stdio.h>
#include<math.h>
int main(void)
{
float a=0;
float b=0;
float c=0;
float d=0;
float x1,x2;
scanf("%f%f%f",&a,&b,&c);
d=b*b-4*a*c;
if(d>0){
d=sqrt(d);
b=-b;
x1=(b+d)/(2*a);
x2=(b-d)/(2*a);
if(x1>x2){
printf("%f\n%f",x1,x2);
}
else printf("%f",x1);
}
else printf("No");
return 0;
}
这是我写的,为什么错了?
展开
 我来答
1058556625
推荐于2018-02-28
知道答主
回答量:8
采纳率:0%
帮助的人:1.3万
展开全部
你的问题是当d>0时,顺程序看下去自然就有x1>x2,所以if中的嵌套if没有起作用,也就是d=0你就直接归为输出no了,下面是我在你的程序基础上改的,删去了一些较繁琐的地方,程序相当简便,即使你用不到也可能对后来人有帮助。
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c,d;
float x1,x2;
printf("please input 3 numbers:\n");
scanf("%f%f%f",&a,&b,&c);
d=b*b-4*a*c;
if(d>0)
{
d=sqrt(d);
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
printf("%.2f\n%.2f\n",x1,x2);
}
else if ((int)d==0)
{
x1=-b/(2*a);
printf("%.2f\n",x1);
}
else printf("No");
}
迮鹏鹍麻今
2019-04-07 · TA获得超过2.9万个赞
知道大有可为答主
回答量:1.1万
采纳率:31%
帮助的人:951万
展开全部
总结上面两位的说法:
#include
#include
void
main()
{
float
a,b,c,d,x1,x2;
(1)//////////////////////////////d=b*b-4*a*c;
printf("please
enter
3
numbers.\n");
(2)/////////////////////////////scanf("%f,%f,%f",a,b,c);
scanf("%f,%f,%f",&a,&b,&c);
d=b*b-4*a*c;
x1=(-b+sqrt(d))/(double)(2*a);
//vc为确保精度,默认的都是double类型。
x2=(-b-sqrt(d))/(double)(2*a);
if(d<0)
printf("该方程无实数解.");
else
if(d=0)
printf("x1=%f.",x1);
else
printf("x1=%f.\nx2=%f\n",x1,x2);
}
我用vc6.0,可以运行。不知道对否,楼主再看看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yzd045
2012-03-07
知道答主
回答量:8
采纳率:0%
帮助的人:3.9万
展开全部
#include<stdio.h>
#include<math.h>
void main()
{
double a,b,c,d,e,f;
printf("请依次输入二次方程的三个系数,以逗号隔开,程序将为您求得该方程的解:\n");
scanf("%lf,%lf,%lf",&a,&b,&c);
d=b*b-4*a*c;
e=-b/(2*a);
if (a==0)
if (b==0)
if (c==0) printf("该方程存在无数解\n");
else printf("该方程无解\n");
else printf("该方程有唯一解,为 %.10f \n",-c/b);

else
{
if (d==0) printf("该方程有唯一解,为 %.10f \n",e);
else
if (d>0) {f=sqrt(d)/(2*a);printf("该方程的解为 %.10f 和 %.10f\n",e+f,e-f);}
else {f=sqrt(-d)/(2*a);printf("该方程的解为 %lf+%lf i和 %lf-%lf i\n",e,f,e,f);}
}
}
这是我编的程序,是对的,希望对你有帮助。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bfmssloveycc
2012-03-07 · TA获得超过780个赞
知道小有建树答主
回答量:1015
采纳率:0%
帮助的人:474万
展开全部
int main(void)
{
float a=0;
float b=0;
float c=0;
float d=0;
float x1,x2;
scanf("%f%f%f",&a,&b,&c);
d=b*b-4*a*c;
if(d>0) ///////////////这个地方,应该是 d>=0
{
d=sqrt(d);
b=-b;
x1=(b+d)/(2*a);
x2=(b-d)/(2*a);
if(x1>x2)
{
printf("%f\n%f",x1,x2);
}
else
printf("%f",x1);
}
else printf("No");
return 0;
}
更多追问追答
追问
额..不好意思.还是不对
追答
你说的不对是什么不对,为何在我的电脑哦上是对的
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友31cbd33
2012-03-07
知道答主
回答量:8
采纳率:0%
帮助的人:3.7万
展开全部
试试这个,这题目我做过!!
#include<stdio.h>
#include<math.h>
int main()
{
float a,b,c,x1,x2,d;
scanf("%f%f%f",&a,&b,&c);
if(a!=0)
{
d=sqrt(b*b-4*a*c);
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
if(x1<x2)printf("%0.2f %0.2f\n",x2,x1);//大的在前面
else
printf("%0.2f %0.2f\n",x1,x2);
}
return 0;
}
追问
不用写b=0和a=0这样的情况吗
追答
不用的,题目叫我们求的是一元二次方程,只用考虑这点就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式