c语言 编程 求方程ax2+bx+c=0的根,用三个函数分别求当b2-4ac大于0、等于0和小于0时的根,并输出结果。

#include<stdio.h>
#include<math.h>

void deltaZero(double a,double b,double c)
{
double ans=-b/(2*a);
printf("x1=x2=%lf\n",ans);
}

void deltaLargerZero(double a,double b,double c)
{
double ans1,ans2,d;
d=b*b-4*a*c;
ans1 = (-b+sqrt(d))/(2*a);
ans2 = (-b-sqrt(d))/(2*a);
printf("x1=%lf,x2=%lf\n",ans1,ans2);
}

void deltaLessZero(double a,double b,double c)
{
double real,imar,d;
d=b*b-4*a*c;
real = -b/(2*a);
imar = sqrt(-d)/(2*a);
printf("x1=%lf+%lfi,x2=%lf-%lfi\n",real,imar,real,imar);
}
void main()
{
double a,b,c;
double d;
printf("please input a,b,c\n");
scanf("%lf,%lf,%lf",&a,&b,&c);
d=b*b-4*a*c;
if(d==0) deltaZero(a,b,c);
else if(d>0) deltaLargerZero(a,b,c);
else if(d<0) deltaLessZero(a,b,c);
printf("please input a,b,c\n");
}
我是这样写的 请问哪错了 谢谢

#include<stdio.h>
#include<math.h>
main()
{
void x(float,float,float,float);
void y(float,float,float);
float a,b,c,d=0;
printf("输入a b c的值:\n");
scanf("%f %f %f",&a,&b,&c);
d=(b*b)-(4.0*a*c);
if (d>0)
x(a,b,c,d);
else if (d==0)
y(a,b,c);
else
printf("无解");
}

void x(float a,float b,float c ,float d)
{
float x1,x2;
x1=(-b+sqrt(d))/(2.0*a);
x2=(-b-sqrt(d))/(2.0*a);
printf("x1=%.3f\nx2=%.3f\n",x1,x2);
}
void y(float a,float b,float c)
{
float x1;
x1=-b/(2.0*a);
printf("x1=x2=%.3f",x1);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-11
考虑当a=0时的情况 可以直接加在主函数里面 改成下面这样就行
void main()
{
double a,b,c;
double d;
printf("please input a,b,c\n");
scanf("%lf%lf%lf",&a,&b,&c);
if(a==0)
{
printf("The root x=-b/c");
}
else
{
d=b*b-4*a*c;
if(d==0) deltaZero(a,b,c);
else if(d>0) deltaLargerZero(a,b,c);
else if(d<0) deltaLessZero(a,b,c);
}
printf("please input a,b,c\n");
}
第2个回答  2012-06-11
是否是输入的问题?
scanf("%lf,%lf,%lf",&a,&b,&c);中使用了通配符',',输入的时候也要按原格式输入。
也可以改为scanf("%lf%lf%lf",&a,&b,&c);则空格回车都可作间隔符。追问

嗯嗯 真的 这样呢 输入的问题 他有一个要求就是考虑当a=0时的情况,此时方程退化为一次方程。要想实现这个条件 应该怎么写 加在哪呢 谢谢啦

本回答被提问者和网友采纳
第3个回答  2012-06-22
条件语句不对,最后一个else if改为else,而且else后边没条件。关于判断a是否为0,可以用if else语句。if(a==0){
d=-c/d;
printf("x1=x2=%lf\n",d);
}
else
这个结构加在主函数的d=b*b-4*a*c前边。
第4个回答  2012-06-11
没错误呀,没发现!
相似回答