我这个一元二次方程的程序为什么运行结果不对呢?编译器已通过,但就是结果不对。。

[复制链接]
查看11 | 回复3 | 2011-4-26 17:37:50 | 显示全部楼层 |阅读模式
题目是这样的编写函数求方程ax2+bx+c=0的所有解(包括实根和非实根)。提示:要考虑a=0,b2-4ac>0、=0、
#include
void root1(double a,double b)
{
double x;
x=-b/(2*a);
printf("x1=x2=%lf\n",x);
}
void root2(double a,double b,double c)
{
double x1;double x2;double disc;
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("%lf,%lf\n",x1,x2);
}
void complex_roots(double a,double b,double c)
{
double m;double n;double disc;
m=-(b/(2*a));n=sqrt(-disc)/(2*a);
printf("x1=%8.4lf+%8.4lfi\n",m,n);
printf("x2=%8.4lf-%8.4lfi\n",m,n);
}
void esp_root(double b,double c)
{
double x;
x=-c/b;
printf("x=%lf\n",x);
}
main()
{
double a,b,c,disc,x1,x2,x,m,n;
printf("请输入一元二次方程的三个参数:\n");
scanf("%lf%lf%lf",&a,&b,&c);
disc=b*b-4*a*c;
if(a==0)
esp_root(b,c);
else if(fabs(disc)1e-6)
root2(a,b,c);
else
complex_roots(a,b,c);
}但结果是:我输入5 3 7,结果显示x1=-3.000+9620791617601800000000000.000i.....请问这是为什么?

回复

使用道具 举报

千问 | 2011-4-26 17:37:50 | 显示全部楼层
#include #include void root1(double a,double b){ double x; x=-b/(2*a); printf("x1=x2=%lf\n",x);}void root2(double a,double b,double c){ double x1;double x2;double disc; disc=b*b-4*a*c; x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("%lf,%lf\n",x1,x2);}void complex_root
回复

使用道具 举报

千问 | 2011-4-26 17:37:50 | 显示全部楼层
给你一点建议你把double disc;作为全局变量,并把root2和complex_roots里面的double disc;删了试试吧;希望成功~~~
回复

使用道具 举报

千问 | 2011-4-26 17:37:50 | 显示全部楼层
double a,b,c,disc,x1,x2,x,m,n;最好都初始化一下double a=0,b=0,c=0,disc=0,x1=0,x2=0,x=0,m=0,n=0;我没仔细看你程序的具体问题,所以随便的初始化了下 。但是这类问题一般都是应为没有初始化造成的。你可以试试看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行