c#求一元二次方程ax^2+bx+c=0的根,a(a≠0)、b、c的值由键盘输入 10

怎么用函数做呢?... 怎么用函数做呢? 展开
 我来答
zjf121348
2019-05-08 · TA获得超过520个赞
知道小有建树答主
回答量:1126
采纳率:59%
帮助的人:206万
展开全部
using System;

class RootOfSquare
{
    static (double x1, double x2)? Roots(double a, double b, double c)
    {
        double delta = b * b - 4 * a * c;
        if (delta < 0)
            return null;
        else
            return ((-b + Math.Sqrt(delta)) / (2 * a), (-b - Math.Sqrt(delta)) / (2 * a));
    }

    static void Main()
    {
        var result = Roots(1, -4, 3);
        if (result != null)
            Console.WriteLine($"{result.Value.x1} {result.Value.x2}");
    }
}

其实我不懂为什么不能用一个三元表达式解决,即使改成true?null:null也会报error。

static (double x1, double x2)? Roots(double a, double b, double c)
=> b * b - 4 * a * c is double delta && delta < 0 ?
    null : ((-b + Math.Sqrt(delta)) / (2 * a), (-b - Math.Sqrt(delta)) / (2 * a));
// Type of conditional expression cannot be determined because there is no implicit conversion between '<null>' and '(double, double)' (CS0173) [dotnet]

---

好了,三元表达式需要返回相同的类型,null不能转换成null,也不能转换成(double,double),所以即使它们分别都可以转换成可空类型也不行。

解决方法是自己手动创建一个为null的可空类型:

static (double x1, double x2)? Roots(double a, double b, double c)
=> b * b - 4 * a * c is double delta && delta < 0 ?
    new Nullable<(double, double)>() : ((-b + Math.Sqrt(delta)) / (2 * a), (-b - Math.Sqrt(delta)) / (2 * a));
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式