#include <math.h>
int main(void)
{
double a,b,c,disc,x1,x2,imagpart,realpart,m,n
printf("please input a,b,c(a!=0):\n")
scanf("%lf%lf%lf",&a,&b,&c)
disc = b * b - 4 * a * c
m = - b / (2 * a)
n = sqrt(disc) / (2 * a)
if (fabs(disc) <1e-8)
{
x1 = x2 = m //有两个相等实根
printf("x1=x2=%8.2f\n",x1)
}
else
if (disc >0)
{
x1 = m + n,x2 = m - n//有两个不等实根
printf("x1=%8.2f\t,x2=%8.2f\n",x1,x2)
}
else
{
realpart = m
imagpart = sqrt(-disc) / (2 * a) //有两个共轭复根
printf("x1=%8.2f+%.2fi\t,x2=%8.2f-%.2fi\n",realpart,imagpart,realpart,imagpart)
}
return 0
}
定义的时候不能控制有效值位数,你可以尝试在计算完成后对结果c进行处理,控制c的精度
如下程序可以实现:
但是必须把c定义为
double
否则有误差:
float
a
=
10,
b
=
3
float
c
char
t[4]
float
result
//double
result
c
=
a
/
b
sprintf(t,"%.2f",c)
//将浮点数转换成字符串
result
=
(float)atof(t)
//result
=
atof(t)//将字符串转化成浮点数
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)