📜  查找二次方程根的程序

📅  最后修改于: 2021-04-26 05:24:32             🧑  作者: Mango

给定一个二次方程,形式为ax 2 + bx + c,找到它的根。

例子 :

Input  :  a = 1, b = -2, c = 1
Output :  Roots are real and same
          1

Input  :  a = 1, b = 7, c = 12
Output :  Roots are real and different
          -3, -4

Input  :  a = 1, b = 1, c = 1
Output :  Roots are complex 
          -0.5 + i1.73205
          -0.5 - i1.73205  

以下是寻找二次方程式根的直接公式。

x=\frac{-b\pm \sqrt{b^2-4ac}}{2a}

有以下重要情况。

If b*b < 4*a*c, then roots are complex
(not real).
For example roots of x2 + x + 1, roots are
-0.5 + i1.73205 and -0.5 - i1.73205

If b*b == 4*a*c, then roots are real 
and both roots are same.
For example, roots of x2 - 2x + 1 are 1 and 1

If b*b > 4*a*c, then roots are real 
and different.
For example, roots of x2 - 7x - 12 are 3 and 4

下面是上述公式的实现。

C
/* C program to find roots of a quadratic equation */
#include 
#include 
#include 
 
// Prints roots of quadratic equation ax*2 + bx + x
void findRoots(int a, int b, int c)
{
    // If a is 0, then equation is not quadratic, but
    // linear
    if (a == 0) {
        printf("Invalid");
        return;
    }
 
    int d = b * b - 4 * a * c;
    double sqrt_val = sqrt(abs(d));
 
    if (d > 0) {
        printf("Roots are real and different \n");
        printf("%f\n%f", (double)(-b + sqrt_val) / (2 * a),
               (double)(-b - sqrt_val) / (2 * a));
    }
    else if (d == 0) {
        printf("Roots are real and same \n");
        printf("%f", -(double)b / (2 * a));
    }
    else // d < 0
    {
        printf("Roots are complex \n");
        printf("%f + i%f\n%f - i%f", -(double)b / (2 * a),
               sqrt_val, -(double)b / (2 * a), sqrt_val);
    }
}
 
// Driver code
int main()
{
    int a = 1, b = -7, c = 12;
   
    // Function call
    findRoots(a, b, c);
    return 0;
}


C++
/* C++ program to find roots of a quadratic equation */
#include 
using namespace std;
 
// Prints roots of quadratic equation ax*2 + bx + x
void findRoots(int a, int b, int c)
{
    // If a is 0, then equation is not quadratic, but
    // linear
    if (a == 0) {
        cout << "Invalid";
        return;
    }
 
    int d = b * b - 4 * a * c;
    double sqrt_val = sqrt(abs(d));
 
    if (d > 0) {
        cout << "Roots are real and different \n";
        cout << (double)(-b + sqrt_val) / (2 * a) << "\n"
             << (double)(-b - sqrt_val) / (2 * a);
    }
    else if (d == 0) {
        cout << "Roots are real and same \n";
        cout << -(double)b / (2 * a);
    }
    else // d < 0
    {
        cout << "Roots are complex \n";
        cout << -(double)b / (2 * a) << " + i" << sqrt_val
             << "\n"
             << -(double)b / (2 * a) << " - i" << sqrt_val;
    }
}
 
// Driver code
int main()
{
    int a = 1, b = -7, c = 12;
   
    // Function call
    findRoots(a, b, c);
    return 0;
}


Java
// Java program to find roots
// of a quadratic equation
 
import java.io.*;
import static java.lang.Math.*;
class Quadratic {
 
