分数计算器.docx
- 文档编号:7472304
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:19
- 大小:321.52KB
分数计算器.docx
《分数计算器.docx》由会员分享,可在线阅读,更多相关《分数计算器.docx(19页珍藏版)》请在冰豆网上搜索。
分数计算器
.h
#include
classFraction//声明分数类
{
public:
Fraction(inta=0,intb=1)//定义构造函数
{
numerator=a;
denominator=b;
}
friendistream&operator>>(istream&s,Fraction&t);
friendostream&operator<<(ostream&s,Fraction&t);//声明重载输出函数
Fractionoperator+(Fraction&c);//声明重载两个分数的加法运算符
Fractionoperator+(intn);//声明重载分数和整数的加法运算符
Fractionoperator-(Fraction&c);//声明重载两个分数的减法运算符
Fractionoperator-(intn);//声明重载分数减整数的减法运算符
friendFractionoperator-(intn,Fraction&c);
Fractionoperator*(Fraction&c);//声明重载两个分数的乘法运算符
Fractionoperator*(intn);//声明重载分数与整数的乘法运算符
Fractionoperator/(Fraction&c);//声明重载两个分数的除法运算符
Fractionoperator/(intn);//声明重载分数除以整数的除法运算符
friendFractionoperator/(intn,Fraction&c);
Fractionpredigest();//声明约分函数
intgetscore(intscore);
private:
intnumerator;//分子
intdenominator;//分母
};
实现函数
#include
#include"yl1.h"//加入类的头文件
FractionFraction:
:
predigest()//约分函数//
{
intn,d,t,sign=1;//sign为分数符号标记
Fractiontemp;
if(numerator<0&&denominator<0)//当分子、分母同为负时,分数符号标记sign=1
{
numerator=-numerator;
denominator=-denominator;
}
if(numerator>0&&denominator<0)//当分子为正,分母为负时,分数符号标记sign=-1
{
denominator=-denominator;
sign=-1;
}
if(numerator<0&&denominator>0)//当分子为负,分母为正时,分数符号标记sign=-1
{
numerator=-numerator;
sign=-1;
}
n=numerator;
d=denominator;
intr;
if(n {t=n;n=d;d=t;} r=n%d; while(r! =0) { n=d; d=r;//d为最大公约数 r=n%d; } temp.numerator=sign*(numerator/d); temp.denominator=denominator/d; returntemp; } FractionFraction: : operator+(Fraction&c)//重载两个分数的加法运算符 { Fractiontemp; temp.numerator=numerator*c.denominator+denominator*c.numerator; temp.denominator=denominator*c.denominator; returntemp; } FractionFraction: : operator+(intn)//重载分数和整数的加法运算符 { Fractiontemp; temp.numerator=denominator*n+numerator; temp.denominator=denominator; returntemp; } Fractionoperator-(intn,Fraction&c) { Fractiontemp; temp.numerator=c.denominator*n-c.numerator; temp.denominator=c.denominator; returntemp; } FractionFraction: : operator-(intn)//重载分数减整数的减法运算符 { Fractiontemp; temp.numerator=numerator-denominator*n; temp.denominator=denominator; returntemp; } FractionFraction: : operator-(Fraction&c)//重载两个分数的减法运算符 { Fractiontemp; temp.numerator=numerator*c.denominator-denominator*c.numerator; temp.denominator=denominator*c.denominator; returntemp; } FractionFraction: : operator*(Fraction&c)//重载两个分数的乘法运算符 { Fractiontemp; temp.numerator=numerator*c.numerator; temp.denominator=denominator*c.denominator; returntemp; } FractionFraction: : operator*(intn)//重载分数与整数的乘法运算符 { Fractiontemp; temp.numerator=numerator*n; temp.denominator=denominator; returntemp; } FractionFraction: : operator/(Fraction&c)//重载两个分数的除法运算符 { Fractiontemp; temp.numerator=numerator*c.denominator; temp.denominator=denominator*c.numerator; returntemp; } FractionFraction: : operator/(intn)//重载分数除以整数的除法运算符 { Fractiontemp; temp.numerator=numerator; temp.denominator=denominator*n; returntemp; } Fractionoperator/(intn,Fraction&c) { Fractiontemp; temp.numerator=n*c.denominator; temp.denominator=c.numerator; returntemp; } ostream&operator<<(ostream&s,Fraction&t)//重载输出运算符,输出分数 { inta,b,c; a=t.numerator; b=t.denominator; if(a==0||b==0)//当分子,或者分母为0时,输出0 cout<<"0"; if(b==1)//当分母为1时,输出分子 cout< if(a>b&&b! =1)//判断分数为假分数 { c=a/b; a=a%b; cout< if(a! =0) cout<<"又"< } if(a<0&&-a>b&&b! =1)//当分数为负时,判断为假分数 { c=-a/b; a=-a%b; c=-c; cout<<'='< if(a! =0) cout<<"又"< } if(t.numerator>0&&t.numerator =0&&t.denominator! =1) //判断为真分数 s< if(t.numerator<0&&-t.numerator =0&&t.denominator! =1) //判断为真分数 s<<"("< returns; } istream&operator>>(istream&s,Fraction&t)//重载输入运算符,输入分数 {inta,c; charb; s>>a>>b>>c; if(b=='/') { t.numerator=a; t.denominator=c; } else cout<<"输入格式错误! "< returns; } intFraction: : getscore(intscore) { inti,m,z,time=0; Fractiona,temp; temp.numerator=numerator; temp.denominator=denominator; for(i=0;i<3;i++) { cout<<"请输入选择数据类型: 1.整数2.分数"< cin>>m; if(m==1) { cout<<"请输入结果: "; cin>>z; if(z==0&&numerator==0||z==0&&denominator==0) { cout<<"恭喜你答对了! "< time++; score=score+10*time; cout<<"成绩是;"; cout< break; } else { if(z==1&&numerator==1&&denominator==1) { cout<<"恭喜你答对了! "< time++; score=score+10*time; cout<<"成绩是: "; cout< break; } else { if(denominator==1&&z==numerator) { cout<<"恭喜你答对了! "< time++; score=score+10*time; cout<<"成绩是: "; cout< break; } else { cout<<"结果错误,请重新输入! "< score=score+time*10; cout<<"成绩是: "; cout< if(i==2) { cout<<"正确结果为: "< } } } } } if(m==2) { cout<<"请输入结果: "; cin>>a; if(numerator==a.numerator&&denominator==a.denominator) { cout<<"恭喜你答对了! "< time++; score=score+time*10; cout<<"成绩是: "; cout< break; } else { cout<<"结果错误,请重新输入! "< cout<<"成绩是: "; score=score+time*10; cout< if(i==2) { cout<<"正确结果为: "< } } } } returnscore; } 主函数 #include #include #include #include"yl1.h"//加入类的头文件 voidmain()//主函数 { Fractiona,b,result,real; intm,z,score=0,time=0; charc;//数据类型 cout< cout< cout< "< cout< "< cout< "< cout< "< while(m! =0) { cout< (0-3)"; cin>>m; if(m==1)//分数与整数的运算 { cout< "; cin>>a; cout< "; cin>>c; cout< "; cin>>z; if(c=='+') result=a+z; if(c=='-') result=a-z; if(c=='*') result=a*z; if(c=='/') result=a/z; real=result.predigest(); score=real.getscore(score); time++; cout<<"运算式规范为:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分数 计算器
![提示](https://static.bdocx.com/images/bang_tan.gif)