1、 课程设计报告课程设计报告 课程设计题目:课程设计题目:有理数运算 学生姓名学生姓名: 专专 业业:软件工程 班班 级级: 学学 号:号: 指导教师指导教师: 20132013 年年 0606 月月 2020 日日 2 1. 有理数运算 问题描述 有理数是一个可以化为一个分数的数,例如 2/3,533/920,-12/49 都是有理数,而就为无理数。在 C+中,并没有预先定义有理数,需 要时可以定义一个有理数类, 将有理数的分子和分母分别存放在两个 整型变量中。对有理数的各种操作都可以用重载运算符来实现。 基本要求 定义并实现一个有理数类,通过重载运算符+、-、*、/对有理数 进行算术运算,
2、通过重载运算符=实现判定两个有理数是否相等。写 一个优化函数, 它的作用是使有理数约去公分母, 也即是使保存的有 理数分子和分母之间没有公约数(除去 1 以外) 。此外,还要定义一 个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。 测试数据 在应用程序中,创建若干有理数对象,通过带参数的构造函数使 得各有理数对象值各不相同, 然后分别进行各类运算, 输出运算结果, 检验其正确性。 实现提示 设有两个有理数 a/b 和 c/d,则有: (1) 有理数相加 分子=a*d+b*c;分母=b*d (2) 有理数相减 分子=a*d-b*c;分母=b*d (3) 有理数相乘 分子=a*c; 分
3、母=b*d (4) 有理数相除 分子=a*d; 分母=b*c 2 3 优化函数在创建有理数对象时应执行,在执行其它各种运算之后 也需执行它,这样可保证所存储的有理数随时都是最优的。对于判断 两个有理数是否相等, 由于在对有理数进行各种运算后都对其进行优 化, 所以判定两个有理数是否相等只需判定它们两个的分子和分母分 别相等即可。 选做内容 重载插入(“重载的函数形式如下:只能重载为友元函数 istream ostream */ ; rationalnumber:rationalnumber(int a,int b) fenzi=a; fenmu=b; void rationalnumber:s
4、etnumber(int a,int b) fenzi=a; fenmu=b; rationalnumber rationalnumber:operator +(rationalnumber aa) rationalnumber c; c.fenmu=fenmu*aa.fenmu; c.fenzi=fenzi*aa.fenmu+aa.fenzi*fenmu; return c; rationalnumber rationalnumber:operator -(rationalnumber aa) rationalnumber c; c.fenmu=fenmu*aa.fenmu; c.fenzi
5、=fenzi*aa.fenmu-aa.fenzi*fenmu; return c; rationalnumber rationalnumber:operator *(rationalnumber aa) rationalnumber c; c.fenmu=fenmu*aa.fenmu; c.fenzi=fenzi*aa.fenzi; return c; 5 rationalnumber rationalnumber:operator /(rationalnumber aa) rationalnumber c; c.fenmu=fenmu*aa.fenzi; c.fenzi=fenzi*aa.f
6、enmu; return c; void rationalnumber:display() /有理数输出函数的实现 cout(istream return input; double zhuan(rationalnumber r) /将有理数转换成实数的函数实现 return static_cast(r.fenzi*1.0)/static_cast(r.fenmu); rationalnumber if(r.fenmur.fenzi) a=r.fenmu; b=r.fenzi; 6 else a=r.fenzi; b=r.fenmu; while(b!=0) temp=a%b; a=b; b=temp; r.fenzi=r.fenzi/a; r.fenmu=r.fenmu/a; return r; void add() rationalnumber a; rationalnumber b; couta; cout