7-8 求一元二次方程 (10分)

编程求解一元二次方程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;
		}
	}
}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值