标题:求助:计算机怎么解二次方程?
只看楼主
妖妖零
Rank: 2
等 级:论坛游民
威 望:1
帖 子:5
专家分:10
注 册:2022-9-8
结帖率:100%
已结贴  问题点数:10 回复次数:2 
求助:计算机怎么解二次方程?
【描述】
编写程序,求一元二次方程的根,结果保留2位小数。
【输入】
一行中给出3个浮点系数a、b、c,中间用空格分开。
【输出】
根据系数情况,输出不同结果:
1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
2)如果方程有两个不相等复数根,则每行按照格式"实部+虚部i"输出一个根,先输出虚部为正的,后输出虚部为负的;
3)如果方程只有一个根,则直接输出此根;
4)如果系数都为0,则输出"Zero Equation";
5)如果a和b为0,c不为0,则输出"Not An Equation"。
搜索更多相关主题的帖子: 方程 系数 计算机 次方 输出 
2022-09-21 16:28
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
以下代码平铺直叙,如果你嫌判断a的正负号太麻烦的话,可以先将a变为非负数,即 if(a<0) { a*=-1; b*=-1; c*=-1; }

程序代码:
#include <stdio.h>
#include <math.h>

int main( void )
{
    double a, b, c;
    if( scanf("%lf%lf%lf",&a,&b,&c) != 3 )
        puts( "Input error" );
    else if( a==0 && b==0 && c==0 ) // 4)如果系数都为0,则输出"Zero Equation"
        puts( "Zero Equation" );
    else if( a==0 && b==0 ) // 5)如果a和b为0,c不为0,则输出"Not An Equation"
        puts( "Not An Equation" );
    else if( a==0 ) // 3)如果方程只有一个根,则直接输出此根
        printf( "%.2f\n", -c/b );
    else
    {
        double delta = b*b - 4*a*c;
        if( delta>0 && a>0 ) // 1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
            printf( "%.2f %.2f\n", (-b+sqrt(delta))/(2*a), (-b-sqrt(delta))/(2*a) );
        else if( delta>0 && a<0 ) // 1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
            printf( "%.2f %.2f\n", (-b-sqrt(delta))/(2*a), (-b+sqrt(delta))/(2*a) );
        else if( delta<0 && a>0 ) // 2)如果方程有两个不相等复数根,则每行按照格式"实部+虚部i"输出一个根,先输出虚部为正的,后输出虚部为负的;
            printf( "%.2f+%.2fi %.2f-%.2fi\n", -b/(2*a), sqrt(-delta)/(2*a), -b/(2*a), sqrt(-delta)/(2*a) );
        else if (delta < 0 && a<0) // 2)如果方程有两个不相等复数根,则每行按照格式"实部+虚部i"输出一个根,先输出虚部为正的,后输出虚部为负的;
            printf( "%.2f+%.2fi %.2f-%.2fi\n", -b/(2*a), -sqrt(-delta)/(2*a), -b/(2*a), -sqrt(-delta)/(2*a) );
        else // 3)如果方程只有一个根,则直接输出此根
            printf( "%.2f\n", -b/(2*a) );
    }
}


输入
     0 0 0
     0 0 1
     0 2 6
     1 1 -2
     -1 -1 2
     1 2 2
     -1 -2 -2
     1 -2 1


输出
Zero Equation
Not An Equation
-3.00
1.00 -2.00
1.00 -2.00
-1.00+1.00i -1.00-1.00i
-1.00+1.00i -1.00-1.00i
1.00


2022-09-22 08:40
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
免得你写错,我直接给你代码吧

程序代码:
#include <stdio.h>
#include <math.h>

int main( void )
{
    double a, b, c;
    if( scanf("%lf%lf%lf",&a,&b,&c) != 3 )
        puts( "Input error" );
    else if( a==0 && b==0 && c==0 ) // 4)如果系数都为0,则输出"Zero Equation"
        puts( "Zero Equation" );
    else if( a==0 && b==0 ) // 5)如果a和b为0,c不为0,则输出"Not An Equation"
        puts( "Not An Equation" );
    else if( a==0 ) // 3)如果方程只有一个根,则直接输出此根
        printf( "%.2f\n", -c/b );
    else
    {
        if( a < 0 )
        {
            a *= -1;
            b *= -1;
            c *= -1;
        }
        double delta = b*b - 4*a*c;
        if( delta > 0 ) // 1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
            printf( "%.2f %.2f\n", (-b+sqrt(delta))/(2*a), (-b-sqrt(delta))/(2*a) );
        else if( delta<0 ) // 2)如果方程有两个不相等复数根,则每行按照格式"实部+虚部i"输出一个根,先输出虚部为正的,后输出虚部为负的;
            printf( "%.2f+%.2fi %.2f-%.2fi\n", -b/(2*a), sqrt(-delta)/(2*a), -b/(2*a), sqrt(-delta)/(2*a) );
        else // 3)如果方程只有一个根,则直接输出此根
            printf( "%.2f\n", -b/(2*a) );
    }
}
2022-09-22 08:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-510107-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017022 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved