C语言:if语句 一元二次方程

作者&投稿:琦康 (若有异议请与网页底部的电邮联系)
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c;
double m;
double x1,x2;
printf("please insert a,b,c:");
scanf("%f,%f,%f",&a,&b,&c);
m=b*b-4*a*c;
if (m<0)
printf("the number is wrong,please insert again:");
else
x1=(-b+sqrt(m))/2*a;
x2=(-b-sqrt(m))/2*a;
printf("the answer is : %f,%f",x1,x2);
printf("\n");

}

1.用“FLOATZERO” 代替“le-6 ”,下面的代码中出现“FLOATZERO”,其值都是“le-6”的意思
2.realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);

都是赋值语句。
3.if(fabs(a)<=FLOATZERO)
如果 a 的绝对值小于 FLOATZERO,也即小于 le-6
后面的以此类推....

还有,le-6 你要改为1e-6,因为你写的是“l”,其实是 “1 ”哦,是一个数字,float 改为double吧

#define FLOATZERO le-6:定义宏变量,也就是下面出现FlOATZERO,其值都是1e-6;
realpart=-b/(2*a):求复根的实部;
imagpart=sqrt(-disc)/(2*a);:求复根的虚部;
if(fabs(a)<=FLOATZERO:括号里面的表达式可以理解为a=0;
if(fabs(disc)<=FLOATZERO):括号里面的表达式可以理解为disc=0;
if(disc>FLOATZERO):括号里面的表达式可以理解为disc>0。

这个题目,谭浩强的书上讲解得非常清楚,建议你好好看看教材.

#define FLOATZERO le-6
定义一个符号常量,值为10^(-6)
realpart实部,imagpart虚部
abs绝对值disc是一元二次方程的判别式

没有什么大问题就是#define FLOATZERO le-6 其中的le-6 中的"l"换成数字1就OK了

用if语言解一元二次方程的C语言程序,在线等~~...~

希望有用,谢谢采纳 ^_^

# include
# include
int main()
{
void root2(double a,double b,double disc); //定义方程有两个根时的函数
void root1(double a,double b); //定义方程只有一个根时的函数
void root0(); //定义方程没有实数解是的函数
double a,b,c,disc;
printf("请输入a,b,c的值:");
scanf("%lf %lf %lf",&a,&b,&c);
if(a==0) //一元二次方程二次项系数不为0
{
printf("data error
");
}
else
{
printf("the Answer of ax^2+bx+c=0 is ");

disc=b*b-4*a*c;
if(disc>0)
root2(a,b,disc);
else if(fabs(disc) < 1e-6)
root1(a,b);
else
root0();
}
return 0;
}
void root2(double a,double b,double disc)
{
double x1,x2;
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("x1=%.2f, x2=%.2f
",x1,x2);
}
void root1(double a,double b)
{
double x;
x=(-b)/(2*a);
printf("x1=x2=%.2f
",x);
}
void root0()
{
printf("none
");
}

嗯,果然是这里有问题。不过貌似还有另外的一个问题:但我输入0,1,1时,编译器就只输出 “2方程有唯一解x=”,完全没有计算的结果-1,能帮忙解决吗?我会追加分的。谢谢。
------------------------------------分割--------------------------------------------
printf("2方程有唯一解x=%f
",x); %f漏掉了楼主。。