求一元二次函数的根

总时间限制:1000ms内存限制:65536kB

描述

利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2+ bx + c =0的根,其中a不等于0。

输入
输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程ax2 + bx + c =0的系数。
输出
输出一行,表示方程的解。
若b2 = 4 * a * c,则两个实根相等,则输出形式为:x1=x2=...。
若b2 > 4 * a * c,则两个实根不等,则输出形式为:x1=...;x2 = ...,其中x1>x2。
若b2 < 4 * a * c,则有两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,即x1的虚部系数大于等于x2的虚部系数,实部为0时不可省略。实部 = -b / (2*a), 虚部 = sqrt(4*a*c-b*b) / (2*a)

所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。

样例输入
样例输入1
1.0 2.0 8.0

样例输入2
1 0 1
样例输出
样例输出1
x1=-1.00000+2.64575i;x2=-1.00000-2.64575i

样例输出2
x1=0.00000+1.00000i;x2=0.00000-1.00000i

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    double a,b,c;
    double x1=0.0,x2=0.0,n=0.0,m1=0.0,m2=0.0,k=0.0,w=0.0;
    scanf("%lf %lf %lf",&a,&b,&c);
    n=b*b-4*a*c;
    k= -b / (2*a);
    m1=(-b-sqrt(n))/2/a;
    m2=(-b+sqrt(n))/(2*a);
    w=sqrt(4*a*c-b*b) / (2*a);
    if(n==0)
    {
    printf("x1=x2=%.5f",k);
    }
    else if(n>0)
    {
    printf("x1=%.5lf;x2=%.5lf",m2,m1);
    }
    else
    {
     if(b==0)
     {
        printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi",fabs(k),w,fabs(k),w);
     }
     else
     {
        printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi",k,w,k,w);
     }
    }
    return 0;
}

时间: 2024-10-10 21:28:16

求一元二次函数的根的相关文章

C#求一元二次方程的根

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 求一元二次方程的根 { public partial

用弦截法求一元三次方程的根x^3-5x^2+16x-80=0 ;带注释!

//用弦截法求一元三次方程的根x^3-5x^2+16x-80=0 #include<stdio.h>#include<math.h> float f(float x) //定义子函数f(x) = x^3-5x^2+16x-80,当f(x) →0时,则x即为所求的实数根:  {     float y;     y=((x-5.0)*x+16.0)*x-80.0;     return(y);          //返回f(x)的值  }    float xpoint( float

(31-33)判断两个实型数据是否相等,求一元二次方程的根,逻辑型数据

(31)判断两个实型数据是否相等 1.abs求一个整型数据的绝对值,fabs,求一个浮点型数据的绝对值 (32)求一元二次方程的根 #include<stdio.h>#include<math.h>int main(void){ double a,b,c,d; printf("请依次输入二元一次方程的洗漱:\n"); scanf("%lf%lf%lf",&a,&b,&c); if (a==0) { printf(&qu

求一元二次方程的根

描述 利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2+ bx + c =0的根,其中a不等于0. 输入输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程ax2 + bx + c =0的系数.输出输出一行,表示方程的解.若b2 = 4 * a * c,则两个实根相等,则输出形式为:x1=x2=....若b2 > 4 * a * c,则两个实根不等,则输出

Openjudge-计算概论(A)-求一元二次方程的根

描述: 利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2 + bx + c =0的根,其中a不等于0.输入第一行是待解方程的数目n. 其余n行每行含三个浮点数a, b, c(它们之间用空格隔开),分别表示方程ax2 + bx + c =0的系数.输出输出共有n行,每行是一个方程的根:若是两个实根,则输出:x1=...;x2 = ...若两个实根相等,则输出:x1=x2=...若是两

1-4-20:求一元二次方程的根

描述 利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2+ bx + c =0的根,其中a不等于0. 输入 输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程ax2 + bx + c =0的系数. 输出 输出一行,表示方程的解.若两个实根相等,则输出形式为:x1=x2=....若两个实根不等,则输出形式为:x1=...;x2 = ...,其中x1<x2.若

分支-18. 求一元二次方程的根

本题目要求一元二次方程 a*x2+b*x+c=0 的根,结果保留2位小数. 输入格式: 输入在一行中给出3个浮点系数a, b, c,中间用空格分开. 输出格式: 根据系数情况,输出不同结果: 1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小: 2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的: 3)如果方程只有一个根,则直接输出此根: 4)如果系数都为0,则输出"Zero Equation": 5)如果a和b为0,

39.输入任意的a,b,c求一元二次方程ax*x+bx+c=0的根?

//从这个小题中可以熟悉头文件#include<cmath>的使用 //1.题目较为简单,只需运用判断语句即可 //2.注意,声明变量时要想到根的无理性,同时需注意函数结果的强制类型转换,sqrt只支持double和float类型 #include<iostream> #include<cmath>//可以使用一些常用函数 using namespace std; int main() { int a,b,c,d; float x1,x2,x3; cout<<

弦截法求一元三次方程的近似解

1 #include<stdio.h> 2 #include<math.h> 3 4 //计算一元三次方程的根大致分布位置 5 6 //计算的方程为 x*x*x-8*x*x+12*x-30=0 7 8 //计算函数值 9 float f(float x) 10 { 11 return ((x-8.0)*x+12.0)*x-30.0; 12 } 13 14 //计算弦与坐标x轴的交点 15 16 float xpoint(float x1,float x2) 17 { 18 retu