9PTA7-8 求一元二次方程

编程求解一元二次方程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中,该方法返回实数根的个数。

输入格式:
从键盘输入一元二次方程的三个系数的值(均为实型数),可以用一个或多个空格或回车分隔。

输出格式:

  1. 当输入数据非法时,输出“Wrong Format”
  2. 当无实数根时,输出如下字符串“The equation has no roots”;
  3. 当只有一个根时,输出如下格式“The equation has one root: 值”;(注意,输出的值必须保留四位小数,且值前面有一个空格)
  4. 当有两个根时,输入如下格式“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
/*从键盘输入一元二次方程的三个系数的值(均为实型数),可以用一个或多个空格或回车分隔。
当输入数据非法时,输出“Wrong Format”
当无实数根时,输出如下字符串“The equation has no roots”;
当只有一个根时,输出如下格式“The equation has one root: 值”;(注意,输出的值必须保留四位小数,且值前面有一个空格)
当有两个根时,输入如下格式“The equation has two roots: 值1 and 值2”;(注意,输出的值必须保留四位小数,且值前面均有一个空格)*/
import java.util.*;
public class Main{
    public static void main(String[] args)//主方法
    {
        Scanner in = new Scanner(System.in);
        double[] eqn = new double[3];
        double[] roots = new double [2];
        int cnt=0;
        int i;
        
        for(i=0;i<3;i++){
            if(!(in.hasNextDouble())){
                System.out.println("Wrong Format");//判断是否是实型
                System.exit(0);
            }else{
                eqn[i]=in.nextDouble();
                if(eqn[0]==0){
                    System.out.println("Wrong Format");//判断是否是一元二次方程,即a不能为0
                    System.exit(0);
                }
            }
        }
        
        cnt=solveQuadratic(eqn,roots);
        if(cnt==0){
            System.out.println("The equation has no roots");
        }else if(cnt==1){
            System.out.printf("The equation has one root: %.4f",roots[0]);
        }else if(cnt==2){
            System.out.printf("The equation has two roots: %.4f and %.4f",roots[0],roots[1]);
        }
    }
    static int solveQuadratic(double[] eqn, double[] roots)//eqn存储输入的三个系数a、b、c,然后将两个实数根存储进roots中,该方法返回实数根的个数。
    {
            double  sq;
            double dt=eqn[1]*eqn[1]-4*eqn[0]*eqn[2];
            if(dt<0){
                return 0;
            }else if(dt==0){
                roots[0]=(-eqn[1])/(2*eqn[0]);
                if(roots[0]==0)roots[0]=0;
                return 1;
            }else if(dt>0){
                sq=Math.sqrt(dt);
                roots[0]=((-eqn[1])+sq)/(2*eqn[0]);
                roots[1]=((-eqn[1])-sq)/(2*eqn[0]);
                return 2;
           }
        return 0;
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值