求一元二次方程的根。
【问题描述】编写程序,从键盘输入三个系数ax2+bx+c=0,计算方程的解并输出。需要考虑方程有虚根、方程有实根、方程是一元一次方程、没有根等。输出方程的解并保留6位小数。
import java.text.DecimalFormat;
import java.util.*;
public class Equation{
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("请输入方程的系数a、b、c:");
int a, b, c;
a = reader.nextInt();
b = reader.nextInt();
c = reader.nextInt();
DecimalFormat df = new DecimalFormat("0.000000");
int delta;
double x1, x2;
delta = b * b - 4 * a * c;
if (a == 0 && b == 0 && c == 0) {
System.out.println("方程有无限根。");
return;
}
if (a == 0 && b == 0 & c != 0) {
System.out.println("方程无解。");
return;
}
if (delta == 0) {
x1 = b / -2.0 / a;
x2 = b / -2.0 / a;
System.out.println("方程有两个相同实根, x1 = "
+ df.format(x1) + ", x2 = " + df.format(x2));
}
if (delta > 0) {
x1 = (-b + Math.sqrt(delta)) / 2.0 / a;
x2 = (-b - Math.sqrt(delta)) / 2.0 / a;
System.out.println("方程有两个不同实根, x1 = "
+ df.format(x1) + ", x2 = " + df.format(x2));
}
if (delta < 0) {
double s, x;
s = -b / 2.0 / a;
x = Math.sqrt(-delta) / 2.0 / a;
System.out.println("方程有虚根, x1 = "
+ df.format(s) + " + " + df.format(x) + "i, x2 = "
+ df.format(s) + " - " + df.format(x) + "i");
}
}
}
运行结果: