应用题
1. 请使用VC6或使用【答题】菜单打开
考生文件夹proj2下的工程proj2。该工程中包含一个程序文件main.cpp,其中有类Quadritic、类Root及主函数main的定义。一个Quadritic对象表示一个ax
2+bx+c的一元二次多项式。一个Root对象用于表示方程ax
2+bx+c=0的一组根,它的数据成员num_of_roots有3种可能的值,即0、1和2,分别表示根的3种情况:无实根、有两个相同的实根和有两个不同的实根。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为(注:输出中的X^2表示x
2):
3X^2+4X+5=0.0 无实根
4.5X^2+6X+2=0.0 有两个相同的实根:-0.666667和-0.666667
1.5X^2+2X-3=0.0 有两个不同的实根:0.896805和-2.23014
注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“// ****found****”。
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
class Root{ //一元二次方程的根
public:
const double x1; //第一个根
const double x2; //第二个根
const int num_of_roots; //不同根的数量:0、1或2
//创建一个“无实根”的Root对象
Root(): x1 (0.0), x2 (0.0), num_of_roots(0) {}
//创建一个“有两个相同的实根”的Root对象
Root (double root)
// ********found********
:______{}
//创建一个“有两个不同的实根”的Root对象
Root (double root1, double root2): x1 (root1), x2 (root2), num_of_roots(2) {}
void show() const { //显示根的信息
cout << "\t\t";
switch(num_of_roots) {
case 0:
// ********found********
______
case 1:
cout << "有两个相同的实根:" << x1 << "和" << x2; break;
default:
cout << "有两个不同的实根:" << x1 << "和" << x2; break;
}
}
};
class Quadratic { //二次多项式
public:
const double a,b,c; //分别表示二次项、一次项和常数项等3个系数
Quadratic (double a, double b, double c)
//构造函数
// **********found**********
:______{}
Quadratic (Quadratic& x) //复制构造函数
:a(x.a), b(x.b), c(x.c) {}
Quadratic add (Quadratic x) const {
//求两个多项式的和
return Quadratic (a + x.a, b + x.b, c + x.c);
}
Quadratic sub (Quadratic x) const {
//求两个多项式的差
// **********found**********
______
}
double value (double x) const {
//求二次多项式的值
return a*x*x+b*x+c;
}
Root root() const { //求一元二次方程的根
double delta = b *b - 4 * a * c;
//计算判别式
if (delta < 0.0) return Root();
if (delta == 0.0)
return Root(-b/(2 * a));
double sq = sqrt(delta);
return Root((-b+sq)/(2 * a), (-b-sq)/(2*a));
}
void show() const { //显示多项式
cout << endl << a << "X^2" << showpos << b << "X" << c << noshowpos;
}
void showFunction() { //显示一元二次方程
show();
cout << "=0.0";
}
};
int main() {
Quadratic q1(3.0, 4.0, 5.0), q2(4.5, 6.0, 2.0), q3(q2.sub(q1));
q1.showFunction();
q1.root().show();
q2.showFunction();
q2.root().show();
q3.showFunction();
q3.root().show();
cout << endl;
return 0;
}