1-4 C++类练习 - 一元二次方程的CQuadEq类

本文介绍了如何在C++中设计一个名为CQuadEq的类,用于处理一元二次方程ax^2+bx+c=0。该类包含系数、判别式和根的变量,提供FindRoot方法计算根并考虑四种情况:实根、复根。测试程序示例展示了如何使用该类。
摘要由CSDN通过智能技术生成

题目

设计一个描述一元二次方程 ax^2 + bx + c = 0 的类 CQuadEq,数据成员包括三个方程系数、判别式 d 及表示方程根的变量 x1 和 x2,成员函数包括求根 FindRoot()、显示根Show()、无传入参数的默认构造函数及传入三个参数并对系数做初始化的构造函数。主函数中输入三个系数,输出方程的根。提示:求开方和绝对值要用到标准库中 的数学函数,求根时要考虑四种情况(1)a = 0 时,有一个根;(2)b^2 -4ac = 0 时, 有两个相同的实根;(3)b^2 -4ac > 0 时,有两个不等实根;(4)b^2 -4ac < 0 时,有两个 共轭复根,i 可作为字符输出。

代码

head.h
class CQuadEq
{
	public:
		void FindRoot();
		void show(CQuadEq&);
		CQuadEq();
		CQuadEq(double,double,double);
		
	private:
		double a,b,c;
		double d;
		double x1,x2;
};
head.cpp
#include<cmath>
#include <iostream>
using namespace std;
#include"head.h"
CQuadEq::CQuadEq()
{
	a=1; b=1; c=1; d=1;
}
CQuadEq::CQuadEq(double i,double j,double k)
{
	a = i; b = j; c = k;
	d=b*b-4*a*c;
}
void CQuadEq::FindRoot()
{
	if(a==0 && d!=0)
	{
		x1 = -c/b;
	}
	else if(d==0)
	{
		x1 = -b/(2*a);
	}
	else if( d > 0)//两个不同的实根
	{
		x1 = (-b+sqrt(d))/(2*a);
		x2 =  (-b-sqrt(d))/(2*a);
	}
	else if(d < 0)//两个共轭复根
	{
		x1 = -b/(2*a);
		x2 = sqrt(-d)/(2*a);
	}
}
void CQuadEq::show(CQuadEq& t)
{
	if(a==0 || d==0)
	{
		cout<<"x1=x2="<<t.x1 <<endl;
	}
	else if(d>0)
	{
		cout << "x1="<<t.x1 <<" "<<"x2="<< t.x2 <<endl;
	}
	else if(d<0)
	{
		cout << "x1="<<t.x1 <<"+"<< t.x2 <<"i"<<" "<< "x2="<<t.x1 <<"-"<< t.x2 <<"i"<<endl;
	}
}
test.cpp
#include"head.h"
#include <iostream>
using namespace std;
int main()
{
	double x,y,z;
	cout << "请依次输入a b c的值:";
	cin >> x >>y>>z;
	CQuadEq cq(x,y,z);
	cq.FindRoot();
	cq.show(cq);

	return 0;
}

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值