楼主。。你的代码是对的。当是输入的时候要注意。一定要满足
b*b>=4*a*c.要不根号里就是负的。所以会出现补码。
我刚刚试过了2.1 6.5 3.1这组数就可以
所以必需要满足b*b>=4*a*c #include
#include
#include
main()
{
double a,b,c,delt,x1,x2;
scanf("%lf%lf%lf",&a,&b,&c);
delt=b*b-4*a*c;
if(delt>=0){
x1=(-1*b+sqrt(delt))/(2*a);
x2=(-1*b-sqrt(delt))/(2*a);
printf("x1=%g\n",x1);
printf("x2=%g\n",x2);
}
else
printf("没有实根\n");
}
#include
#include
void main ()
{
double a,b,c,delt,x1,x2;
scanf("%lf%lf%lf",&a,&b,&c);
delt=b*b-4*a*c;
x1=(-b+sqrt(delt))/(2*a);
x2=(-b-sqrt(delt))/(2*a);
printf("x1=%g\n",x1);
printf("x2=%g\n",x2);
}
单行代码出错,可以设断点,我个人认为就在信息框里找错,系统提示你哪出错了……
没有返回值.
-b是什么 没有这样写的 可以在程序开始除 main前面加上
#define -b ((b)*(-1))
#include
#include
void main()
{
double a,b,c,delt,x1,x2;
scanf("%lf%lf%lf",&a,&b,&c);
delt=b*b-4*a*c;
x1 = (sqrt(delt)-b)/(2*a);
x2 = ((-1)*sqrt(delt)-b)/(2*a);
printf("x1=%g\n",x1);
printf("x2=%g\n",x2);
}
测试如下:
2 1 -1
x1=0.5
x2=-1
Press any key to continue
结果正确,,调试程序在VC6.0下可以F9设置断点,F5开始调试,F10单步运行!
你的程序只能保证delt大于或者等于0的情况,如果delt小于0,sqrt(delt)是不存在的,所以稍微添加个if条件就OK了
#include
#include
void main()
{
double a,b,c,delt,x1,x2;
printf("请输入一元二次方程中a,b,c的值:");
scanf("%lf%lf%lf",&a,&b,&c);
delt=b*b-4*a*c;
if(delt>0)
{
x1=(-b+sqrt(delt))/(2*a);
x2=(-b-sqrt(delt))/(2*a);
printf("x1=%.2f,x2=%.2f\n",x1,x2);
}
else if(delt==0)
printf("x1=x2=%.2f\n",(-b)/(2*a));
else
printf("没有实根!\n");
}