C语言的简单问题,让我头疼

#include<stdio.h>
#include<math.h>
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);
}

这段代码到底有什么错误??
还有如何单行代码除错
我把你们的代码原封不动的粘贴都不对,能不能是我的visual C++ 6.0语言编程器坏了???

楼主。。你的代码是对的。当是输入的时候要注意。一定要满足
b*b>=4*a*c.要不根号里就是负的。所以会出现补码。
我刚刚试过了2.1 6.5 3.1这组数就可以
所以必需要满足b*b>=4*a*c #include<stdio.h>
#include<stdlib.h>
#include<math.h>
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");

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-31
#include <stdio.h>
#include <math.h>
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);
}
单行代码出错,可以设断点,我个人认为就在信息框里找错,系统提示你哪出错了……

参考资料:如果您的回答是从其他地方引用,请表明出处

第2个回答  2009-07-31
没有返回值.
第3个回答  2009-07-31
-b是什么 没有这样写的 可以在程序开始除 main前面加上
#define -b ((b)*(-1))
第4个回答  2009-07-31
#include<stdio.h>
#include<math.h>

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单步运行!
第5个回答  2009-07-31
你的程序只能保证delt大于或者等于0的情况,如果delt小于0,sqrt(delt)是不存在的,所以稍微添加个if条件就OK了
#include<stdio.h>
#include<math.h>
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");
}