第9周-任务5- 一元一次方程类

简介: 【题目】设计一元一次方程类,求形如ax+b=0的方程的解。 例如:输入3x-8=0时,输出的方程的解为x=2.66667; 再如:输入5s+18=0时,输出的方程的解为s=-3.6; 给出部分代码如下: #include "iostream"using namespace std;class CEquation{private: double a; // 未知

【题目】设计一元一次方程类,求形如ax+b=0的方程的解。

例如:输入3x-8=0时,输出的方程的解为x=2.66667;

再如:输入5s+18=0时,输出的方程的解为s=-3.6;

给出部分代码如下:

#include "iostream"
using namespace std;
class CEquation
{
private:
	double a;     // 未知数系数
	double b;     // 常数项
	char unknown; // 未知数的符号
public:
	CEquation(double aa=0,double bb=0);
	friend istream &operator >> (istream &in,CEquation &e);
	friend ostream &operator << (ostream &out,CEquation &e);
	double Solve();
	char getUnknown();
};

int main()
{
	CEquation e;
	cout<<"请输入一元一次方程(输入格式:3x-8=0):";
	cin>>e;   //在两次测试中,分别输入3x-8=0和5s+18=0
	cout<<"方程为:"<<e;
	cout<<"方程的解为:"<<e.getUnknown()<<"="<<e.Solve()<<endl; //对两次测试,分别输出x=...和s=...
	e.Solve();
	system("pause");
	return 0;
}

【参考解答】

#include "iostream"
using namespace std;
class CEquation
{
private:
	double a;     // 未知数系数
	double b;     // 常数项
	char unknown; // 未知数的符号
public:
	CEquation(double aa=0,double bb=0);
	friend istream &operator >> (istream &in,CEquation &e);
	friend ostream &operator << (ostream &out,CEquation &e);
	double Solve();
	char getUnknown();
};

CEquation::CEquation(double aa,double bb):a(aa),b(bb){}

// 输入方程
istream &operator >> (istream &in,CEquation &e)
{
	char ch1,ch2,ch3,ch4;
	while(1)
	{
		cin>>e.a>>ch1>>ch2>>e.b>>ch3>>ch4;
		if (ch1>='a' && ch1<='z')
			if ((ch2=='+' || ch2=='-') && ch3=='=' && ch4=='0') break;
		cout<<"输入的方程格式不符合规范,请重新输入\n";
	}
	if (ch2=='-') e.b=-e.b;
	e.unknown=ch1;
	return in;
}

// 输出方程
ostream &operator << (ostream &out,CEquation &e)
{
	cout<<e.a<<e.unknown;
	if (e.b>=0) cout<<"+";
	cout<<e.b<<"=0"<<endl;
	return out;
}

// 求解
double CEquation::Solve()
{
	double x;
	if (a==0)
	{
		if (b==0) cout<<"任意一个实数均为方程的解。"<<endl;
		else cout<<"方程无解。"<<endl;
		return 0;
	}
	x=-b/a;
	return x;
}

char CEquation::getUnknown()
{
	return unknown;
}

int main()
{
	CEquation e;
	cout<<"请输入一元一次方程(输入格式:3x-8=0):";
	cin>>e;   //在两次测试中,分别输入3x-8=0和5s+18=0
	cout<<"方程为:"<<e;
	cout<<"方程的解为:"<<e.getUnknown()<<"="<<e.Solve()<<endl; //对两次测试,分别输出x=...和s=...
	e.Solve();
	system("pause");
	return 0;
}


目录
相关文章
|
4月前
1034 有理数四则运算 (20 分)
1034 有理数四则运算 (20 分)
PTA 1034 有理数四则运算 (20 分)
本题要求编写程序,计算 2 个有理数的和、差、积、商。
110 0
|
算法
数学:分数的加减乘除模板(二)
数学:分数的加减乘除模板
72 0
数学:分数的加减乘除模板(二)
7-237 有理数加法 (15 分)
7-237 有理数加法 (15 分)
98 0
|
存储 人工智能 Serverless
6-2 多项式求值 (15 分)
6-2 多项式求值 (15 分)
140 0
PTA 7-1 复数四则运算 (15 分)
本题要求编写程序,计算2个复数的和、差、积、商。
378 0
|
IDE 开发工具
基础编程题目集 - 7-36 复数四则运算(15 分)
基础编程题目集 - 7-36 复数四则运算(15 分)
251 0
|
程序员
程序员数学(3)--一元一次方程
本文目录 1. 为什么要用方程 2. 一元一次方程 3. 等式的性质 4. 解一元一次方程 4.1 合并同类项 4.2 移项 4.3 去括号 4.4 去分母 5. 总结
171 0
程序员数学(3)--一元一次方程