《C++语言程序设计》课程设计报告.doc
《《C++语言程序设计》课程设计报告.doc》由会员分享,可在线阅读,更多相关《《C++语言程序设计》课程设计报告.doc(24页珍藏版)》请在三一办公上搜索。
1、“信息与计算科学”专业C+语言程序设计课程设计 班级 姓名 学号 指导教师 设计日期 报告1一、 目的意义 C+语言程序设计是“信息与计算科学”专业的一门院级选修课,在学完计算机基础、C语言程序设计后开设,内容涉及类与对象、函数、继承与派生、多态、流类库与输入输出、模板等。虽然是选修课程,但关系到大部分同学的就业问题。在理论上讲解完面向对象的程序设计方法之后,另一个主要环节就是通过课程设计加以强化,以达到以下目的: 1、通过编写比课堂上机内容更加复杂、深度更广、更加实用的程序达到综合训练的目的,使学生加深理论知识的理解,培养学生采用面向对象的方法开发软件的能力。 2、通过设置一些需要查阅相关资
2、料才能做的题目,提高学生的自学习能力和创新能力。 3、为后续课程数据结构、数据库原理、软件工程、信息安全与编码、数值计算方面专业课的学习和编程打下坚实的基础。二、 内容要求 1、设计题目有理数就是两个整数的比率,通常表示为,分母不能为0。本设计要求设计一个Rational(有理数)类,实现有理数的四则运算,该类型的对象使用起来要像使用基本类型的对象一样自然。2、设计要求具体要求如下:(1)抽象Ration类,包含两个数据成员(分子、分母),比如有理数可以用对象表示为。(2)如果分子分母有公约数,应该约分,例如应表示为。根据需要,有时要将表示为,或者将表示为(3)重载相应的运算符(输入、输出、加
3、、减、乘、除)。比如,要计算,希望像普通加法一样操作,和相加得,算数表达式为。又如,想使用如下形式直接输入分子分母 cin r; /输出则需要重载这两个流运算符。三、设计思想 1、构造函数 构造函数的设计应能满足如下方式创建对象: rational r(5L); / 5/1 rational p; / 0/1 rational s(2,3); / 2/3 rational q(5,-6); /-5/6 rational q(.5); / 1/2 r(5L)和q(.5)调用不同的构造函数,所以需要使用L(1)来区分。前者表示参数是整型数组,.5为double型数据。 使用默认参数的原型如下所示:
4、 rational r1,r2(5L),r3(4,8),r4(.75); 不允许分母为零。调用Standardize()私有成员函数,使其对“-”号的表达统一。 如果输入的有理数有公约数,则进行化简。gcd()成员函数用来求公约数,它被Reduce()函数调用,完成化简任务。 2、重载“/”运算符 与构造函数同理,得到结果之后,调用Standardize()和Reduce()函数。 其他运算不需要调用Standardize()函数,根据计算公式很容易写出。 3、重载流运算符 输入输出就是按格式构造输出,很简单。 输入流需要保证正确的格式。首先保证分母不等于零;然后调用Standardize()
5、和Reduce()函数调整格式。四、 程序代码/rational.h#ifndef RATIONAL_H#define RATIONAL_H#includeusing namespace std;namespace stdclass rationalprivate:long num,den;/标准化void Standardize(void);/公约数long gcd(long m,long n)const;public:/用于整数有理数,实数有理数的构造函数rational(long p=0,long q=1);rational(double x);/重载流运算符friend istream
6、& operator (istream& istr,rational& x);friend ostream& operator (ostream& ostr,const rational& x);/双目运算符rational operator+(rational& x)const;rational operator-(rational& x)const;rational operator*(rational& x)const;rational operator/(rational& x)const;/单目运算符rational operator-(void)const;/关系运算符int op
7、erator(rational& x)const;/转换运算符,有理数-实数operator double(void)const;/例程int GetNumerator(void) constreturn num;int GetDenominator(void) constreturn den;/化简有理数void Reduce(void);/各成员函数实现rational:rational(long p,long q):num(p),den(q)if(den=0)coutA Zero denominator is invalidendl;exit(1);Standardize();Reduc
8、e();rational:rational(double x)double val1,val2;val1=100000000L*x;val2=10000000L*x;num=long(val1-val2);den=90000000L;Reduce();void rational:Standardize(void)if(denn)if(n=0)x=m;else gcd(n,m%n);else if(m=0)x=n;else gcd(m,n%m);return x;istream& operator (istream& istr,rational& x)char c;istrx.numcx.den
9、;if(x.den=0)coutA Zero denominator is invalidendl;exit(1);x.Standardize();x.Reduce();return istr;ostream& operator (ostream& ostr,const rational& x)ostrx.num/x.den;return ostr;rational rational:operator +(rational& x)constrational temp=rational(num*x.den+den*x.num,den*x.den);temp.Reduce();return tem
10、p;rational rational:operator -(rational& x)constrational temp=rational(num*x.den-den*x.num,den*x.den);temp.Reduce();return temp;rational rational:operator*(rational& x)constrational temp=rational(num*x.num,den*x.den);temp.Reduce();return temp;rational rational:operator/(rational& x)constrational tem
11、p=rational(num*x.den,den*x.num);temp.Standardize(); temp.Reduce();return temp;rational rational:operator-(void)constreturn rational(-num,den);int rational:operator(rational& x)constreturn(num*x.den(rational& x)constreturn(num*x.denden*x.num);rational:operator double(void)constreturn double(num)/den;
12、void rational:Reduce(void)long bigdivisor,tempnumerator; tempnumerator=(num1)num/=bigdivisor;den/=bigdivisor;void PrintMixedNumber(rational x)long wholepart=long(x.GetNumerator()/x.GetDenominator();rational fractionpart=x-rational(wholepart);if(fractionpart=rational(0L)coutwholepart ;elsefractionpar
13、t.Reduce();if(wholepart0)fractionpart=-fractionpart;if(fractionpart!=0)coutwholepart fractionpart ;else coutfractionpart ;#endif/rational.cpp#includerational.hvoid main()cout一、有理数的转换及四则运算endl;rational r1,r2(5L),r3(4,8),r4(.75);cout已知:r1=r1, r2=r2, r3=r3, r4=r4endl;cout进行如下的简单四则运算:endl;cout1、r5=r1+r2
14、-r3+r4=;rational r5=r1+r2-r3+r4;coutr5endl;cout2、-r5=-r5endl;cout3、r6=r1+r2*r3-r4+r2/r4=r1+r2*r3-r4+r2/r4endlendl; cout二、以带分数形式输出有理数endl;cout1、r5=;PrintMixedNumber(r5);coutendl;cout2、-r5=; PrintMixedNumber(-r5);coutendlendl;cout三、动态分数与小数的转化运算endl;float f;cout已知r5=r5,则r5+0.5=;coutr5+.5endl;coutr1;f=f
15、loat(r1);cout等效的小形式数为:fendl;coutf;r1=f;cout转化为分数形式为:r1endlendl; cout四、有理分数的化简endl;coutr1; cout化简后:;coutr1endlendl; cout五、比较两个分数的大小endl;rational r7,r8;cout请输入两个分数:r7r8;coutr8)coutr7r8endl;if(r7=r8)coutr7=r8endl;if(r7r8)coutr7r8endl;五、 测试用例及测试结果 1、第一次测试得到: 2、第二次测试得到:六、 程序不足及升级方向 这个程序的设计涉及的知识较多,测试工作量也比
16、较大。要求设计好测试用例,编写合适的测试程序进行测试,以上我编的测试程序可能也不是十分全面。需要进一步努力和更深入的考虑。 程序编写上有些地方还可以使用菜单程序,使得使程序的灵活性和可操作性更大、更广。 七、参考文献1 姚全珠.C+面向对象程序设计M.北京:电子工业出版社,2010.3 刘振安,刘燕君,孙枕.C+程序设计课程设计M.北京:机械工业出版社,2004.报告2一、目的意义 C+语言程序设计是“信息与计算科学”专业的一门院级选修课,在学完计算机基础、C语言程序设计后开设,内容涉及类与对象、函数、继承与派生、多态、流类库与输入输出、模板等。虽然是选修课程,但关系到大部分同学的就业问题。在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+语言程序设计 C+ 语言程序设计 课程设计 报告
链接地址:https://www.31ppt.com/p-2385141.html