(c语言)求一元二次方程的根

题目描述

本题目要求一元二次方程ax^2+bx+c=0的根,结果保留2位小数。

输入

输入在一行中给出3个浮点系数a、b、c,中间用空格分开。

输出

根据系数情况,输出不同结果:

1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;

2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;

3)如果方程只有一个根,则直接输出此根;

4)需要考虑系数为0的情况,如果系数都为0,则输出"Zero Equation";

5)如果a和b为0,c不为0,则输出"Not An Equation"。

输入样例1 

2.1 8.9 3.5

输出样例1

-0.44
-3.80


思考:

边界条件探索罢了,

1.考虑一次函数

else if(a==0&&b!=0&&c!=0)
        printf("%.2f",-c/b);

提示

注意:存在a为0,b和c不为0的情况

2.考虑负零非法

real = -b / (2 * a) + For0mini;

Ac代码如下:

#include<stdio.h>
#include<math.h>
int main() {
    double a, b, c, Delta;
    double x1, x2;
    double real, imaginary;
    double For0mini=0.00000001;
    scanf("%lf %lf %lf", &a, &b, &c);
    Delta = b * b - 4 * a * c;
    if(a==0&&b==0&&c==0)
        printf("Zero Equation");
    else if(a==0&&b==0&&c!=0)
        printf("Not An Equation");
    else if(a==0&&b!=0&&c!=0)
        printf("%.2f",-c/b);
    else {
        if (Delta >= 0) {
            if (Delta == 0) {
                x1 =  (-b  )/ (2 * a);
                printf("%.2f\n", x1);
            } else {
                x1 = (-b + sqrt(Delta)) / (2 * a);
                x2 = (-b - sqrt(Delta)) / (2 * a);
                printf("%.2f\n%.2f", x1, x2);
            }
        } else {
            real = -b / (2 * a) + For0mini;
            imaginary = sqrt(-Delta) / (2 * a);
                printf("%.2f+%.2fi\n%.2f-%.2fi", real, imaginary, real, imaginary);
          
        }
    }
}

在Java中,你可以创建一个名为`LinearEquationsSolver`的类,利用Cramer法则来解给定的2x2线性方程组。首先,需要定义两个函数,一个用于计算行列式的值(ad - bc),另一个用于计算x和y的值。以下是一个简单的示例: ```java public class LinearEquationsSolver { public static double determinant(double a, double b, double c, double d) { return a * d - b * c; } public static double solveForX(double a, double b, double c, double d, double e, double f) { double determinantD = determinant(a, b, c, d); if (determinantD != 0) { double x = (d * e - b * f) / determinantD; return x; } else { throw new IllegalArgumentException("Determinant is zero, cannot solve the system."); } } public static double solveForY(double a, double b, double c, double d, double e, double f) { double determinantD = determinant(a, b, c, d); if (determinantD != 0) { double y = (a * f - c * e) / determinantD; return y; } else { throw new IllegalArgumentException("Determinant is zero, cannot solve the system."); } } // 使用示例 public static void main(String[] args) { double a = 3.4, b = 50.2, c = 0, d = 1, e = 44.5, f = 2.1; // 方程系数 try { double x = LinearEquationsSolver.solveForX(a, b, c, d, e, f); double y = LinearEquationsSolver.solveForY(a, b, c, d, e, f); System.out.println("Solution for x: " + x); System.out.println("Solution for y: " + y); } catch (IllegalArgumentException ex) { System.out.println(ex.getMessage()); } } ``` 运行这个程序会输出x和y的解。如果ad – bc确实为零,程序将抛出异常,表示无法通过Cramer法则解此方程组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值