程题 <3>程序设计题:求ax2+bx+c=0方程的根,a、b、c由键盘输入,假设b2-4ac>0。(p54)
时间: 2023-03-31 16:04:47 浏览: 164
可以使用公式:x1=(-b+sqrt(b^2-4ac))/(2a),x2=(-b-sqrt(b^2-4ac))/(2a)来求解方程的根。其中,sqrt表示开方,a、b、c分别代表方程ax^2+bx+c=中的系数。
相关问题
: 2、设计表示一元一次方程( ax + b =0)的类,并根据 a 的系数情况求解方程。3、编写程序,求一元二次方程ax2+ bx + c =0的实根,系数 a 、 b 、 c 从键盘输入。 Java
在Java中,我们可以创建一个名为`LinearEquation`的类来表示一元一次方程(`ax + b = 0`),并添加一个根据a的值判断是否为零的成员函数。如果a非零,则可以进一步求解x的值;如果a为零,则方程变为b=0,需要单独处理。
```java
public class LinearEquation {
private double a;
private double b;
public LinearEquation(double a, double b) {
this.a = a;
this.b = b;
}
// 判断方程是否有解
public boolean hasSolution() {
return a != 0; // 如果a不为零,说明有唯一解
}
// 当a不为零时求解x
public double solveIfPossible() {
if (hasSolution()) {
return -b / a; // x = -b/a
} else {
throw new IllegalArgumentException("Invalid equation: a must not be zero");
}
}
}
// 对于一元二次方程,我们可以创建另一个类如QuadraticEquation
class QuadraticEquation {
private double a;
private double b;
private double c;
public QuadraticEquation(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
// 计算判别式
private double discriminant() {
return Math.pow(b, 2) - 4 * a * c;
}
// 根据判别式计算实数根
public double[] solve() {
double discriminantResult = discriminant();
if (discriminantResult > 0) {
return new double[] {(-b + Math.sqrt(discriminantResult)) / (2 * a), (-b - Math.sqrt(discriminantResult)) / (2 * a)};
} else if (discriminantResult == 0) {
return new double[] {-b / (2 * a)};
} else {
throw new ArithmeticException("The equation has no real roots.");
}
}
}
```
编写一个程序,求一元二次方程ax2+ bx + c =0的实根,系数 a 、 b 、 c 从键盘输入。(进行类的封装)Java
在Java中,我们可以创建一个名为`QuadraticEquationSolver`的类,用于处理一元二次方程的解法,并采用封装设计原则将系数作为私有变量。以下是一个简单的实现:
```java
import java.util.Scanner;
public class QuadraticEquationSolver {
private double a;
private double b;
private double c;
// 构造函数,接收用户输入的系数
public QuadraticEquationSolver(double a, double b, double c) {
this.a = a;
this.b = b;
this.c = c;
}
// 计算判别式
private double discriminant() {
return Math.pow(b, 2) - 4 * a * c;
}
// 检查方程是否有实根并计算根
public void calculateRoots() {
if (discriminant() >= 0) {
double root1 = (-b + Math.sqrt(discriminant())) / (2 * a);
double root2 = (- Math.sqrt(discriminant())) / (2 * a);
System.out.println("方程有两个实根:");
System.out.printf("根1: %.2f\n", root1);
System.out.printf("根2: %.2f\n", root2);
} else if (discriminant() == 0) {
double root = -b / (2 * a);
System.out.println("方程有一个实根:");
System.out.printf("根: %.2f\n", root);
} else {
System.out.println("方程无实数根,有复数根.");
}
}
// 主方法,获取用户输入并调用计算方法
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入a的值: ");
double a = scanner.nextDouble();
System.out.print("请输入b的值: ");
double b = scanner.nextDouble();
System.out.print("请输入c的值: ");
double c = scanner.nextDouble();
QuadraticEquationSolver equationSolver = new QuadraticEquationSolver(a, b, c);
equationSolver.calculateRoots();
scanner.close();
}
}
```
在这个示例中,用户可以输入一元二次方程的系数a、b、c,然后程序会计算并打印出实根。
阅读全文