实验要求:
一元二次型方程的求解是数学中的常见问题,其中一种求解方法是“公式法”。在此次实验中,分别利用面向过程与面向对象的思路去求解一元二次型方程的实数根。具体要求如下:公式法求解一元二次型方程主要分为三步,
(1)判断是否为一元二次方程;(2)判断是否有实数根;(3)公式法求解实根。
面向过程:编写3个函数,求解一元二次型方程的实根,若不满足一元二次方程的条件或无法求出实根,则输出原因;
面向对象:编写一个一元二次型方程的类,并将上述三个功能作为成员函数,求解一元二次型方程的实根,若不满足一元二次方程的条件或无法求出实根,则输出原因。
程序代码:
面向过程编程:
#include<iostream>
#include<cmath>
using namespace std;
double Judgefangcheng(double a, double b, double c)
{
if (a == 0)
{
return 0;
}
else
{
return 1;
}
}
double J(double a, double b, double c)
{
double t;
t = b*b - 4 * a * c;
if (t == 0)
return 1;
else if (t > 0)
return 2;
else if (t < 0)
return 0;
}
void Qiugen(double a, double b, double c)
{
double x1, x2;
x1 = (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
cout << "方程第一个实数跟为:" << x1 << "\n";
x2 = (-b - sqrt(b * b - 4 * a * c)) / (2 * a);
cout << "方程第二个实数跟为:" << x2;
}
int main()
{
double a, b, c;
cout << "请分别输入方程a*x^2+b*x+c=0的三个系数a,b,c:";
cin >> a >> b >> c;
if (Judgefangcheng(a, b, c) == 0)
cout << "此方程不是二元一次方程。";
else
{
if(J(a,b,c)==0)
cout << "此方程是二元一次方程,但没有实数根。";
else if (J(a, b, c) == 1)
{
cout << "此方程有两个相同的实数根:\n";
Qiugen(a, b, c);
}
else
{
cout << "此方程有两个不同的实数根:\n";
Qiugen(a, b, c);
}
}
}
面向对象编程:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
class Equation
{
private:
double a, b, c, x1, x2;
public:
Equation(double _a, double _b, double _c)
{
a = _a;
b = _b;
c = _c;
}
void solve()
{
double delt = b * b - 4 * a * c;
if (delt == 0)
{
x1 = (-b + sqrt(delt)) / (2 * a);
x2 = x1;
}
else if (delt > 0)
{
x1 = (-b + sqrt(delt)) / (2 * a);
x2 = (-b - sqrt(delt)) / (2 * a);
}
else
{
//没输出
x1 = x2 = 0;
}
}
void printRoot()
{
cout << setiosflags(ios::fixed);
cout << setprecision(2) << "方程第一个实数根为:"<< x1 << "\n方程第二个实数根为:" << x2 << endl;
}
};
int main()
{
double a, b, c;
cout << "请分别输入方程a*x^2+b*x+c=0的三个系数a,b,c:";
while (cin >> a >> b >> c)
{
Equation equ(a, b, c);
equ.solve();
equ.printRoot();
}
return 0;
}
运行结果:
面向过程编程结果:
面向对象编程结果:
如果方程没有实数根,则x1=x2=0;