    // Prints roots of quadratic
    // equation ax * 2 + bx + x
    static void findRoots(int a, int b, int c)
    {
        // If a is 0, then equation is not
        // quadratic, but linear
 
        if (a == 0) {
            System.out.println("Invalid");
            return;
        }
 
        int d = b * b - 4 * a * c;
        double sqrt_val = sqrt(abs(d));
 
        if (d > 0) {
            System.out.println(
                "Roots are real and different \n");
 
            System.out.println(
                (double)(-b + sqrt_val) / (2 * a) + "\n"
                + (double)(-b - sqrt_val) / (2 * a));
        }
        else if (d == 0) {
            System.out.println(
                "Roots are real and same \n");
 
            System.out.println(-(double)b / (2 * a) + "\n"
                               + -(double)b / (2 * a));
        }
        else // d < 0
        {
            System.out.println("Roots are complex \n");
 
            System.out.println(-(double)b / (2 * a) + " + i"
                               + sqrt_val + "\n"
                               + -(double)b / (2 * a)
                               + " - i" + sqrt_val);
        }
    }
 
    // Driver code
    public static void main(String args[])
    {
 
        int a = 1, b = -7, c = 12;
       
        // Function call
        findRoots(a, b, c);
    }
}
 
// This code is contributed by Sumit Kumar.


Python3
# Python program to find roots
# of a quadratic equation
import math
 
# Prints roots of quadratic equation
# ax*2 + bx + x
 
 
def findRoots(a, b, c):
 
    # If a is 0, then equation is
    # not quadratic, but linear
    if a == 0:
        print("Invalid")
        return -1
    d = b * b - 4 * a * c
    sqrt_val = math.sqrt(abs(d))
 
    if d > 0:
        print("Roots are real and different ")
        print((-b + sqrt_val)/(2 * a))
        print((-b - sqrt_val)/(2 * a))
    elif d == 0:
        print("Roots are real and same")
        print(-b / (2*a))
    else:  # d<0
        print("Roots are complex")
        print(- b / (2*a), " + i", sqrt_val)
        print(- b / (2*a), " - i", sqrt_val)
 
 
# Driver Program
a = 1
b = -7
c = 12
 
# Function call
findRoots(a, b, c)
 
# This code is contributed by Sharad Bhardwaj.


C#
// C# program to find roots
// of a quadratic equation
using System;
 
class Quadratic {
 
    // Prints roots of quadratic
    // equation ax * 2 + bx + x
    void findRoots(int a, int b, int c)
    {
 
        // If a is 0, then equation is
        // not quadratic, but linear
 
        if (a == 0) {
            Console.Write("Invalid");
            return;
        }
 
        int d = b * b - 4 * a * c;
        double sqrt_val = Math.Abs(d);
 
        if (d > 0) {
            Console.Write(
                "Roots are real and different \n");
 
            Console.Write(
                (double)(-b + sqrt_val) / (2 * a) + "\n"
                + (double)(-b - sqrt_val) / (2 * a));
        }
 
        // d < 0
        else {
            Console.Write("Roots are complex \n");
 
            Console.Write(-(double)b / (2 * a) + " + i"
                          + sqrt_val + "\n"
                          + -(double)b / (2 * a) + " - i"
                          + sqrt_val);
        }
    }
 
    // Driver code
    public static void Main()
    {
        Quadratic obj = new Quadratic();
        int a = 1, b = -7, c = 12;
       
        // Function call
        obj.findRoots(a, b, c);
    }
}
 
// This code is contributed by nitin mittal.


PHP
 0)
    {
        echo "Roots are real and ".
                    "different \n";
        echo (-$b + $sqrt_val) / (2 * $a) , "\n",
             (-$b - $sqrt_val) / (2 * $a);
    }
    else if ($d == 0)
    {
        echo "Roots are real and same \n";
        echo -$b / (2 * $a);
    }
     
    // d < 0
    else
    {
        echo "Roots are complex \n";
        echo -$b / (2 * $a) , " + i" ,
              $sqrt_val, "\n" , -$b / (2 * $a),
                             " - i", $sqrt_val;
    }
}
 
// Driver code
$a = 1; $b = -7 ;$c = 12;
 
// Function call
findRoots($a, $b, $c);
 
// This code is contributed
// by nitin mittal.
?>


Javascript


输出
Roots are real and different 
4.000000
3.000000