面向对象程序设计实验三:区分面向过程与面向对象

实验要求:

一元二次型方程的求解是数学中的常见问题,其中一种求解方法是“公式法”。在此次实验中,分别利用面向过程与面向对象的思路去求解一元二次型方程的实数根。具体要求如下:公式法求解一元二次型方程主要分为三步,

(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;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孤歌Dea妄友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值