编程求解一元二次方程ax^2 + bx + c = 0的根,要求a、b、c从键盘输入。 要求Main类中必须有如下方法:`
public static void main(String[] args);//主方法
public static int solveQuadratic(double[] eqn, double[] roots);//eqn存储输入的三个系数a、b、c,然后将两个实数根存储进roots中,该方法返回实数根的个数。
输入格式:
从键盘输入一元二次方程的三个系数的值(均为实型数),可以用一个或多个空格或回车分隔。
输出格式:
当输入数据非法时,输出“Wrong Format”
当无实数根时,输出如下字符串“The equation has no roots”;
当只有一个根时,输出如下格式“The equation has one root: 值”;(注意,输出的值必须保留四位小数,且值前面有一个空格)
当有两个根时,输入如下格式“The equation has two roots: 值1 and 值2”;(注意,输出的值必须保留四位小数,且值前面均有一个空格)
输入样例1:
在这里给出一组输入。例如:
2 6 -554
输出样例1:
在这里给出相应的输出。例如
The equation has two roots: 15.2108 and -18.2108
输入样例2:
在这里给出一组输入。例如:
300.0 0.0 0.00
输出样例2:
在这里给出相应的输出。例如:
The equation has one root: 0.0000
import java.util.Scanner;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
double a=0,b=0,c=0;
int f=0;
double eqn[]=new double [3];
double roots[]=new double [2];
Scanner sc = new Scanner(System.in);
a=sc.nextDouble();
if(a==0)
{
System.out.println("Wrong Format");
}
else
{
b=sc.nextDouble();
c=sc.nextDouble();
eqn[0]=a;eqn[1]=b;eqn[2]=c;
switch(solveQuadratic(eqn,roots))
{
case 1:
System.out.print("The equation has one root: ");
System.out.printf("%.4f\n",roots[0]);
break;
case 2:
System.out.print("The equation has two roots: ");
System.out.printf("%.4f",roots[0]);
System.out.print(" and ");
System.out.printf("%.4f\n",roots[1]);
break;
case 0:
System.out.println("The equation has no roots");
break;
}
}
}
public static int solveQuadratic(double[] eqn, double[] roots)
{
if(eqn[1]*eqn[1]-4*eqn[0]*eqn[2]>0)
{
roots[0]=((-eqn[1]+Math.sqrt(eqn[1]*eqn[1]-4*eqn[0]*eqn[2]))/(2*eqn[0]));
roots[1]=((-eqn[1]-Math.sqrt(eqn[1]*eqn[1]-4*eqn[0]*eqn[2]))/(2*eqn[0]));;
return 2;
}
else if(eqn[1]*eqn[1]-4*eqn[0]*eqn[2]==0)
{
roots[0]=((-eqn[1]+Math.sqrt(eqn[1]*eqn[1]-4*eqn[0]*eqn[2]))/(2*eqn[0]));
return 1;
}
else
{
return 0;
}
}
}