二次方程程序不给出值

本文关键字:程序 二次方程 | 更新日期: 2023-09-27 18:09:44

你能告诉我我解二次方程的代码有什么问题吗?不要被我的工作吓到,因为我对这个项目还很陌生。

class Program
{
    static void Main(string[] args)
    {
        double a, b, c, x1, x2, x, D;
        String A;
        String B;
        String C;
        Console.Write("a=");
        A = Console.ReadLine(); 
        Console.Write("b=");
        B = Console.ReadLine();
        Console.Write("c=");
        C = Console.ReadLine();
        a = Convert.ToDouble(A);
        b = Convert.ToDouble(B);
        c = Convert.ToDouble(C);
        D =(b * b - 4 * a * c);
        if (D > 0)
        {
            x1 = (-b + Math.Sqrt(D)) / (2 * a);
            x2 = (-b - Math.Sqrt(D)) / (2 * a);
            Console.WriteLine("x1=" + x1);
            Console.WriteLine("x2=" + x2);
        }
        else
            if (D < 0)
            {
                D = -D;
                x1 = (-b + Math.Sqrt(D)) / (2 * a);
                x2 = (-b - Math.Sqrt(D)) / (2 * a);
            }
            else
            {
                x = (-b / (2 * a));
                Console.WriteLine("x=" + x);
            }
        Console.ReadKey();
    }
}

运行时不显示任何值

二次方程程序不给出值

试试

class Program
{
    static void Main(string[] args)
    {
        double a, b, c, x1, x2, x, D;
        String A;
        String B;
        String C;
        Console.Write("a=");
        A = Console.ReadLine();
        Console.Write("b=");
        B = Console.ReadLine();
        Console.Write("c=");
        C = Console.ReadLine();
        a = Convert.ToDouble(A);
        b = Convert.ToDouble(B);
        c = Convert.ToDouble(C);
        if (a != 0)
        {
            D = (b * b - 4 * a * c);
            if (D > 0)
            {
                x1 = (-b + Math.Sqrt(D)) / (2 * a);
                x2 = (-b - Math.Sqrt(D)) / (2 * a);
                Console.WriteLine("x1=" + x1);
                Console.WriteLine("x2=" + x2);
            }
            else
            {
                if (D < 0)
                {
                    D = -D;
                    //x1 = (-b + Math.Sqrt(D)) / (2 * a);
                    //x2 = (-b - Math.Sqrt(D)) / (2 * a);
                    string complexX1 = ((-b) / (2 * a)).ToString() + "+" + (Math.Sqrt(D) / 2 * a).ToString() + "i";
                    string complexX2 = ((-b) / (2 * a)).ToString() + "-" + (Math.Sqrt(D) / 2 * a).ToString() + "i";
                    Console.WriteLine("complex x1=" + complexX1);
                    Console.WriteLine("complex x2=" + complexX2);
                }
                else
                {
                    x = (-b / (2 * a));
                    Console.WriteLine("x=" + x);
                }
            }
        }
        else
        {
            if (b != 0)
            {
                x = -c / b;
                Console.WriteLine("Grade 1 equation");
                Console.WriteLine("x=" + x);
            }
            else
            {
                Console.WriteLine("No equation.");
            }
        }
        Console.ReadKey();
    }
}

似乎在所有的情况下,你都不是为了安慰而写信。

处理复根的方法也不完全正确,因为"i"缺失了,因此数字的实部和虚部都缺失了。对于复根,结果应该也没问题。

我更新了代码,所以现在也处理了a为0(方程不是二次方程)和b为0(没有方程)的情况。

不要将所有内容塞进单个Main方法中,分解您的实现!在这种情况下,让我们提取一个方法:

   // IEnumerable<Double>: quadratic equation can have 0..2 distinct real roots  
   private static IEnumerable<Double> SolveQuadratic(double a, double b, double c) {
     double D = b * b - 4 * a * c;
     if (D < 0)
       yield break; // No real solutions (they are both complex ones)
     else if (D == 0)
       yield return -b / (2 * a); // One distinct root    
     else {
       // Two distinct solutions
       yield return (-b - Math.Sqrt(D)) / (2 * a); 
       yield return (-b + Math.Sqrt(D)) / (2 * a); 
     }
   }

然后使用它:

   ...
   a = Convert.ToDouble(A);
   b = Convert.ToDouble(B);
   c = Convert.ToDouble(C);
   var result = SolveQuadratic(a, b, c)
     .Select((x, i) => $"x{i + 1} = {x}");  
   Console.Write(String.Join(Environment.NewLine, result));
   Console.ReadKey();