3975 - 计算一方程的根

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 56 MB

有如下表示的方程式ax^2+bx=c,求其根

题目输入

本题的输入有多行,

第一行输入n,表示接下来有n组数据分别输入abc的值。输入abc时以空格隔开,abc的值可能为实数。

题目输出

本题有多行输出,分别对应n个abc输入构成方程式的根

如果当方程无实根的时候,输出“no real root”;

若方程有且只有一个根,直接输出保留4位小数的实根;

如果方程有两个根,按负根在前,正根在后的格式输出以空格为分隔的两个保留4位小数的根;

如果abc输入的是字母、符号或者abc输入的值使得方程不成立的比如a=b=0,输出“illegal inputs!”;

最后一行行尾输出换行。

输入/输出样例

输入格式

2
0 1 2.3
a c 3

输出格式

2.3000
illegal inputs!

C语言解答

#include<stdio.h>
#include<math.h>
int main()
{
    float a,b,c,disc,x1,x2;
    a=1;b=2,c=-6;
    disc=b*b-4*a*c;
    if(disc>=0)
    {   x1=((-b)+sqrt(disc))/(2.0*a);
       x2=((-b)-sqrt(disc))/(2.0*a);
        printf("%.4f\n",x2);
        printf("%.4f\n",x1);
    }
    else
        printf("无实根\n");
}

C++解答

/* ================== Ex 3-18, p59 ================== */

#include <stdio.h>
#include <math.h>

void root (double a, double b, double c) {
    double tmp, d = b*b + 4*a*c;
    if (a==0.)
	{
		if(b==0.) printf("illegal inputs!\n");
		else printf("%.4f\n", -c/b);
	}

    else if (d > 0) {
        tmp = sqrt(d);
        printf("%.4f, %.4f\n", 
               (-b - tmp)/2./a, (-b + tmp)/2./a);
    }
    else if (d == 0)
        printf("%.4f\n", -b/2./a);
    else
        printf("no real root\n");
}

int main() {
    double a,b,c;
    int i,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++) 
    {
		if((scanf("%lf %lf %lf", &a,&b,&c)!=3)) 
		{
			printf("illegal inputs!\n");
			fflush(stdin);
		}
    	else root(a, b, c);
	}
    

    return 0;
}