有理数运算C++课程设计报告
有理数运算C++课程设计报告本文简介:课程设计报告课程设计题目:有理数运算学生姓名:冯绍文专业:软件工程班级:1221815学号:201220181502指导教师:许志文2013年06月20日东华理工大学1.有理数运算问题描述有理数是一个可以化为一个分数的数,例如2/3,533/920,-12/49都是有理数,而就为无理数。在C++中,
有理数运算C++课程设计报告本文内容:
课程设计报告
课程设计题目:有理数运算
学生姓名:冯绍文
专
业:软件工程
班
级:1221815
学
号:201220181502
指导教师:许志文
2013年06月20日
东华理工大学
1.
有理数运算
问题描述
有理数是一个可以化为一个分数的数,例如2/3,533/920,-12/49都是有理数,而就为无理数。在C++中,并没有预先定义有理数,需要时可以定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中。对有理数的各种操作都可以用重载运算符来实现。
基本要求
定义并实现一个有理数类,通过重载运算符+、-、*、/对有理数进行算术运算,通过重载运算符==实现判定两个有理数是否相等。写一个优化函数,它的作用是使有理数约去公分母,也即是使保存的有理数分子和分母之间没有公约数(除去1以外)。此外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。
测试数据
在应用程序中,创建若干有理数对象,通过带参数的构造函数使得各有理数对象值各不相同,然后分别进行各类运算,输出运算结果,检验其正确性。
实现提示
设有两个有理数a/b和c/d,则有:
(1)
有理数相加
分子=a*d+b*c;分母=b*d
(2)
有理数相减
分子=a*d-b*c;分母=b*d
(3)
有理数相乘
分子=a*c;
分母=b*d
(4)
有理数相除
分子=a*d;
分母=b*c
优化函数在创建有理数对象时应执行,在执行其它各种运算之后也需执行它,这样可保证所存储的有理数随时都是最优的。对于判断两个有理数是否相等,由于在对有理数进行各种运算后都对其进行优化,所以判定两个有理数是否相等只需判定它们两个的分子和分母分别相等即可。
选做内容
重载插入(>)运算符,使得对有理数可以直接输入输出。设有理数输入格式为:
整数1
整数2
//整数1为分子,整数2为分母
有理数输出格式为:
分子/分母
以下为代码
#include
#include
#include
#include
//using
namespace
std;
删除此处才能为类定义友元函数
class
rationalnumber
//定义一个有理数类
{
private:
int
fenmu;
//有理数分母
int
fenzi;
//有理数分子
public:
rationalnumber(int
a=1,int
b=1);
//带默认形参的构造函数
void
setnumber(int
a,int
b);
//设置分子分母的函数
rationalnumber
operator
+(rationalnumber
aa);
//重载加法运算符
rationalnumber
operator
-(rationalnumber
aa);
//重载减法运算符
rationalnumber
operator(rationalnumber
aa);
//重载乘法运算符
rationalnumber
operator
/(rationalnumber
aa);
//重载除法运算符
void
display();
//有理数输出函数
//friend
void
add(rationalnumber
a,rationalnumber
b);
friend
rationalnumber
//将约分函数设为友元函数
friend
double
zhuan(rationalnumber
r);
//将有理数转换成实数函数声明
friend
istream
//对输入流符号的重载为有元函数
friend
ostream
ostream
return
input;
}
double
zhuan(rationalnumber
r)
//将有理数转换成实数的函数实现
{
return
static_cast(r.fenzi*1.0)/static_cast(r.fenmu);
}
rationalnumber
if(r.fenmu>r.fenzi)
{
a=r.fenmu;
b=r.fenzi;
}
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;
cout>a;
cout>b;
cout>a;
cout>b;
cout>a;
cout>b;
cout>a;
cout>b;
cout>r3;
cout>r4;
cout<<“r1:
“< “< “< “< cout<<“r1: “< cout<<“r2: “< cout<<“r3: “< cout<<“r4: “< cout<<“r1+r2: “< cout<<“r2-r3: “< cout<<“r3*r4: “< cout<<“r2/r4: “< cout<<“你想做有理数的简单运算吗?(y/n)“< char c; while(1) { c=getch(); if(c== y ) { c=xuan(); if(c== 5 ) break; } else if(c== n ) { break; } else ; } cout<<“已经退出运算,按任意键退出程序“< getch(); //system(“cls“); cout<<“成功退出!“< return 0; } 运行界面如下: 按任意键后出现以下界面: 输入r3的值: 这时你可以选择y或n进行选择,但注意必须是小写。若输入的为y: 选择不同的数字依次会出现以下界面: 若输入的为n: 实验总结: 通过此次C++的课程设计,我熟练掌握了面向对象程序语言中的很多功能的实现,并且熟悉了很多调试程序的方法,懂得了处理错误的方法。进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的能力。通过课程设计,在各方面的能力得到了锻炼 经历了这次课程设计,不仅对我的学习提供了帮助,而且在意志力方面也得到了锻炼。没有足够的耐力和信心就很难坚持对课程设计每一步的顺利进行。 14