/*
问题及代码:
*文件名称:
*作者:刘涛
*完成日期:2016.4.2
*
*问题描述:分数类的雏形
*输入描述:无
*程序输出:分数的不同表示方法
*/
#include<iostream>
using namespace std;
class CFraction
{
private:
int nume;//分子
int deno;//分母
int nume1;//化简后的分子
int deno1;//化简后的分母
public:
CFraction(int nu=0,int de=1);//构造函数,初始化
void set(int nu=0,int de=1);//置值,改变值使用
void input();//按照nu/de的格式,如5/2的格式输出
void simplify();//化简
void amplify(int n);//放大n倍,如2/3放大5倍为10/3
void output(int style=0);//输出以8/6为例,style=0时,原样输出
//style为1时,输出化简形式4/3
//style为2时,输出1(1/3)的形式
//style为3时,用小数点输出,如1.3333
//默认方式0
};
CFraction::CFraction(int nu,int de):nume(nu),deno(de){}
void CFraction::set(int nu,int de)
{
nume=nu;
deno=de;
}
void CFraction::simplify()
{
int nu=nume;
int de=deno;
int t;
while(nu%de)
{
t=nu/de;
nu=de;
de=t;
}
nume1=nume/de;
deno1=deno/de;
}
void CFraction::output(int style)
{
if(style==0)
cout<<nume<<"/"<<deno<<endl;
else
if(style==1)
cout<<nume1<<"/"<<deno1<<endl;
else
if(style==2)
{
if((float)nume/(float)deno<1.0)
cout<<nume<<"/"<<deno<<endl;
else if((float)nume/(float)deno==1.0)
cout<<nume/deno;
else if((float)nume/(float)deno>1.0)
cout<<nume/deno<<"("<<nume%deno<<"/"<<deno<<")"<<endl;
}
else if(style==3)
cout<<(float)nume/(float)deno<<endl;
}
void CFraction::amplify(int n)
{
nume=nume*n;
}
void CFraction:: input()
{
char m;
cin>>nume>>m>>deno;
}
int main()
{
CFraction grade(10,4);
grade.simplify();//化简
grade.output(0);
grade.output(1);
grade.output(2);
grade.output(3);//输出
grade.amplify(4);//扩大4倍
grade.output(0);//输出
grade.set(8,6);//设置初值
grade.output(0);
grade.output(1);
grade.output(2);
grade.output(3);//输出
grade.input();
grade.output(0);//输出
return 0;
}
运行及结果:
<img src="https://img-blog.csdn.net/20160402132327366?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
知识点总结:巩固了基于对象编程的方法,清晰了各模块之间的作用类型关系