首页 > 学院 > 开发设计 > 正文

北理04年复试上机之一元二次方程

2019-11-11 03:37:54
字体:
来源:转载
供稿:网友

题目

建立一个求一元二次方程解的类(a*x^2+b*x+c=0),输入系数a,b,c 的值后打印出这个方程的解。

Input

输入第一行为样例数m,接下来m行每行3个整数a、b、c。

31 -3 21 -2 12 1 2

Output

输出m行,要求格式如下:若无解则输出-1,若有单解则输出x=..,若有两解则输出x1=…,x2=…,具体参见样例,保留小数点后两位。

x1=1.00,x2=2.00x=1.00-1

code

#include<iostream>#include<stdio.h>#include<math.h>using namespace std;const double esp = 1e-6;class Answer{PRivate:int m_a, m_b, m_c;public: Answer(){}; Answer(int a, int b, int c); void show();};Answer::Answer(int a, int b, int c){ m_a = a; m_b = b; m_c = c;}void Answer::show(){ int delt = pow(m_b, 2) - 4 * m_a * m_c; double ans1, ans2; if (m_a == 0) { if (m_b != 0) { ans1 = -m_c*1.0 / m_b; printf("x=%.2lf/n", ans1); } else { if(m_c == 0) { cout << "x=0.00" << endl; } else { cout << "-1" << endl; } } } else if (delt < 0) { cout << "-1" << endl; } else if (delt == 0) { ans1 = (-m_b) * 1.0 / (2 * m_a); printf("x=%.2lf/n", ans1); } else if (delt > 0) { ans1 = double((-m_b - sqrt(delt)) / (2 * m_a)); ans2 = double((-m_b + sqrt(delt)) / (2 * m_a)); printf("x1=%.2lf,x2=%.2lf/n", ans1, ans2); }}int main(){ // freopen("E:/input.txt", "r", stdin); int m; cin >> m; while (m--) { int a, b, c; cin >> a >> b >> c; Answer ans(a, b, c); ans.show(); } return 0;}

注意

当a = 0时,要分好几种情况讨论


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表