题目
已知函数 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