C语言求二元一次方程的根

以下是我写的程序,请看一下,哪里错了?谢谢!

#include <stdio.h>
#include <math.h>
double a,b,c;
double s;

void main()
{
double e,f;
printf("Please input coefficient:\n");
scanf("%lf,%lf,%lf",&a,&b,&c);
s=sqrt(b*b-4*a*c);
printf("The equation is %lf x^2 + %f x + %f\n",a,b,c);
double d(double a ,double b,double c,double e,double f);
double de(double a ,double b,double c);
void x(double a ,double b,double c);
if(s>0)
{
d(a,b,c,e,f);
printf("%lf\n",e);
printf("%lf\n",f);
}
else if(s=0)
{
e=de(a,b,c);
printf("%lf\n",e);
}
else if(s<0)
x(a,b,c);

}

double d(double a ,double b,double c,double e ,double f)
{
double m,n;
m=-0.5*b/a+s;
n=-0.5*b/a-s;
e=m;
f=n;
return a;

}

double de(double a ,double b,double c)
{
double m;
m=-0.5*b/a;
return m;
}

void x(double a ,double b,double c)
{
printf("The equation has no root!\n");
return;
}

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

void main()
{
double a,b,c;
double s;
double *e,*f;
void d(double a ,double b,double c,double s,double* e,double* f);
void de(double a ,double b,double c,double *e);
void x();
e=(double*)malloc(sizeof(double));
f=(double*)malloc(sizeof(double));
*e=0;
*f=0;

printf("Please input coefficient:\n");
scanf("%lf%lf%lf",&a,&b,&c);
if(a==0)
{
if(b==0&&c==0)
printf("x is any number");
if(b==0&&c!=0)
x();
if(b!=0)
{
*e=-c/b;
printf("%lf",*e);
}
}
else
{
s=(b*b-4*a*c);
if(s<0)
x();
else
{
s=sqrt(s);
printf("The equation is %lf x^2 + %f x + %f\n",a,b,c);
printf("s=%lf\n",s);
if(s>0)
{
d(a,b,c,s,e,f);
printf("%lf\n",*e);
printf("%lf\n",*f);
}
else if(s==0)
{
de(a,b,c,e);
printf("%lf\n",*e);
}
}
}
}

void d(double a ,double b,double c,double s,double *e ,double *f)
{
double m,n;
m=-0.5*(b+s)/a;
n=-0.5*(b-s)/a;
*e=m;
*f=n;

}

void de(double a ,double b,double c,double *e)
{
double m;
m=-0.5*b/a;

*e=m;
}

void x()
{
printf("The equation has no root!\n");

}
这是改后正确的代码,以下是你代码的错误:
1.函数如果想在main中声明,不能在执行语句后声明。
2.当调用d(double a...)函数时,e和f作为参数穿过去只是他们的值,在函数内部对它们赋值是不能改变他们内存真正的值的。
3.if(s=0)是对s赋值使s=0,如果是判断应该是if(s==0)。
4.x函数中参数a、b、c没有用到,而且你已经把abc设为全局变量,就不需要把他们当成参数传递,所以我把所有变量都改为局部变量。
5.d函数的算法错误,应该是e=-(b+s)/2a;f=-(b-s)/2a;
6.你没有考虑当a=0,b=0,时的情况。
7.当b2-4ac<0时,用sqrt开方就已经错误啦。
写的有些乱,见谅~
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-07
其实你可以转换成高中求解方程的步骤去解决这个问题的。 你怎么想的,就怎么编写代码,其实代码就是我们的想法翻译成计算机语言的
第2个回答  2010-11-07
s=sqrt(b*b-4*a*c);这句都没判断b*b-4*a*c是否大于0,小于0的数不能开方呀。
相似回答