吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1433|回复: 20
收起左侧

[已解决] 求助C语言 解二次方程

 关闭 [复制链接]
涛行 发表于 2020-10-9 23:55
本帖最后由 涛行 于 2020-10-10 01:04 编辑

本人小白一枚,今天写了如下解一元二次方程的代码,结果当输出虚数解是,虚部永远是0.00000,往大佬们帮我看看什么情况,谢谢大佬
[C] 纯文本查看 复制代码
#include<stdio.h>
#include<math.h>

void root(double a, double b, double c);

int main()
{
        double a, b, c;
        printf("ax^2+bx+c=0\nPlease input a,b,c:");
        scanf("%lf%lf%lf", &a, &b, &c);
        printf("\n\n");
        root(a, b, c);
        return 0;
}

void root(double a, double b, double c)
{
        double d, x1, x2, Re, Im;
        if (a == 0 && b == 0 && c == 0)printf("方程有无数解。");
        else if (a == 0 && b == 0 && c != 0)printf("该方程无解。");
        else if (a == 0 && b != 0)printf("该方程有实根,且为x=%lf", -b / c);
        else if (a != 0)
        {
                d = b * b - 4 * a * c;
                if (d = 0)
                        printf("方程有两个相等的实根,且为x1=x1=%lf", -b/(2*a));
                else if (d > 0)
                {
                        x1 = (-b + sqrt(d)) / (2 * a);
                        x2 = (-b - sqrt(d)) / (2 * a);
                        printf("方程有两个不等的实根,且为x1=%lf,x2=%lf");
                }
                else
                {
                        Re = -b / (2 * a);
                        Im = sqrt(-d) / (2 * a);
                        printf("方程有两个虚根,且x1的实部为%lf,虚部为%lfi,\n\t\t\t\b\b\b\b\b\bx2的实部为%lf,虚部为-%lfi", Re, Im, Re, Im);
                }
        }
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

霸气の超神 发表于 2020-10-10 00:08
C语言里的几次方不是直接用^,你完全可以写成a*a
如果要写高次方的话,最好还是用pow
eWVhaA 发表于 2020-10-10 00:32
霸气の超神 发表于 2020-10-10 00:08
C语言里的几次方不是直接用^,你完全可以写成a*a
如果要写高次方的话,最好还是用pow

兄弟,那是printf的内容。。输出内容爱咋写咋写,又不影响程序
eWVhaA 发表于 2020-10-10 00:35
第25行,d=0,比较判别应该是 d==0
第31行,%lf后面没有具体值,当然输入啥都输出0
eWVhaA 发表于 2020-10-10 00:39
阿抱歉,少看了虚部解,刚刚只看上面了
eWVhaA 发表于 2020-10-10 00:42
CleanShot 2020-10-10 at 00.41.20.png
虚部输出没问题啊,我懒得手算了,但是肯定不是0啊

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
涛行 + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| 涛行 发表于 2020-10-10 00:43
eWVhaA 发表于 2020-10-10 00:35
第25行,d=0,比较判别应该是 d==0
第31行,%lf后面没有具体值,当然输入啥都输出0

d==0与d>0的情况也会影响d<0时的输出吗?
我是输入的1 2 3,然后虚部都是0
追寻星辰大海 发表于 2020-10-10 00:52
涛行 发表于 2020-10-10 00:43
d==0与d>0的情况也会影响d<0时的输出吗?
我是输入的1 2 3,然后虚部都是0

第25行判断的时候是不是把0赋给了d,导致后面错误?
eWVhaA 发表于 2020-10-10 00:57
涛行 发表于 2020-10-10 00:43
d==0与d>0的情况也会影响d<0时的输出吗?
我是输入的1 2 3,然后虚部都是0

你整个判别条件都是错的何谈后面的语句。

[C] 纯文本查看 复制代码
int main()
{
    root(1, 2, 3);
    return 0;
}
 
void root(double a, double b, double c)
{
    double d, Im;
    if (a != 0)
    {
        d = b * b - 4 * a * c;
        if (d = 3) {
            printf("%lf", d);
        }
        else
        {
            Im = -d;
            printf("虚部为%lfi", Im);
        }
    }
}


把整个程序最简化,13行,if里把d赋值成3,最后输出3.000000

如果改成
[C] 纯文本查看 复制代码
if (d = 0) {
            printf("%lf", d);
        }
        else
        {
            Im = -d;
            printf("虚部为%lfi", Im);
        }


此时将0赋值给d,并且if(0)条件失败,进入else判别,拿d=0去参与运算,当然都是0
eWVhaA 发表于 2020-10-10 00:59
计算机不会按照你的想法去工作,d=0就是赋值,你的if判别都是错的更不用去谈else如何elseif如何了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-11 18:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表