帮我看下,c语言问题。 求方程ax^2+bx+c=0的根,用2个函数分别求当b^2-4ac大于0、等于0时的根并输出结果。

我写的代码如下:
#include"math.h"
#include"stdio.h"
float x1,x2;
float b1(float a,float b ,float c) //定义b*b-4*a*c>0时的函数
{
float p ,q;
p=-b/(2*a);
q=sqrt(b*b-4*a*c);
x1=p+q; x2=p-q;
}
float b2(float a, float b) //定义b*b-4*a*c=0时的函数
{
float p= -b/(2*a);
return(p);
}
void main()
{
float a,b,c,d;
scanf("%a%b%c",&a,&b,&c);
d=b*b-4*a*c;
if(d>0)
{
b1(a,b,c);
printf("解是:%f%f\n",x1,x2);
}
else
{
printf("解是%f\n",b2(a,b));

}

}
编译无错,但无论输入什么结果都是-0.5

第1个回答  2011-04-19
scanf语句错了!!
scanf("%a%b%c",&a,&b,&c);
应该改为scanf("%f %f %f", &a, &b, &c);
你接收到的数据根本就是错的,往下进行更无从谈起了!
建议你看看这里:

参考资料:http://baike.baidu.com/view/1390039.htm#sub1390039

本回答被提问者采纳
第2个回答  2011-04-18
#include<iostream.h>
#include<math.h>
int main()
{
float a,b,c;
double m,x,x1,x2;
cout<<"a=";
cin>>a;
cout<<"b=";
cin>>b;
cout<<"c=";
cin>>c;
m=b*b-4*a*c;
if(m<0)
cout<<"没有实数解"<<endl;
else if(m==0)
{
cout<<"有一个实数解为:";
x=-b/(2*a);
cout<<x<<endl;
}
else if(m>0)
{
cout<<"有两个实数解:"<<endl;
x1=(-b+sqrt(m))/(2*a);
x2=(-b-sqrt(m))/(2*a);
cout<<x1<<endl<<x2<<endl;
}
return 0;
}

把头文件改了,把cout改成c语言的printf输入方式,把cin改成scanf的方式就OK了,
第3个回答  2011-04-18
其中第一个函数float 类型的 需要返回值,
第4个回答  2011-04-18
怎么可能会没错!函数b1都没有返回float类型的值,不可能没错的。
第5个回答  2011-04-18
第一个函数没有返回语句,return