题目

读入系数 a、b、c,讨论 Δ 三种情况并输出相应结论或实根(保留两位小数)。

思路

本题要求:读入一元二次方程系数 a,b,c,按判别式 Δ 讨论根的情况。 若 a==0,方程退化为一次式,单独处理。否则计算 delta = b*b - 4*a*c:Δ>0 有两个不等实根,Δ=0 有重根,Δ<0 无实根。求根时用 double 和 sqrt,输出保留两位小数。

解题分析

先判 a==0 退化成一次方程。否则算 Δ=b²-4ac:Δ>0 两不等实根,Δ=0 重根,Δ<0 无实根。浮点比较 Δ 与 0 时,本题用 ==0 可接受,工程上常加 epsilon。

  • 输出根用 sqrt,链接数学库 -lm(本地 gcc 常见)。
  • 分母 2*a 在 a≠0 时已保证非零。

函数简要说明

本题求一元二次方程实根时要用数学库(需 #include <math.h>,部分环境链接加 -lm):

  • sqrt(x):非负实数的平方根,返回 double。求根公式里当 Δ≥0 时用 sqrt(delta)。
  • fabs(x)(可选):浮点绝对值;比较 Δ 与 0 时若担心误差可用,本题直接 delta == 0 即可。
  • 系数、根建议用 double,System.out("%.2f", x) 控制两位小数输出。

函数简要说明

一元二次方程实根(java.lang.Math,无需额外 import):

  • Math.sqrt(x):平方根,参数应为非负;Δ<0 时不要调用。
  • 判别式用 double delta = b*b - 4*a*c;读系数可用 Scanner.nextDouble()。
  • System.out.printf("%.2f%n", x):保留两位小数并换行。

完整程序

import java.io.*;

public class Main {
    public static void main(String[] args) {
        double a = 1.0, b = -3.0, c = 2.0;
        if (a == 0) {
            System.out.println("不是二次方程");
            return;
        }
        double delta = b * b - 4 * a * c;
        if (delta > 0) {
            double x1 = (-b + Math.sqrt(delta)) / (2 * a);
            double x2 = (-b - Math.sqrt(delta)) / (2 * a);
            System.out.printf("两个不等实根: x1=%.2f, x2=%.2f%n", x1, x2);
        } else if (delta == 0) {
            double x = -b / (2 * a);
            System.out.printf("两个相等实根: x=%.2f%n", x);
        } else System.out.println("无实根");
    }
}

运行示例

输出:

两个不等实根: x1=2.00, x2=1.00