中易网

c语言求一元二次方程解

答案:2  悬赏:80  
解决时间 2021-03-01 10:35
#include
#include

int main()
{
float a,b,c,a2,x1,x2;double d;
printf("Input a,b,c\n");
scanf("%f,%f,%f",&a,&b,&c);
if(a==0&&b==0&&c!=0)
printf("Input error!\n");
else if(a==0&&b==0&&c==0)
printf("Input error!\n");
else if(a==0&&b!=0)
{x1=-c/b;
printf("x=%f",x1);
}
else if(a!=0&&b*b-4*a*c<0)
{
a2=2*a;
d=(-b*b+4*a*c)/a2 ;
x1=-b/(2*a)+sqrt(d);
x2=-b/(2*a)-sqrt(d);
printf("x1=%fi",x1);
printf("x2=%fi",x2);
}
else if(a!=0&&b*b-4*a*c==0)
{x1=-b/(2*a);
printf("x1=x2=%f",x1);
}
else (a!=0&&b*b-4*a*c>0)
;{
d=(-b*b+4*a*c)/(2*a);
x1=-b/(2*a)+sqrt(d);
x2=-b/(2*a)-sqrt(d);
printf("x1=%f",x1);
printf("x2=%f",x2);
return 0;
}
}

请问哪里有错误
最佳答案
#include 
#include
int main()
{
float a,b,c,a2,x1,x2,d;
printf("Input a,b,c\n");
scanf("%f,%f,%f",&a,&b,&c);
if(a==0&&b==0&&c!=0)
printf("Input error!\n");
else if(a==0&&b==0&&c==0)
printf("Input error!\n");
else if(a==0&&b!=0)
{x1=-c/b;
printf("x=%g",x1);
}
else if(a!=0&&b*b-4*a*c<0)
{
d=(-b*b+4*a*c);
printf("d=%f\n",d);
x1=-b/(2*a);
x2=sqrt(d)/(2*a);
printf("x1=%g+%gi\n",x1,x2);
printf("x2=%g-%gi\n",x1,x2);
}
else if(a!=0&&b*b-4*a*c==0)
{x1=-b/(2*a);
printf("x1=x2=%g\n",x1);
}
else if(a!=0&&b*b-4*a*c>0)
{
d=(-b*b+4*a*c);
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%g\n",x1);
printf("x2=%g\n",x2);
}
return 0;
}
全部回答
多出一句“请正确输入,谢谢合作!”与“是否正确?(是y\否n)”的原因: 注意一下scanf,scanf并不是像通常所误解的,认为是直接读取用户的当前输入为输入值。 而是读取当前键盘缓冲区中的数据为本次输入值。 所以如果当前的键盘缓冲区内仍有数据,那么就不会接受当前的用户输入值。 在这个程序中, 由于键盘缓冲区内仍有用户上次输入数据时所残留的回车符(也就是输入a,b,c时最后敲的回车), 所以scanf("%c",&z); 这一句就将键盘缓冲区中的回车读入,作为z值了。 所以判断失败,多出一句“请正确输入,谢谢合作!”与“是否正确?(是y\否n)”。 改正办法: 在每句scanf前,加上强制清空键盘缓冲区的处理fflush(stdin);,以保证接收的数据的正确性。 这也是一个好的编程习惯。 改过以后的程序: #include "stdio.h" #include "math.h" void main() { printf("求方程ax^2+bx+c=0的根:\n"); l: printf("请分别输入a,b,c的值。\n"); double a,b,c,x1,x2,x,y; char z; printf("a="); fflush(stdin); //强制清空键盘缓冲区 scanf("%lf",&a); printf("b="); fflush(stdin); //强制清空键盘缓冲区 scanf("%lf",&b); printf("c="); fflush(stdin); //强制清空键盘缓冲区 scanf("%lf",&c); printf("你所输入的方程为%lfx^2+%lfx+%lf=0。\n",a,b,c); m: printf("是否正确?(是y\否n)\n"); fflush(stdin); //强制清空键盘缓冲区 scanf("%c",&z); if (z=='n') goto l; else if (z=='y') { if ((b*b-4*a*c)>0) x1=(-b+sqrt(b*b-4*a*c))/(2*a), x2=(-b-sqrt(b*b-4*a*c))/(2*a), printf("有两个不同的实根:\nx1=%lf\nx2=%lf\n",x1,x2), printf("\n"); if ((b*b-4*a*c)==0) x1=-b/(2*a), printf("有两个相同的实根:\nx1=x2=%lf\n",x1), printf("\n"); if ((b*b-4*a*c)<0) x=-b/(2*a), y=sqrt(4*a*c-b*b)/(2*a), printf("有两表个不同的曾根:\nx1=%lf+%lfi\nx2=%lf-%lfi\n",x,y,x,y), printf("\n"); goto l ; } else printf("请正确输入,谢谢合作!\n"); goto m; }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
步步高vivoy18手机充电时能开着机吗
甲乙两个水池原来乙水池存水比甲水池少1/6,现
I have seen the film.和I saw the film.什么
玉树高原红农副产品直销店在哪里啊,我有事要
奇之缘网络是做什么的?
丽丽女人街地址有知道的么?有点事想过去
德清县二绕线经过哪些乡镇
我从xp系统的电脑里把视频用一个U盘拷到win7
急求浦东婚俗
家庭装哪种饮水器好?价格如何?
食品专业的毕业生去哪里工作比较好?
求高手翻译一段关于太平猴魁的中文,要求翻译
三都有多少人口
成都到云南旅游的攻略
马桥路/高桐线(路口)在哪里啊,我有事要去这
推荐资讯
求一个网易云音乐会员账号 谢谢 下几首歌就好
聚仁堂天福惠康药房这个地址在什么地方,我要
昌达电脑科技我想知道这个在什么地方
拱墅区李家桥社区健身点这个地址在什么地方,
90后年轻妈妈很多都不懂要注意什么
兰州一中老师
玩英雄联盟小兵一多一团战就卡?是网速问题吗
atm机转账要隔多久才可以再转?
新城区益多祥金汀便利店这个地址在什么地方,
可不可以再问一下 DXP封装库中能把单位改成mm
社保卡存钱进去每个月,有利息吗
自己手机拍的视频里面有些好想截图下来可是怎
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?