C++语言实习报告
题
目: 分数计算器
指导教师:
____
院
班
姓
学
系:
级:
名
号:
完成时间:
___
目 录
一、设计的任务要求…………………………………………………………..1
二、程序综述…………………………………………………………………..1
1.程序设计基本思路………………………………………....................1
2.主要程序功能设计……………………………………………………1
三、程序设计流程图…………………………………………………………..4
四、程序清单…………………………………………………………………..5
五、结束语……………………………………………………………………..13
六、参考文献…………………………………………………………………..15
一、设计的任务要求
(1)该程序是分数计算器,程序的一些算术功能没有完成,请编写函数,将程
序完成,要求界面提示清楚,便于操作。
(2)程序的很多逻辑功能没有完成,如大于、小于以及分数与整数的逻辑比较,
请编写函数,将程序完成,要求界面提示清楚,便于操作。
二、程序综述
随着科学的进步和科技的发展,计算机的应用可以说是家喻户晓,但是随着
计算机应用领域的不断扩大,计算机已经深入到社会和生活的各个领域,而对于我
们 21 世纪的青年来说,在社会主义发展的新阶段,更应该了解和掌握时代的脉
搏,通晓计算机的知识和识别计算机的语言,在掌握了 C++语言的概念和语法后,
能熟悉掌握面向对象程序设计的编程方法及各种编程技巧,并能够利用简洁的语
句编写出高效、完整,以解决在生活中各个方面遇到的具体问题,且为程序语言
的软件编程奠定基础,也是在 C 语言程序的基础之上,使我对计算机语言有了
更进一步的理解,和更深一步的认知。同时通过用 C++程序设计语言的应用,可
以让我们提高学生的 C++编程水平,让我们能够学有所获,灵活的运用所学知识,
来实现机器语言。
1.程序设计基本思路
若想完成程序设计首先需要定义一个分数类即 CFraction,并设置分子和分母,
以及将分数转换为对应的小数、返回分数的绝对值、分子分母的约分和置换功能,
在执行计算器功能时,需要进行四则混合运算和逻辑运算,由于是特殊的函数成
员对象之间相互运算,所以需要使用运算符重载功能。故有:
在设计四则混合运算时:
const CFraction&operator+=(int num);//重载+=运算符
const CFraction&operator-=(int num); //重载-=运算符
const CFraction&operator*=(int num); //重载*=运算符
在设计逻辑运算时:
CFraction operator^(const CFraction&basetra,int exp);
bool operator==(const CFraction&leftfra,const CFraction&rightfra);
bool operator!=(const CFraction&leftfra,const CFraction&rightfra);
bool operator>=(const CFraction&leftfra,const CFraction&rightfra);
ostream&operator<<(ostream&os,const CFraction&fra);//输出运算符重载
//(幂)运算符重载
//逻辑运算符
1
//输入运算符重载
istream&operator>>(istream&is,CFraction&fra);
在进行分数运算的时候,由于分子不能为 0,所以有:
void CFraction::Setnume(int newnume){nNume=newnume;}
void CFraction::Setdeno(int newdeno)
{
if(newdeno!=0)
nDeno=newdeno;
cout<<"错误:分母不可以为 0 !\n"<<"按任意键继续";
else
{
cin>>AnyChar;
abort();
}
}
2.主要程序功能设计:
该程序是分数计算器,所以要完成分数与分数之间的加、减、乘、除、乘幂等运
算和分数与整数之间的加、减、乘、除、乘幂等运算,以及分数与分数,分数与
整树之间的逻辑功能运算。
程序中涉及到的类的定义和主要运用函数的列举:
class CFraction
{
private:
int nNume;
int nDeno;
char AnyChar;
public:
CFration();
CFration(int nume,int deno);
int Getnume()const;
int Getdeno()const;
double Decimal()const;
//分数类定义
//分子
//定义一个字符变量
//分母
//构造函数
//构造函数
//返回分子,const 成员函数,不能修改数据成员
//返回分母
//将分数转换为对应的小数
2
//返回分数的绝对值
//设置分子
//设置分母
//约分
//分子分母置换
CFraction Absval()const;
void Setnume(int newnume);
void Setdeno(int newdeno);
void Simplify();
void Recip();
const CFraction&operator+=(int num);//重载+=运算符
const CFraction&operator-=(int num);
const CFraction&operator*=(int num);
CFraction(){ nNume=0; nDeno=1;}
CFraction(int nume,int deno){nNume=nume;nDeno=deno;}
};
//默认构造函数(=0/1)
四则混合运算程序模块:
由于是特殊的函数成员对象之间相互运算,所以需要使用运算符重载功能,以便
用来计算数据之间的大小。
CFraction operator+(const CFraction&leftfra,const CFraction&rightfra);
CFraction operator+(const CFraction&leftfra,int rightnum);
CFraction operator-(const CFraction&leftfra,const CFraction&rightfra);
CFraction operator-(const CFraction&leftfra,int rightnum);
CFraction operator*(const CFraction&leftfra,const CFraction&rightfra);
CFraction operator*(const CFraction&leftfra,int rightnum);
CFraction operator^(const CFraction&basetra,int exp);
//(幂)运算符重载
逻辑运算程序模块:
由于是特殊的函数成员对象之间相互运算,所以需要使用运算符重载功能,以便
用来比较数据之间的大小。
bool operator==(const CFraction&leftfra,const CFraction&rightfra);
bool operator!=(const CFraction&leftfra,const CFraction&rightfra);
bool operator>=(const CFraction&leftfra,const CFraction&rightfra);
istream&operator>>(istream&is,CFraction&fra);
istream&operator>>(istream&is,CFraction&fra);
//输入运算符重载
//输入运算符重载
//逻辑运算符
3
三、程序设计流程图
开始执行
输入选择项
[1]
[2]
[1] 是 否 做 混
合运算
输入选择项
输入选择项
[2] 是 否
做 逻 辑
运算
[1]加法
[2]减法
[3]乘法
[1]分数与分数
[2]分数与整数
最后输出结果
是否返回上一
级[1]或[2]
是 否 退 出
[0]
结束
4
四、程序清单
//定义一个字符变量
#include
#include
#include
#include
using namespace std;
class CFraction
{
private:
int nNume;
int nDeno;
char AnyChar;
public:
CFration();
CFration(int nume,int deno);
int Getnume()const;
int Getdeno()const;
double Decimal()const;
CFraction Absval()const;
void Setnume(int newnume);
void Setdeno(int newdeno);
void Simplify();
void Recip();
const CFraction&operator+=(int num);//重载+=运算符
const CFraction&operator-=(int num);
const CFraction&operator*=(int num);
CFraction(){ nNume=0; nDeno=1;}
CFraction(int nume,int deno){nNume=nume;nDeno=deno;}
};
//默认构造函数(=0/1)
//分数类定义
//分子
//分母
//构造函数
//构造函数
//返回分子,const 成员函数,不能修改数据成员
//返回分母
//将分数转换为对应的小数
//返回分数的绝对值
//设置分子
//设置分母
//约分
//分子分母置换
5
//求 x、y 的最大公因子
int GCF(int x,int y);
CFraction operator+(const CFraction&leftfra,const CFraction&rightfra);
CFraction operator+(const CFraction&leftfra,int rightnum);
CFraction operator-(const CFraction&leftfra,const CFraction&rightfra);
CFraction operator-(const CFraction&leftfra,int rightnum);
CFraction operator*(const CFraction&leftfra,const CFraction&rightfra);
CFraction operator*(const CFraction&leftfra,int rightnum);
CFraction operator^(const CFraction&basetra,int exp);
bool operator==(const CFraction&leftfra,const CFraction&rightfra);
bool operator!=(const CFraction&leftfra,const CFraction&rightfra);
bool operator>=(const CFraction&leftfra,const CFraction&rightfra);
ostream&operator<<(ostream&os,const CFraction&fra);//输出运算符重载
istream&operator>>(istream&is,CFraction&fra);
//(幂)运算符重载
//逻辑运算符
//输入运算符重载
CFraction returnValue(abs(nNume),abs(nDeno));
int CFraction::Getnume()const{return nNume;}
int CFraction::Getdeno()const{return nDeno;}
double CFraction::Decimal()const{return double(nNume)/double(nDeno);}
CFraction CFraction::Absval()const
{
return returnValue;
}
void CFraction::Setnume(int newnume){nNume=newnume;}
void CFraction::Setdeno(int newdeno)
{
if(newdeno!=0)
nDeno=newdeno;
cout<<"错误:分母不可以为 0 !\n"<<"按任意键继续";
else
{
cin>>AnyChar;
abort();
}
6