有理数运算c++程序

更新时间:2024-01-29 13:31:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C++ 课 程 设 计 报 告

课题名称 c++有理数运算程序 专 业 信息与计算科学 班 级 1班 学 号 20106583 姓 名 刘石清

指导教师 陈教授

1.问题描述:有理数是一个可以化为一个分数的数,例如2/3,533/920,-12/49都是有理数,而

就为无理数。在C++中,并没有预先定义有理数,需要时可

以定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中。对有理数的各种操作都可以用重载运算符来实现。

2.基本要求: 定义并实现一个有理数类,通过重载运算符+、-、*、/对有理数进行算术运算,通过重载运算符==实现判定两个有理数是否相等。写一个优化函数,它的作用是使有理数约去公分母,也即是使保存的有理数分子和分母之间没有公约数(除去1以外)。此外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。

3.测试数据: 在应用程序中,创建若干有理数对象,通过带参数的构造函数使得各有理数对象值各不相同,然后分别进行各类运算,输出运算结果,检验其正确性。

4.实现提示: 设有两个有理数a/b和c/d,则有:

有理数相加 分子=a*d+b*c;分母=b*d 有理数相减 分子=a*d-b*c;分母=b*d 有理数相乘 分子=a*c; 分母=b*d 有理数相除 分子=a*d; 分母=b*c

优化函数在创建有理数对象时应执行,在执行其它各种运算之后也需执行它,这样可保证所存储的有理数随时都是最优的。对于判断两个有理数是否相等,由于在对有理数进行各种运算后都对其进行优化,所以判定两个有理数是否相等

只需判定它们两个的分子和分母分别相等即可。

属性和方法定义:

类名 成员类别 类型 成员名 描述 分子 分母 属性 int numerator denominator Rat 方法 int Rat void Rat Rat Rat Rat bool void 输入两个有理数 Rat() reduction(int,int) 化简有理数 +( Rat) -( Rat) *( Rat) /( Rat) ==( Rat) showRat() 两数相加运算 两数相减运算 两数相乘运算 两数相除运算 判断两个有理数是否相等 输出有理数

程序代码:

#include using namespace std; class Rat{ public:

Rat(int a=0,int b=0){numerator=a; denominator=b;}

void reduction(int x,int y); Rat operator + (Rat num2); Rat operator - (Rat num2); Rat operator * (Rat num2); Rat operator / (Rat num2); bool operator ==(Rat num2); void showRat(); private:

int numerator,denominator; };

void Rat::reduction(int x,int y)// 把 有理数进行约分。 { int t; int i; if(x>y) t=y; else t=x;

for(i=t;i>=1 ;i--) if((x%i==0)&&(y%i==0)) { t=i; break;

} if(t) {

numerator=x/t; denominator=y/t; } else {

numerator=x; denominator=y; }

if(numerator==0) cout<<\else

cout<<\有理数:\}

Rat Rat::operator+(Rat num2){ return

Rat(numerator*num2.denominator+denominator*num2.numerator,denominator*num2.denominator);} Rat Rat::operator-(Rat num2){

return

Rat(numerator*num2.denominator-denominator*num2.numerator,denominator*num2.denominator);} Rat Rat::operator*(Rat num2){ return

Rat(numerator*num2.numerator,denominator*num2.denominator);}

Rat Rat::operator/(Rat num2){ return

Rat(numerator*num2.denominator,denominator*num2.numerator);}

bool Rat::operator == (Rat num2) {

if((numerator=num2.numerator)&&(denominator=num2.denominator)) return true; else

return false; }

void Rat::showRat() {

if(numerator==0)

cout<<\ else if(denominator==0)

cout<<\分数的分母不为0,输入有误!\ else

cout<

cout<<\有理数运算系统*********\ cout<<\确定是否进入系统!如果进入请输入y或者Y不进入请输入y或者N\ cin>>m;

if(m=='n'||m=='N')

cout<<\不进入系统!\ else if(m=='y'||m=='Y') {

char s;

cout<<\请输入两个有理数:\ int a,b,c,d; cin>>a>>b>>c>>d;

Rat num1(a,b),num2(c,d),num3;

cout<<\输入的有理数num1为:\ num1.showRat();

cout<<\化简后的num1为:\ num1.reduction(a,b); cout<

cout<<\输入的有理数num2为:\ num2.showRat();

cout<<\化简后的num2为:\ num2.reduction(c,d); cout<

cout<<\输入您所需要的运算符:\ cin>>s; if(s=='+') {

num3=num1+num2;

cout<<\操作为:n1um+num2=\ num3.showRat(); cout<<\化简后的数为:\ num3.reduction(a*d+b*c,b*d); cout<

else if(s=='-')

{

num3=num1-num2;

cout<<\操作为:num1-num2=\ num3.showRat(); cout<<\化简后的数为:\ num3.reduction(a*d-b*c,b*d); cout<

else if(s=='*') {

num3=num1*num2;

cout<<\操作为:num1*num2=\ num3.showRat(); cout<<\化简后的数为:\ num3.reduction(a*c,b*d); cout<

else if(s=='/') {

num3=num1/num2;

cout<<\操作为:num1/num2=\ num3.showRat();

cout<<\化简后的数为:\ num3.reduction(a*d,b*c); cout<

cout<<\您输入的运算符不正确!\ cout<<\由==重载运算符知:\ if(a*d==b*c)

cout<<\ else

cout<<\ } else

cout<<\您的输入有误!\

cout<<\运算结束,继续吗?(y or n)\ char l; cin>>l; if(l=='n'||l=='N')

cout<<\退出运算系统!\ else if(l=='y'||l=='Y') return main(); else

cout<<\您的输入有误!\ return 0; }

本文来源:https://www.bwwdw.com/article/46ew.html

Top