每日作业20200430 - 解抛物线

题目

已知函数 ax^2 + bx + c = y, 输入a, b, c.
    求该函数顶点坐标 以及 y为0 时的坐标
    样例输入:
	    a=1
	    b=2
	    c=-3
    样例输出:
	    顶点坐标(-1, -4)
	    y为0, 两个坐标分别是(-3, 0), (1, 0)

分析
该题目本质为抛物线求解
可通过编写相关公式,将抛物线顶点和解列举出来

代码

import java.util.Scanner;

public class Homework0430 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("抛物线方程一般公式为 y = ax^2 + bx + c");

        System.out.print("请输入方程系数 a = ");
        double a = sc.nextDouble();
        System.out.print("请输入方程系数 b = ");
        double b = sc.nextDouble();
        System.out.print("请输入方程系数 c = ");
        double c = sc.nextDouble();

        double[] d1 = {a, b, c};   //将系数放进数组中

        System.out.println("<\n-----------------------------------------------\n>");   //分割线

        vertex(d1);  //调用方法,求顶点坐标
        method(d1);  //调用方法,求解

        System.out.println("<\n-----------------------------------------------\n>");   //分割线

        //求抛物线与直线 y = ax + b 的交点
        System.out.println("请输入与抛物线相交的直线方程 y = mx + n");
        System.out.print("请输入方程系数 m = ");
        double m = sc.nextDouble();
        System.out.print("请输入方程系数 n = ");
        double n = sc.nextDouble();

        double[] d2 = {a, b - m, c - n};   //将系数放进数组中  ax^2 + (b-m)x + (c-n) = 0

        method(d2);  //调用方法,求解
    }

    /*顶点坐标*/
    public static void vertex(double[] d) {
        //  a  * x^2 +   b  * x +  c   = y;
        //d[0] * x^2 + d[1] * x + d[2] = y;

        if ( d[0] != 0 ) {   //判断,a不等0时,为抛物线
            /*求顶点 ( -b/2a ,(4ac-b²)/4a )*/
            double xd = -d[1] / (2 * d[0]);     //顶点横坐标 -b/2a
            double yd = (4 * d[0] * d[2] - Math.pow(d[1], 2)) / (4 * d[0]);     //顶点纵坐标(4ac-b²)/4a
            System.out.println("该抛物线的顶点坐标为:(" + xd + " , " + yd + " )");
        }
    }

    /*求抛物线的解*/
    public static void method(double[] d) {
        //令 y = 0 ,则变为解一元二次方程
        if (d[0] != 0) {   //判断,a不等0时,为抛物线
            double t = Math.pow(d[1], 2) - 4 * d[0] * d[2];  //判别式 b^2 - 4ac
            double sqrt_t = Math.sqrt( t );  //判别式开根号
            //根据判别式,进行分类
            if( t < 0 ) {
                System.out.println("该方程无解");
            }else if( t == 0 ){
                double x = -d[1] / (2 * d[0]);     //方程的解
                System.out.println("该方程有两个相同解:" + x);
            }else {
                double x1 = ( -d[1] + sqrt_t ) / (2 * d[0]);     //方程的解
                double x2 = ( -d[1] - sqrt_t ) / (2 * d[0]);     //方程的解
                System.out.println("该方程有两个不同的解: x1 = " + String.format("%.2f", x1) + ", x2 = " + String.format("%.2f", x2));
            }
        }else {
            System.out.println("该方程不是一元二次方程!");
        }
    }
}

运行结果

抛物线方程一般公式为 y = ax^2 + bx + c
请输入方程系数 a = 1
请输入方程系数 b = 2
请输入方程系数 c = -3

<----------------------------------------------->

该抛物线的顶点坐标为:(-1.0 , -4.0 )
该方程有两个不同的解: x1 = 1.00, x2 = -3.00

<----------------------------------------------->

请输入与抛物线相交的直线方程 y = mx + n
请输入方程系数 m = 2
请输入方程系数 n = 2
该方程有两个不同的解: x1 = 2.24, x2 = -2.24

你可能感兴趣的:(每日作业)