1,我写的
#include <stdio.h>
#include<math.h>
int main(void)
{
int a,b,c;
double x,x1,x2,m;
printf("please input a,b,c: ");
scanf("%d %d %d",&a,&b,&c);
m=b*b-4*a*c;
if(m<0)
printf("output:\nno answer\n");
else if(m==0)
{x=-b/2*a;
printf("output:\nx=%.4lf\n",x);}
else {x2=(-b+sqrt(b*b-4*a*c*1.0))/(2*a);
x1=(-b-sqrt(b*b-4*a*c*1.0))/(2*a);
printf("output:\nx1=%.4lf, x2=%.4lf\n",x1,x2);
}
return 0;
}
总结:对于(double) m=(int) x/(int) y;要想输出准确的double型m,必须m=x*1.0/y;,即是将分母转化为double型,而且是只有将分母转化为double才行。
2,标准答案
#include <stdio.h>
#include <math.h>
int main() {
int a, b, c, delta;
double ans0, ans1, sqrt_delta;
printf("please input a,b,c: ");
scanf("%d %d %d", &a, &b, &c);
printf("output:\n");
/* 计算delta的值(b*b-4*a*c)并分类讨论 */
delta = b * b - 4 * a * c;
if (delta > 0) {
sqrt_delta = sqrt(delta);
ans0 = (-b - sqrt_delta) / (2.0 * a);
ans1 = (-b + sqrt_delta) / (2.0 * a);
printf("x1=%.4f, x2=%.4f\n", ans0, ans1);
} else if (delta == 0) {
ans0 = (-b) / (2.0 * a);
printf("x=%.4f\n", ans0);
} else {
printf("no answer\n");
}
return 0;
}